← Назад

Правило для заявки WhenNewTrades удаляется раньше времени

Подписываюсь на правило собственных трейдов по заявке так:


order.WhenNewTrades().Do(OrderNewTrades).Apply(this).Periodical(order.IsMatched);

Лог работы:

21:57:00.455 | | QuikTrader | RegisterOrder: TransactionId=9837769, Id=0, Price=140625, Balance=5, Security=RIU2@RTS, State=None 21:57:00.937 | | QuikTrader | New order: TransactionId=9837769, Id=1658571773, Price=140625, Balance=5, Security=RIU2@RTS, State=Active 21:57:00.941 | | | Новая Sell сделка 70191794 по цене 140625 на 1 заявки 9837769. 21:57:00.966 | | | Правило 'Регистрация заявки 0 (5365516)' удалено. 21:57:00.967 | | | Правило 'Новые сделки заявки 0 (10491563)' активировано. 21:57:00.968 | | | Правило 'Полное исполнение 0 (2544033)' активировано. 21:57:00.968 | | | Подготовлена 'STOP' заявка по цене 140855, V=1 для заявки с Id=1658571773, активации по цене 140735 21:57:00.969 | | | Новая позиция -5. 21:57:00.971 | | | Правило 'Полное исполнение 0 (2544033)' активировано. 21:57:00.972 | | | Правило 'Полное исполнение 0 (2544033)' удалено. 21:57:00.972 | | | Правило 'Новые сделки заявки 0 (10491563)' удалено. 21:57:00.973 | | QuikTrader | Order changed: TransactionId=9837769, Id=1658571773, Price=140625, Balance=0, Security=RIU2@RTS, State=Done 21:57:00.974 | | | Новая Sell сделка 70191795 по цене 140625 на 4 заявки 9837769.

Когда проходит собственная сделка на 1 заявки 9837769, правило активируется, и выставляется защитная стоп заявка (о чем пишется запись в лог). Когда проходит собственная сделка на 4 заявки 9837769, правило уже оказывается удалено. и защитная заявка не выставляется. Объясните, пожалуйста, почему так происходит?

Комментарии (4)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Sergey Sokolov
Sergey Sokolov

Между приходом сделок всего 33мс, то есть вполне возможно, что уже при обработке первого трейда заявка находится в завершенном состоянии, так как она вполне могла обновиться до вызова обработчика правила, например в другом потоке. Если получится воспроизвести, попробуйте в OrderNewTrades вывести остаток заявки.

Sergey Masyura
Alexander
Alexander

Сделки по заявке приходят в другом потоке. Обновление по заявке - в двух других потоках. Это нормальное состояние когда вначале мы поняли что заявка исполнилась полностью (послали по рынку, сразу исполнилась), и лишь потом пришли сделки по заявке в другом потоке.

paveld
paveld Автор

Alexander Mukhanchikov: Сделки по заявке приходят в другом потоке. Обновление по заявке - в двух других потоках. Это нормальное состояние когда вначале мы поняли что заявка исполнилась полностью (послали по рынку, сразу исполнилась), и лишь потом пришли сделки по заявке в другом потоке.

Я правильно понял что условие Periodical(order.IsMatched) нельзя добавлять? Почему так указанно в примере?

Alexander
Alexander

paveld:

Alexander Mukhanchikov: Сделки по заявке приходят в другом потоке. Обновление по заявке - в двух других потоках. Это нормальное состояние когда вначале мы поняли что заявка исполнилась полностью (послали по рынку, сразу исполнилась), и лишь потом пришли сделки по заявке в другом потоке.

Я правильно понял что условие Periodical(order.IsMatched) нельзя добавлять? Почему так указанно в примере?

Удалил это из доки, спасибо.