А помогите разобраться с 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 видит, что заявка не снятая, а активная и, соответственно, расчет идет уже не верно.
Всегда ли при изменении заявки первой приходит инфо по снимаемой заявке, а уже потом по новой? Не бывает так, что сначала приходит инфо по новой, а следом по снимаемой старой? (аккаунт демо)