← Atrás

Некорректная работа Order.Canceled()

Правило некорректно срабатывает если происходит частичное исполнение заявки. Т.е если заявка частично сработала правило Order.Canceled() срабатывает. Подозреваю что это связанно с тем, что правило скорее всего правило активизируется при смене статуса заявки на Done, а этот статус и у исполненной частично заявки и у отмененной заявки! Сам я к сожалению не могу посмотреть внутренности Order.Canceled() , так что это только предположение...

¿Le resultó útil este tema?

Compartir tema

Comentarios (18)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

Alexander
Alexander

Почему в Plaza2?

frontman
frontman Autor

Да честно просто не знаю на других системах так же... Я с плазой только работаю...

Alexander
Alexander

Если заявка частично срабатывает и она затем отменена - она действительно отменена, потому правило срабатывает правильно.

Хотите дополнительно отфильтровать те заявки, которые частично исполнились - проверяйте что Balance = Volume. Для таких заявок характерно полная отмена, без частичного исполнения.

frontman
frontman Autor

Нет. Заявка вообще не отменялась. Правило Order.Canceled() сработало именно при частичном исполнении заявки. Мне именно корректное исполнение Order.Canceled() нужно))

Alexander
Alexander

какой при этом order.State? какая версия плазы?

frontman
frontman Autor

Скажу честно это предположение. Т.к у исполненной заявки так же как и у отмененной статус Done, то я предположил и у частично исполненной так же статус Done. отсюда и неверное срабатывание. К сожалению я не могу вот так сразу статус проверить заявки что бы сказать точно, т.к. частичное исполнение в моей стратегии не так часто происходит... Вообщем то я вас понял. Тогда как только получу точную инф. сразу отпишусь...

frontman
frontman Autor

Все проверил. Статус Done у заявки.

frontman
frontman Autor

Может скинете код Order.Canceled() я сам покопаюсь....

Alexander
Alexander

Так ответьте на вопрос про версию плазы. В коммите 10989 я делал фикс.

Order.Canceled() не дам, он тут не при чём. У заявки не должен выставляться статус Done. Если у вас версия >= 10989 - копайте PlazaTrader, который всем доступен.

frontman
frontman Autor

Использую версию 11103. Понят. Ок.

Alexander
Alexander

frontman: Использую версию 11103. Понят. Ок.

Посмотрите почему статус на Done меняется. Это должно происходить только когда Balance = 0

frontman
frontman Autor

Да. При этом баланс не был 0 у заявки. Done - "Заявка больше не активна на бирже (была полностью удовлетворена или снята из программы" . Разве если заявка снята у нее Balance = 0?

Alexander
Alexander

frontman: Да. При этом баланс не был 0 у заявки. Done - "Заявка больше не активна на бирже (была полностью удовлетворена или снята из программы" . Разве если заявка снята у нее Balance = 0?

Ещё раз.

  1. Заявка может быть удалена с биржи - вызван Cancel. Тогда State = Done, Balance != 0. Событие Order.Canceled() срабатывает
  2. Заявка может быть переведена в состояние Done когда Balance становится = 0.

Вам необходимо проверить почему и где у вас переходит в состояние Done когда вы

  1. и не снимаете заявку с биржи
  2. и не Balance = 0.

801\808 строчки в PlazaTrader.cs в последней ревизии.

Ещё детальнее расписать не могу - проще уже будет самому смотреть :)

frontman
frontman Autor

Ва ха)) Спасиб)

frontman
frontman Autor

Если честно у меня вызывает сомнения данный кусок: case 2: // исполнена order.State = OrderStates.Done; order.Balance = lastRecord.Get<decimal>(metadata.AmountRest); break;

Alexander
Alexander

frontman: Если честно у меня вызывает сомнения данный кусок: case 2: // исполнена order.State = OrderStates.Done; order.Balance = lastRecord.Get<decimal>(metadata.AmountRest); break;

Правильно, я уже выше сказал что это старая версия, исправил это давно. Сейчас так:

					case 2: // исполнена
						order.Balance = lastRecord.Get<decimal>(metadata.AmountRest);
						if (order.Balance == 0)
							order.State = OrderStates.Done;
						break;
frontman
frontman Autor

Т.е и статус у заявки уже Done, но при этом баланс еще не ноль...

frontman
frontman Autor

Все. Спасибо...