Добавление флагов в скрипт

Страницы: 1
RSS
Добавление флагов в скрипт
 

Решил сделать несложный торговый скрипт с использованием флагов:

  • если на последней закрытой свече 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 --ФЛАГ МЕНЯЕТ ЗНАЧЕНИЕ НА 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
 
у вас flag всегда ноль.
 
Цитата
nikolz написал:
у вас flag всегда ноль.
а как правильно нужно?  
 
Цитата
Beginner написал:
Цитата
nikolz написал:
у вас flag всегда ноль.
а как правильно нужно?  
flag=0 --ИСХОДНОЕ ЗНАЧЕНИЕ ФЛАГА

Сейчас переменной присваивается значение 0 на каждой итерации цикла while. Очевидно, что инициализацию переменной нужно вынести за его пределы.
 
Цитата
Станислав написал:
Цитата
Beginner написал:
 
Цитата
nikolz  написал:
у вас flag всегда ноль.
 а как правильно нужно?  
flag=0 --ИСХОДНОЕ ЗНАЧЕНИЕ ФЛАГА

Сейчас переменной присваивается значение 0 на каждой итерации цикла while. Очевидно, что инициализацию переменной нужно вынести за его пределы.
надо вынести начальное значение из цикла.
Страницы: 1
Читают тему
Наверх