Добрый день!
Запускаю S# в режиме тестирования на истории.
Создаю TakeProfit/StopLoss Conditional Order и подписываюсь на событие нового трейда. В момент исполнения правила возникает ошибка внутри S#:
в методе TraderHelper.GetMatchedVolume вылетает ArgumentException("order").
в коде этого метода написан такой код:
https://github.com/Stock...go/TraderHelper.cs#L913
Код
if (order.Type == OrderTypes.Conditional)
throw new ArgumentException(nameof(order));
Почему нельзя у ConditionalOrder посчитать реализованный объем?
Судя по стектрейсу ошибки метод GetMatchedVolume вызывается при получении значения свойства AllTradesReceived в классе NewTradeOrderRule.
Это намекает на то, что TakeProfit/StopLoss ордера не могут частично исполняться. Разве это верно?
Также, можно заметить закомментированный код с проверкой на ConditionalOrder в методе OnNewMyTrade в классе NewTradeOrderRule
https://github.com/Stock...uleHelper_Order.cs#L241
Может эту проверку забыли закомментировать в GetMatchedVolume?
Полезная инфа:
1. Создание TakeProfit оредра для бэкстета:
Код
//this == Strategy
var takeProfitOrder = this.CreateOrder(takeProfitDirection, activationPrice, volume);
var condition = new EmulationOrderCondition { IsTakeProfit = true };
var takeProfitCondition = (ITakeProfitOrderCondition)condition;
takeProfitCondition.IsTrailing = true;
takeProfitCondition.ActivationPrice = activationPrice;
takeProfitCondition.ClosePositionPrice = activationPrice;
takeProfitOrder.Condition = condition;
takeProfitOrder.Type = OrderTypes.Conditional;
takeProfitOrder.WhenNewTrade(this).Do(t => /*<code>*/).Apply(this);
RegisterOrder(takeProfitOrder);
2. Стектрейс
Код
System.ArgumentException: order
at StockSharp.Algo.TraderHelper.GetMatchedVolume(Order order)
at StockSharp.Algo.MarketRuleHelper.NewTradeOrderRule.get_AllTradesReceived()
at StockSharp.Algo.MarketRuleHelper.NewTradeOrderRule.CheckOrderState()
at StockSharp.Algo.MarketRuleHelper.OrderRule`1.CanFinish()
at StockSharp.Algo.MarketRule`2.ProcessRuleVoid()
at StockSharp.Algo.MarketRuleHelper.ActiveRule(IMarketRuleContainer container, IMarketRule rule, Func`1 process)
at StockSharp.Algo.Strategies.Strategy.StockSharp.Algo.IMarketRuleContainer.ActivateRule(IMarketRule rule, Func`1 process)
Может я что-то не так делаю? Подскажите как исправить эту ошибку?
Upd:
при использовании события order.WhenAllTrades таже самая ошибка