Блог им. RomanPodbornyh |Мой первый робот(ещё в разработке)

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

....все тэги
UPDONW
Новый дизайн