4.1.3 Не удаляется собственное правило правило
При попытке удалить собственное правило получаю исключение:
Quote:System.InvalidOperationException не обработано пользовательским кодом
Message=Правило не зарегистрировано в контейнере TS_RIU2@RTS_SPBFUT010Lt.
Source=StockSharp.Algo
StackTrace:
в #=qB2ExCNEQw8oj77e3UN$lsGXd9IM$6dAY$FrsPtHePsc=.OnRemoving(IMarketRule #=ql0zRQV$KEbPTptc25u4ShA==)
в Ecng.Collections.BaseCollection`2.Remove(TItem item)
в Ecng.Collections.SynchronizedCollection`2.Remove(TItem item)
в TradeStrategy.TresureStrategy.RemoveOrderRules(Order order) в C:\Trade\TradeStrategy\TradeStrategy\TresureStrategy.cs:строка 1630
в TradeStrategy.TresureStrategy.StopOrderOnSignalBarFound(Order stopOrder, Candle signalCandle) в C:\Trade\TradeStrategy\TradeStrategy\TresureStrategy.cs:строка 1116
в TradeStrategy.TresureStrategy.<PrepareStopOrder>b__23(Order o) в C:\Trade\TradeStrategy\TradeStrategy\TresureStrategy.cs:строка 872
в StockSharp.Algo.MarketRule`2.#=qn2RvSblijBybYyyfWKcy1_hs9OJvieXgUlAwEKJ7QG4=()
в StockSharp.Algo.MarketRuleHelper.#=qO_5nYqG02u$qDVGuIGBcPw==(IMarketRuleContainer #=q6WtW4HdAsVTLateaVJyxUg==, IMarketRule #=qXKycGTf2ej0HKdDUPJVrlQ==, Func`1 #=qUHVCmgydNCLfZ5O8NP$PBg==)
в StockSharp.Algo.Strategies.Strategy.#=qCypqGMSO_x8SPWJDIPw__UD8vJqmRZyixTy_v9o8CHprIFRlcm3cJQXa6UL4cY1T9Cm2VTpAHQA6L2x1piL2jw==(IMarketRule #=q3eSZx6_yVLksnYZxrbPPbA==, Func`1 #=qDQNtK0bpCquD2$1aKN0h3w==)
InnerException:
Код приводящий к ошибке:
Code
IMarketRule ChangeStopOrderRule = stopOrder.WhenIndicatorChanged(Indicator).Do(RePrepareOrder).Apply(this);
...
Rules.Remove(ChangeStopOrderRule); // Здесь получаю исключение
Код правила:
Code
public sealed class OrderChangeRule : MarketRule<Order, Order> {
private readonly Func<Order, bool> _changed;
private Order _order;
private readonly BaseIndicator<decimal> _indicator;
public OrderChangeRule(BaseIndicator<decimal> indicator, Order order, Func<Order, bool> changed) : base(order) {
if (indicator == null)
throw new ArgumentNullException("indicator");
if (order == null)
throw new ArgumentNullException("order");
if (changed == null)
throw new ArgumentNullException("changed");
_indicator = indicator;
_order = order;
_changed = changed;
_indicator.Changed += OnIndicatorChanged;
}
private void OnIndicatorChanged(IIndicatorValue v1, IIndicatorValue v2) {
if (_changed != null && _changed(_order))
Activate(_order);
}
// Замена заявки для которой первоначально создано правило. Необходимо для возможности замены заявки без пересоздания правила
public void ChangeOrder(Order newOrder) {
_order = newOrder;
}
protected override void DisposeManaged() {
_indicator.Changed -= OnIndicatorChanged;
base.DisposeManaged();
}
}
public static class OrderChangeRuleHelper {
public static MarketRule<Order, Order> WhenIndicatorChanged(this Order order, BaseIndicator<decimal> indicator, Func<Order, bool> changed = null) {
if (indicator == null)
throw new ArgumentNullException("indicator");
if (order == null)
throw new ArgumentNullException("order");
return new OrderChangeRule(indicator, order, changed);
}
}
Это ошибка? или что-то я делаю не так
в 4.1.2 все отрабатывало нормально