Помогите найти ошибку.

Страницы: 1
RSS
Помогите найти ошибку., После срабатывания стопзаявки
 
После срабатывания стопзаявки, запоминаем номер созданной заявки, по этому номеру путем перебора таблицы сделок находим нашу. Запоминаем цену исполнения сделки. Иногда все срабатывает как надо, а иногда скрипт подвешивает квик. Логи иногда заканчиваются строкой "стопзаявка исполнена", а иногда "запомнили номер заявки".

Кусочек скрипта:

if bit.band(stop_order.flags,0x2)==0x0 and bit.band(stop_order.flags,0x1)==0x0 then
to_log(tostring(SECCODE).." Cтоп-заявка № "..tostring(NO).." исполнена.")
 
if stop_order.linkedorder > 0 then
OrderNum_CLOSE = stop_order.linkedorder;
to_log(tostring(SECCODE).." Запоминаем номер созданной стоп-заявкой заявки - № "..tostring(OrderNum_CLOSE))
while Run and close_pos == 0 do
for i=0,getNumberOf("trades")-1 do
local trade = getItem("trades", i);
if trade.order_num == OrderNum_CLOSE then
EPSL = trade.price
to_log(tostring(SECCODE).." Цена исполнения стоп-заявки - "..tostring(EPSL))
close_pos = 2
break;
end;
end;
sleep(100);
end
end
end
 
Здравствуйте,
Не рекомендуем использовать циклы в колбеках.
Т.к. колбеки выполняются в основном  потоке терминала, т.е. пока колбек не закончит работу, терминал будет виснуть.
Все тяжелые циклы, следует использовать только в main.
В самом же колбеке, следует добавить флаг, приводящий к нужным действиям в main
Пример
Код
work = false
function OnStopOrder(...)
 work = true
end

function main()
 ...
  if work then
   ...
  end
...
end

 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Не рекомендуем использовать циклы в колбеках.
Т.к. колбеки выполняются в основном  потоке терминала, т.е. пока колбек не закончит работу, терминал будет виснуть.
Все тяжелые циклы, следует использовать только в main.
В самом же колбеке, следует добавить флаг, приводящий к нужным действиям в main
Пример
Код
  work  =   false 
 function   OnStopOrder ( .. .)
 work  =   true 
 end 

 function   main ()
  .. .
   if  work  then 
    .. .
   end 
 .. .
 end 

  
Спасибо за совет. Сейчас переделаю и буду тестить.
 
Цитата
sav 312 написал:



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