Подписываюсь на правило собственных трейдов по заявке так:
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)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Между приходом сделок всего 33мс, то есть вполне возможно, что уже при обработке первого трейда заявка находится в завершенном состоянии, так как она вполне могла обновиться до вызова обработчика правила, например в другом потоке. Если получится воспроизвести, попробуйте в OrderNewTrades вывести остаток заявки.
Сделки по заявке приходят в другом потоке. Обновление по заявке - в двух других потоках. Это нормальное состояние когда вначале мы поняли что заявка исполнилась полностью (послали по рынку, сразу исполнилась), и лишь потом пришли сделки по заявке в другом потоке.
Я правильно понял что условие Periodical(order.IsMatched) нельзя добавлять? Почему так указанно в примере?
Удалил это из доки, спасибо.