Это мой первый робот.
Суть стратегии заключается в мониторинге текущей цены по выбранному инструменту и при значительном изменении цены в противоположном направлении, при подъёме или падении осуществляется ввод заявки на покупку или продажу соответственно.
Код ещё «сырой». Кому не сложно прошу выявить ошибки и предложить советы, рекомендации по оптимизации кода.
Отправка транзакций заменена на сообщения для отладки алгоритма без последствий для счёта.
На данном этапе условия для покупки и продажи не корректны, так как покупает и продаёт с не всегда указанным 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