Lua для Quik - не работает простой торговый скрипт

Рейтинг: 0Ответов: 0Опубликовано: 10.06.2023

Недавно начал писать на 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

Ответы

Ответов пока нет.