Решил сделать несложный торговый скрипт с использованием флагов:
- если на последней закрытой свече close>open, то происходит buy
- если на последней закрытой свече close<open, то происходит 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 --ФЛАГ МЕНЯЕТ ЗНАЧЕНИЕ НА 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 --ФЛАГ МЕНЯЕТ ЗНАЧЕНИЕ НА ИСХОДНОЕ (0)
        
            end
        end
        sleep(1000)
    end
end | 
