Обнаружил что, MyTrades хоть и является синхоронизированной, но обновляется с опозданием. у меня стратегия содержит такое правило
this
.When(StrategyRuleConditionHelper.StrategyNewMyTrades(this) )
.Do(RegisterNext);
в методе происходит проверка того, что заявка исполнена полностью(т.к. большие заявки исполняются обычно за несколько сделок)
private void RegisterNext()
{
if(TraderHelper.IsMatched(this.MyTrades[this.MyTrades.Count-1].Order)){
_curLotBuySellNow += this.MyTrades[this.MyTrades.Count-1].Order.Volume;
часто происходит так, что он проверяет одну и туже сделку, т.е. остальные ещё не попали в список. Как с этим быть?
Комментарии (6)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
в событие NewMyTrades должны передаваться трейды - у вас же в RegisterNext ничего не передается. Не знаю как эту конструкцию описать через .When.Do я делаю по старинке: в конструкторе стратегии: this.NewMyTrades += new Action<IEnumerable<MyTrade>>(OnNewMyTrades);
...
2. вам судя по вашему примеру нужны не сами трейды, а изменение состояния ордера - а тогда вы можете ловить именно это событие this.OrderChanged += new Action<Order>(OnOrderChanged); void OnOrderChanged(Order obj) { if(obj.IsMatched()) { ....
Какой именно ордер передается в void OnOrderChanged(Order obj) ?
Скажите, может ли оредер изменятся, после того, как он был исполнен? У меня поулчается что метод вызывается для одного исполненного ордера несколько раз.
Как этого избежать?
У нас такая же проблема - найдено ли решение?
Такая же - это какая? Если про несколько раз изменяется после Done - да, такое может быть.
Пример для плазы2:
Как избежать - локально в стратегии.