Правило некорректно срабатывает если происходит частичное исполнение заявки. Т.е если заявка частично сработала правило Order.Canceled() срабатывает. Подозреваю что это связанно с тем, что правило скорее всего правило активизируется при смене статуса заявки на Done, а этот статус и у исполненной частично заявки и у отмененной заявки! Сам я к сожалению не могу посмотреть внутренности Order.Canceled() , так что это только предположение...
Комментарии (18)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Почему в Plaza2?
Да честно просто не знаю на других системах так же... Я с плазой только работаю...
Если заявка частично срабатывает и она затем отменена - она действительно отменена, потому правило срабатывает правильно.
Хотите дополнительно отфильтровать те заявки, которые частично исполнились - проверяйте что Balance = Volume. Для таких заявок характерно полная отмена, без частичного исполнения.
Нет. Заявка вообще не отменялась. Правило Order.Canceled() сработало именно при частичном исполнении заявки. Мне именно корректное исполнение Order.Canceled() нужно))
какой при этом order.State? какая версия плазы?
Скажу честно это предположение. Т.к у исполненной заявки так же как и у отмененной статус Done, то я предположил и у частично исполненной так же статус Done. отсюда и неверное срабатывание. К сожалению я не могу вот так сразу статус проверить заявки что бы сказать точно, т.к. частичное исполнение в моей стратегии не так часто происходит... Вообщем то я вас понял. Тогда как только получу точную инф. сразу отпишусь...
Все проверил. Статус Done у заявки.
Может скинете код Order.Canceled() я сам покопаюсь....
Так ответьте на вопрос про версию плазы. В коммите 10989 я делал фикс.
Order.Canceled() не дам, он тут не при чём. У заявки не должен выставляться статус Done. Если у вас версия >= 10989 - копайте PlazaTrader, который всем доступен.
Использую версию 11103. Понят. Ок.
Посмотрите почему статус на Done меняется. Это должно происходить только когда Balance = 0
Да. При этом баланс не был 0 у заявки. Done - "Заявка больше не активна на бирже (была полностью удовлетворена или снята из программы" . Разве если заявка снята у нее Balance = 0?
Ещё раз.
Вам необходимо проверить почему и где у вас переходит в состояние Done когда вы
801\808 строчки в PlazaTrader.cs в последней ревизии.
Ещё детальнее расписать не могу - проще уже будет самому смотреть :)
Ва ха)) Спасиб)
Если честно у меня вызывает сомнения данный кусок: case 2: // исполнена order.State = OrderStates.Done; order.Balance = lastRecord.Get<decimal>(metadata.AmountRest); break;
Правильно, я уже выше сказал что это старая версия, исправил это давно. Сейчас так:
Т.е и статус у заявки уже Done, но при этом баланс еще не ноль...
Все. Спасибо...