Выставляю 2 заявки - buyOrder и sellOrder. Затем ставлю обработчик:
this.When(buyOrder.Canceled())
.Do(() => {
log("buy canceled");
buyOrder = null;
});
и
this.When(sellOrder.Canceled())
.Do(() => {
log("sell canceled");
sellOrder = null;
});
this - это стратегия. Затем по определённому событию снимаю всё при помощи CancelActiveOrders()
В логах вижу: buy canceled sell canceled buy canceled sell canceled
Т.е. каждый обработчик вызывается 2 раза. Убираю один ордер - начинает вызываться один раз. Выходит что вызов обработчика Canceled происходит не для текущего ордера, а для всех снятых в цикле. Это баг или фича? И если фича, как мне понять для какой заявки произошло событие Canceled?
Использую эмулятор, s# 3.2.5
Comentarios (5)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
this - это какая именно стратегия, от какого класса наследована?
Просьба называть темы более осторожно :)
наследовался от Strategy Название темы "Проблема с Canceled()" почему так отображается я не знаю.
А ордера разные? Распечатайте их перед созданием условий?
Распечатал. Стало ещё более веселее:
По нижеследующим логам получается, что обработчик вызывается для всех отменённых ордеров, в том числе и для тех, которые были уже отменены ранее. На мой взгляд это не верно. Ожидал, что обработчик будет вызван только для ордера, который отменён.
Upd: Попробовал сейчас на тестовом счёте SmartCOM - поведение такое же. Т.е. эмулятор не причём.
Приложите минимальный код стратегии, на котором это воспроизводится. Чтоб было видно где происходит установка обработчиков и отправка ордеров.