Некорректная работа Order.Canceled()
Atom Ответить
08.11.2011


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

Теги:


Спасибо:




18 Ответов
Alexander

Фотография
Дата: 08.11.2011
Ответить


Почему в Plaza2?
Спасибо:

frontman

Фотография
Дата: 08.11.2011
Ответить


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

Alexander

Фотография
Дата: 08.11.2011
Ответить


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

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

frontman

Фотография
Дата: 08.11.2011
Ответить


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

Alexander

Фотография
Дата: 08.11.2011
Ответить


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

frontman

Фотография
Дата: 08.11.2011
Ответить


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

frontman

Фотография
Дата: 08.11.2011
Ответить


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

frontman

Фотография
Дата: 08.11.2011
Ответить


Может скинете код Order.Canceled() я сам покопаюсь....
Автор топика
Спасибо:

Alexander

Фотография
Дата: 08.11.2011
Ответить


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

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

frontman

Фотография
Дата: 08.11.2011
Ответить


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

Alexander

Фотография
Дата: 08.11.2011
Ответить


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


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

frontman

Фотография
Дата: 08.11.2011
Ответить


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

Alexander

Фотография
Дата: 08.11.2011
Ответить


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

Фотография
Дата: 08.11.2011
Ответить


Ва ха)) Спасиб)
Автор топика
Спасибо:

frontman

Фотография
Дата: 08.11.2011
Ответить


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

frontman

Фотография
Дата: 08.11.2011
Ответить


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

Alexander

Фотография
Дата: 08.11.2011
Ответить


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

Фотография
Дата: 08.11.2011
Ответить


Все. Спасибо...
Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy