Lua для Quik - не работает простой торговый скрипт
Недавно начал писать на lua для quik и решил сделать простейший торговый скрипт:
- если на последней закрытой свече close>open, то происходит buy
- если на последней закрытой свече close<open, то происходит sell Чтобы скрипт на тренде не совершал новых сделок, то я решил добавить флаги по логике: flag=0 - исходное значение flag=1 - присваивается после buy flag=0 - присваивается после sell И по описанной логике код работает все время до отключения.
Все это включено в код ниже, но он работает только если flag отключены. Если flag активны, то в таблице даже цены не появляются.
Подскажите плиз, что я делаю не так...
------------------------------------------
local SecCode="MMM3" --код тикера
local Depo="XXXX" --счет-депо
------------------------------------------
--условие остановки скрипта
local stopped = false
local T = {}
function OnStop()
stopped = true
return 2000
end
--основной блок
function main()
local Table = AllocTable()
--создаем таблицу
AddColumn(Table, 1,"Тикер", true, QTABLE_STRING_TYPE, 13)
AddColumn(Table, 2,"Close", true, QTABLE_DOUBLE_TYPE, 13)
AddColumn(Table, 3,"Open", true, QTABLE_DOUBLE_TYPE, 13)
CreateWindow(Table)
SetWindowCaption(Table, "Test")
SetWindowPos(Table, 0, 10, 390, 90)
InsertRow(Table, -1)
while stopped==false do
--получаем количество свечей
local N = getNumCandles("Price")
--получаем данные по идентификаторам на графике
local Price, N, Name = getCandlesByIndex("Price", 0, N-2,1) --идентификатор цены на графике - Price
flag=0
--заполняем таблицу данными
SetCell(Table, 1, 1, tostring("IMOEX"))
SetCell(Table, 1, 2, tostring(Close))
SetCell(Table, 1, 3, tostring(Open))
--------------------------------------------------------------------------------------------------------------
--отправка заявки на покупку при срабатывании условия
if Close>Open and flag==0 then
local ID_B_Order=10
local Order = {
["ACTION"]="NEW_ORDER",
["ACCOUNT"]= Depo,
["OPERATION"] = "B",
["CLASSCODE"]="SPBFUT",
["SECCODE"] = SecCode,
["PRICE"] = "0",
["QUANTITY"] = tostring(1),
["TRANS_ID"] = tostring(ID_B_Order),
["TYPE"] = "M",
}
local Err_Order = sendTransaction(Order)
message(Err_Order)
flag=1
elseif Close<Open and flag==1 then
local ID_S_Order=1
local Order = {
["ACTION"]="NEW_ORDER",
["ACCOUNT"]= Depo,
["OPERATION"] = "S",
["CLASSCODE"]="SPBFUT",
["SECCODE"] = SecCode,
["PRICE"] = "0",
["QUANTITY"] = tostring(1),
["TRANS_ID"] = tostring(ID_S_Order),
["TYPE"] = "M",
}
local Err_Order = sendTransaction(Order)
message(Err_Order)
flag=0
end
end
sleep(1000)
end
end
Источник: Stack Overflow на русском