Добрый день, Подскажите, пожалуйста, как на S# корректно реализовать следующий алгоритм: 1) Выставляем лимитную заявку на покупку 2) При каждом частичном исполнении заявки выставляется тейк-профит в виде противоположной лимитной заявки. Тейк-профит должен быть всегда один, т.е. при каждом новом частичном исполнении заявки старый тейк-профит отменяется, новый же с сальдированным большим объёмом - выставляется. И так, пока заявка на покупку полностью не исполнится. Т.е. в итоге после исполнения лимитной заявки на покупку из n лотов должна быть одна противоположная заявка на продажу (тейк-профит) тоже из n лотов. Делаю примерно так через WhenNewTrade: ... _orderOpen.WhenNewTrade(Connector) .Do(o =\u003e { // фиксируем набранную позицию _summVolumeOpen += o.Trade.Volume; _summPriceVolumeOpen += _orderdata.OpenPrice * o.Trade.Volume; // Создать заявку тейк-профит по набранной позиции CreateTakeProfitOrderSell(_summVolumeOpen); }) .Apply(this); ... private void CreateTakeProfitOrderSell(decimal curvol) { lock (_syncObjSafe) { if (_orderClose != null \u0026\u0026 _orderClose.State == OrderStates.Active) CancelOrder(_orderClose); _orderClose = this.SellAtLimit(_orderdata.ClosePrice, curvol); ... RegisterOrder(_orderClose); } } Проблема в том, что при исполнении лимитной заявки по частям WhenNewTrade вызывается быстро несколько раз так, что заявка тейк-профит _orderClose не успевает принять состояние Active и поэтому не отменяется. WhenPartiallyMatched, как я понял, тоже не решает проблему - это правило вызывается столько же раз, сколько и WhenNewTrade. В общем, в результате вместо одного тейк-профита у меня выставляется сразу несколько, что неправильно (все заявки кроме последней должны быть отменёнными).