OnOrder вызывается дважды Ontrade трижды! Что за глюч

Страницы: 1
RSS
OnOrder вызывается дважды Ontrade трижды! Что за глюч
 
Пишу скрипт на ЛУА

При наступлении события с заявкой - OnOrder вызывается дважды хотя должны 1 раз
При наступлении события OnTrade вызывается вообще Трижды

Господа у всех там или только у меня ? вот лог:

16:01:24 OnOrder 3478651900 bit0 true bit1 false bit2 false
16:01:24 OnOrder 3478651900 bit0 true bit1 false bit2 false

16:01:25 OnTrade 3478651900 192427030 bit0 false bit1 false bit2 false
16:01:25 OnTrade 3478651900 192427030 bit0 false bit1 false bit2 false
16:01:25 OnTrade 3478651900 192427030 bit0 false bit1 false bit2 false
 
да, уже обсуждалось
 
Здравствуйте, да, вопрос уже неоднократно обсуждался на форуме. Можно почитать здесь:

https://forum.quik.ru/forum10/topic1082/
 
А помогите разобраться с OnOrder. Пытаюсь вести контроль открытых заявок и сделок, чтобы не вылазить за риск. При новой заявке просто добавляю количество из заявки, а при изменении уже открытой смотрю, что пришло. Если изменение по активной, то убираю количество исполненного, если по снятой, то убираю весь объем снятой.
Вот код:
Код
OnOrderCl ock={}
CheckedOrderNum={}

function OnOrder(order)

OnOrderClock[#OnOrderClock+1]=os.clock()

   for i=1,#CheckedOrderNum do
      local find = false
      
      -- если пришла заявка из массива
      if CheckedOrderNum[i] == order.order_num then
         find = true

         -- если время между заявками меньше определенного, выходим из функции
         if OnOrderClock[#OnOrderClock]-OnOrderClock[#OnOrderClock-1] < 0.15 then return end

         -- иначе обрабатываем
         -- если это активная заявка
         if not TestBit(order.flags, 1) then

         ... уменьшаем на количество исполненных заявок
         return

         -- если это снятая заявка
         elseif TestBit(order.flags, 1) then

         ... уменьшаем на количество лотов снятой заявки
         return
         end
      
      end
   end

   -- иначе пришла новая заявка
   if not find then
      ... добавляем заявки
      CheckedOrderNum[#CheckedOrderNum+1] = order.order_num
   end
end

function TestBit(x, bit_num)
  local p = 2 ^ bit_num
  return x % (p + p) >= p
end

Но есть проблема. Я отправляю ордер и начинаю его двигать, чтобы проверить. Так понял, когда я на графике передвигаю ордер, старая заявка автоматом снимается и выставляется новая.
Почему-то проверка флага работает с перебоями. Т.е. двину ордер, функция TestBit видит, что заявка снятая и количество заявок уменьшается, а при появлении новой - добавляется и все нормально. А иногда, после переноса ордера, функция TestBit видит, что заявка не снятая, а активная и, соответственно, расчет идет уже не верно.

Всегда ли при изменении заявки первой приходит инфо по снимаемой заявке, а уже потом по новой? Не бывает так, что сначала приходит инфо по новой, а следом по снимаемой старой? (аккаунт демо)
 
А править свои сообщения нельзя?
Вопрос снимаю, разобрались.
Страницы: 1
Читают тему
Наверх