Решил сделать несложный торговый скрипт с использованием флагов:
- если на последней закрытой свече 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 |