← Back

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

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

Comments (18)

Login or Create account, Log in or register to leave a comment

Alexander
Alexander

Почему в Plaza2?

frontman
frontman Author

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

Alexander
Alexander

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

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

frontman
frontman Author

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

Alexander
Alexander

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

frontman
frontman Author

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

frontman
frontman Author

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

frontman
frontman Author

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

Alexander
Alexander

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

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

frontman
frontman Author

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

Alexander
Alexander

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

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

frontman
frontman Author

Да. При этом баланс не был 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 Author

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

frontman
frontman Author

Если честно у меня вызывает сомнения данный кусок: 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 Author

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

frontman
frontman Author

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