Столкнулся с такой проблемой...
При появлении события новой сделки по заявке, нужно достать пройденный объем по данной заявке.
this .When(MicexOrder.NewTrades()) .Do(trades => Volume(MicexOrder));
private void Volume(Order IspolnennaySdelka) { IspolnenVol = IspolnennaySdelka.Volume - IspolnennaySdelka.Balance; //IspolnenVolKotir = IspolnennaySdelka.GetMatchedVolume(); }
Но Balance не всегда успевает обновиться и на выходе получаю пройденный объем = 0. Т.е. правило уже срабатывает и заявка полностью исполняется, но в методе Volume() данная заявка еще Aсtivе и Balance = Volume.
Comentários (6)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Стандартная ситуация - таблицы из квика обновляются в разных потоках. И порядок их обновления никак не регламентируется.
Александр, а на какую информацию, в своих разработках, вы стараетесь делать акцент(на что реагируют ваши роботы) изменение заявки или появление сделки?
Изменение позиции
Появилась еще одна проблема. MicexOrder постоянно меняется и к каждой заявке добавляется правило :
Как в метод Volume передать именно ту заявку, по которой произошло событие?
.When(MicexOrder.NewTrades()) .Do<Order>(???)
Мне кажется вот так this .When(MicexOrder.NewTrades()) .Do(Volume);
Только лучше переименуйте метод Volume в другой, чтобы не спутать его со свойством стратегии.
а я вот в арбитражных стратегиях оперирую сделками, нагородил свой огород по контролю за позициями))). И меня давно уже грызет чувство что это не самый простой и качественный вар. Альтернативой,как раз, рассматриваю событие изменение позиции по одному из инструментов, в котором будет запускаться дочерняя стратегия типа DeltaHedge корректирующая позицию по второму инструменту. Как считаете такой подход будет более правильным?