Как получить в методе-обработчике правила целевой объект?


Как получить в методе-обработчике правила целевой объект?
Atom Ответить
08.02.2012


Скажите пожалуйста, Как получить в методе, который вызывается при срабатывании правила(правило, допустим на неуспешную регистрацию заявки) объект OrderFailed ?

Теги:


Спасибо:




9 Ответов
tmt

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


Код
// подписываемся на событие о неудачной регистрации заявок
Trader.OrdersRegisterFailed += OrdersFailed;
Спасибо:

vader

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


Спасибо, но я имел ввиду, если я пользуюсь такой конструкцией
Код

 this.When(StrategyRuleHelper.RegisterFailed(order))
                .Do(OnRegisterFailed)
                .Once();

Как мне получить объект OrderFailed в методе OnRegisterFailed ?
Автор топика
Спасибо:

tmt

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


Ну пока я сам до такого не дошел, если честно BigGrin но я думаю, что как то так можно сделать

Код
Trader.OrdersRegisterFailed += OrdersFailed;
{
  foreach (var myOrdersFailed in OrdersFailed)
  {
    var trade = myOrdersFailed;
    //и тут уже искать свою заявку.. например по цене, направлению, бумаге или еще чему
  }
}


Конечно это не идеальный вариант, но я бы и сам взглянул на правильный
Спасибо:

vader

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


А почему вы не используете класс Strategy ?
Я в начале его не использовал, работал через Trader, но потом понял что это не удобно.

Кстати, глядя на ваш код придумал такой способ
Код

 this.When(StrategyRuleHelper.RegisterFailed(order))
                .Do(() => OnRegisterFailed(order))
                .Once();

private void OnRegisterFailed(Order order)
        {
            OrderFail orderFail = OrderFails.Where(s => s.Order.TransactionId == order.TransactionId).First();
        }


Правда есть проблема.
На сколько я помню, в некоторых случаях при неуспешной регистрации заявки её TransactionId остается 0 и в таком случае в списке OrderFails может оказаться несколько OrderFail одинаковых для условия проверки.
Нужно протестить этот момент.
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 08.02.2012
Ответить


Код
this.When(order.RegisterFailed()) 
                .Do(OnRegisterFailed) 
                .Once(); 
  
private void OnRegisterFailed(OrderFail fail) 
        { 

        } 
Спасибо: vader

vader

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


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

tmt

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


vader Перейти
А почему вы не используете класс Strategy ?
Я в начале его не использовал, работал через Trader, но потом понял что это не удобно.

Кстати, глядя на ваш код придумал такой способ
Код

 this.When(StrategyRuleHelper.RegisterFailed(order))
                .Do(() => OnRegisterFailed(order))
                .Once();

private void OnRegisterFailed(Order order)
        {
            OrderFail orderFail = OrderFails.Where(s => s.Order.TransactionId == order.TransactionId).First();
        }


Правда есть проблема.
На сколько я помню, в некоторых случаях при неуспешной регистрации заявки её TransactionId остается 0 и в таком случае в списке OrderFails может оказаться несколько OrderFail одинаковых для условия проверки.
Нужно протестить этот момент.

Да использую) тока я не могу разобраться как стакан там вызвать(примеров нету, где стакан бы использовался в Strategy) так же и с тестированием, кароче чуть поже думаю разберусь

esper, спасибо Smile
Спасибо:

vader

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


Вот так Trader.GetMarketDepth(Security);
Автор топика
Спасибо: tmt

tmt

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


ну я чуток делал подругому) хотя так грамотнее. Спасибо
Спасибо:


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

loading
clippy