При защите заявки с двух возникает NullReferenceException при котирвании
Приветствую уважаемых Михаила и коллег!
Как ни пытаюсь использовать механизм защиты заявок с двух сторон так или иначе наталкиваюсь на System.NullReferenceException:
Делаю по примеру из документации так:
RegisterOrder(order);
When(order.NewTrades()).Do(
this.Protect(order,
t => new TakeProfitStrategy(t, 8.Points(Security)),
t => new StopLossStrategy(t, 4.Points(Security)))). Activated<Strategy>(s =>
{
When(s.Stopped()).
Do(() =>
{
/* сработало стоп условие */
});
}
Вот вывод
SS 18:02:54.5659960 Условие активировано.
SS 18:02:55.6690591 Условие активировано.
SS 18:02:56.0800826 Условие удалено.
SS 18:02:56.1830885 Условие активировано.
SS 18:02:56.6941177 Условие удалено.
SS 18:02:56.7951235 Условие активировано.
CBGIBTJWVIETWCTYIXWE 18:02:56.8011239 Стратегия запущена.
SS 18:02:56.8041240 Условие удалено.
CBGIBTJWVIETWCTYIXWE 18:02:56.9071299 Условие активировано.
BS 18:02:56.9161304 Стратегия запущена.
BS 18:02:56.9161304 Стратегия запущена.
TPS 18:02:56.9171305 Стратегия запущена.
SLS 18:02:56.9171305 Стратегия запущена.
SS 18:03:06.1856606 Условие активировано.
SS 18:03:09.6178569 Условие активировано.
SS 18:03:10.0878838 Условие удалено.
SS 18:03:10.1888896 Условие активировано.
SS 18:03:10.6279147 Условие удалено.
SLS 18:03:46.3049553 Регистрация защитной заявки с ценой 10502 и объемом 1.
SLS 18:03:46.3059554 Регистрация новой заявки на Sell с ценой 10502 и объемом 1.
SLS 18:03:46.7649816 Заявка 64609003 на Sell отправлена с ценой 10502 объемом 1.
SLS 18:03:49.8051555 Котируемая заявка 64609003 исполнилась.
SLS 18:03:49.8061556 Стратегия останавливается.
SLS 18:03:50.8202136 Котирование отменяет заявку 64609003.
SLS 18:03:50.8212136 Стратегия остановлена.
BS 18:03:50.8322143 Стратегия останавливается.
TPS 18:03:50.8322143 Стратегия останавливается.
TPS 18:03:51.8482724 System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
в Ecng.Trading.Algo.Strategies.QuotingStrategy.OnProcess()
в Ecng.Trading.Algo.Strategies.Strategy.#=qMXFDCdP09AuZO4H5hcFEAQ==()
TPS 18:03:52.8603303 System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
в Ecng.Trading.Algo.Strategies.QuotingStrategy.OnProcess()
в Ecng.Trading.Algo.Strategies.Strategy.#=qMXFDCdP09AuZO4H5hcFEAQ==()
TPS 18:03:53.8723882 System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
в Ecng.Trading.Algo.Strategies.QuotingStrategy.OnProcess()
в Ecng.Trading.Algo.Strategies.Strategy.#=qMXFDCdP09AuZO4H5hcFEAQ==()
TPS 18:03:54.8894463 System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
в Ecng.Trading.Algo.Strategies.QuotingStrategy.OnProcess()
в Ecng.Trading.Algo.Strategies.Strategy.#=qMXFDCdP09AuZO4H5hcFEAQ==()
TPS 18:03:55.9415065 System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
в Ecng.Trading.Algo.Strategies.QuotingStrategy.OnProcess()
в Ecng.Trading.Algo.Strategies.Strategy.#=qMXFDCdP09AuZO4H5hcFEAQ==()
и так далее ....
Причём точно такая же ошибка возникает, если делать как в другом примере
private void OnMewMyTrades(IEnumerable<MyTrade> trades)
{
return;
// фильтруем сделки, чтобы найти те, которые произошли для заявки TargetOrder
trades = trades.Where(t => t.Order == this.TargetOrder);
// сама пакетная стратегия так же является параллельной, чтобы она не блокирована основной код робота
var batch = new BatchStrategy(BatchFinishModes.All) { IsParallel = true };
// для каждой сделки добавляем для защиты по пакетной стратегии
batch.ChildStrategies.AddRange(trades.Select(t =>
{
var s = new BatchStrategy(BatchFinishModes.First) { IsParallel = true };
var takeProfit = new TakeProfitStrategy(t, 4.Points(Security));
var stopLoss = new StopLossStrategy(t, 4.Points(Security));
// делаем стратегии параллельными, чтобы они не блокировали работу контролирующей BatchStrategy
takeProfit.IsParallel = stopLoss.IsParallel = true;
s.ChildStrategies.Add(takeProfit);
s.ChildStrategies.Add(stopLoss);
return s;
}).Cast<Strategy>());
if (batch.ChildStrategies.Count > 0)
{
base.ChildStrategies.Add(batch);
}
После срабатывания одной из стратегий либо SL либо TP другая стратегия во время остановки начинает давать этот NullReferenceException
Спасибо и с уважением!
Update
Да, версия 2.6.1