Это мой первый робот.
Суть стратегии заключается в мониторинге текущей цены по выбранному инструменту и при значительном изменении цены в противоположном направлении, при подъёме или падении осуществляется ввод заявки на покупку или продажу соответственно.
Код ещё «сырой». Кому не сложно прошу выявить ошибки и предложить советы, рекомендации по оптимизации кода.
Отправка транзакций заменена на сообщения для отладки алгоритма без последствий для счёта.
На данном этапе условия для покупки и продажи не корректны, так как покупает и продаёт с не всегда указанным local Procent, уже голову себе сломал как это исправить.
Интересуют следующие вопросы:
1)Как сделать, чтобы не покупал пока есть открытая позиция?
2)Если возможно, как рассчитать издержки комиссий, чтобы при вычитании их не быть в минусе?
3)Правильная ли структура кода?
CLASSCODE="TQBR" SECCODE="YNDX" QUANTITY="1" tB = { ["CLASSCODE"]=CLASSCODE, ["SECCODE"]=SECCODE, ["ACTION"]="NEW_ORDER", ["ACCOUNT"]="СЧЕТ", ["CLIENT_CODE"]="КОД КЛИЕНТА", ["TYPE"]="M", ["OPERATION"]="B", ["QUANTITY"]=QUANTITY, ["PRICE"]="0", ["TRANS_ID"]="1" } tS = { ["CLASSCODE"]=CLASSCODE, ["SECCODE"]=SECCODE, ["ACTION"]="NEW_ORDER", ["ACCOUNT"]="СЧЕТ", ["CLIENT_CODE"]="КОД КЛИЕНТА", ["TYPE"]="M", ["OPERATION"]="S", ["QUANTITY"]=QUANTITY, ["PRICE"]="0", ["TRANS_ID"]="1" } run=true function main() local Price="0" local Procent=0.005 while run do --Получение текущей цены по инструменту local lastPriceT = getParamEx(CLASSCODE, SECCODE, "LAST");--Обращение к ячейке таблицы с ценой local lastPrice = tonumber(lastPriceT.param_value);--Значение текущей цены --Текущая цена получена в переменной - "lastPrice" ---------------------------------------------------- --Преобразование Price в строчное значение Price=tonumber(Price) if Price==0 then Price=lastPrice --Если Price=0, то к Price присваивается lastPrice end Proc=(lastPrice-Price)/Price*100 --Процент изменения в переменной Proc ---------------------------------------------------- --Покупка if Price < lastPrice then Price = lastPrice --Если Price больше lastPrice то, к Price присваивается lastPrice elseif Proc>-Procent then message("Произведена покупка по цене="..tostring(lastPrice)) --sendTransaction(tB)-- --Иначе, если Proc>-0.005 то отправляется заявка на покупку --Покупка произведена ---------------------------------------------------- end --Продажа if Price > lastPrice then Price = lastPrice elseif Proc>Procent then message("Произведена продажа по цене="..tostring(lastPrice)) --Продажа произведена end sleep(5000) --Прерывание скрипта на 5 секунд end end function OnStop() run=false end