﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Правила на новый трейд у Conditional ордера</title>
  <id>~/topic/16026/pravila-na-novyi-treid-u-conditional-ordera/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-20T10:25:44Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=16026" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/56676/</id>
    <title type="text">И еще вопрос: В режиме бэктеста нужно использовать именно EmulationOrderCondition? Я не увидел никак...</title>
    <published>2021-08-30T11:33:38Z</published>
    <updated>2021-08-30T11:33:38Z</updated>
    <author>
      <name>SelfDeleted</name>
      <uri>https://stocksharp.com/users/153838/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;И еще вопрос:
В режиме бэктеста нужно использовать именно EmulationOrderCondition? Я не увидел никаких использований этого класса в коде, связанным с бэктестом. Также я не нашел никакого кода, связанного с обработкой класса OrderCondition, от котогоро наследуется EmulationOrderCondition.
Условные ордера вообще работают в режиме бэктеста?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/56675/</id>
    <title type="text">Юрий Басангов: Добрый день, в целом да, у ConditionalOrder нельзя посчитать реализованный объем, т.к...</title>
    <published>2021-08-30T11:19:15Z</published>
    <updated>2021-08-30T11:19:15Z</updated>
    <author>
      <name>SelfDeleted</name>
      <uri>https://stocksharp.com/users/153838/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(56616)" rel="nofollow" target="_blank"&gt;Юрий Басангов&lt;/a&gt;:&lt;/strong&gt;
Добрый день, в целом да, у ConditionalOrder нельзя посчитать реализованный объем, т.к. ConditionalOrder не имеет связанных сделок.
Здесь заложена следующая логика, сначала ConditionalOrder просто висит в системе, потом когда наступают условия для его исполнения ConditionalOrder превращается в просто Order, который и инициирует сделку.
Вам нужно отлавливать Order и уже у него считать исполненный объем.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Еще нашел в документации следующую информацию про Conditional ордера.
&lt;em&gt;В дальнейшем, если требуется работа с заявкой (например, отменить ее или изменить), &amp;lt;u&amp;gt;то необходимо использовать именно этот объект Order.&amp;lt;/u&amp;gt;&lt;/em&gt;
&lt;a href="https://doc.stocksharp.ru/html/2587051d-1e94-4fb2-b5c1-d57cb5af1b6d.htm"&gt;https://doc.stocksharp.ru/html/2587051d-1e94-4fb2-b5c1-d57cb5af1b6d.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Разве из этого не следует, что я могу подписываться на события изначальной заявки (когда она еще Conditional и просто висит в системе)?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/56618/</id>
    <title type="text">Юрий Басангов: Добрый день, в целом да, у ConditionalOrder нельзя посчитать реализованный объем, т.к...</title>
    <published>2021-08-23T14:26:09Z</published>
    <updated>2021-08-23T14:26:09Z</updated>
    <author>
      <name>SelfDeleted</name>
      <uri>https://stocksharp.com/users/153838/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(56616)" rel="nofollow" target="_blank"&gt;Юрий Басангов&lt;/a&gt;:&lt;/strong&gt;
Добрый день, в целом да, у ConditionalOrder нельзя посчитать реализованный объем, т.к. ConditionalOrder не имеет связанных сделок.
Здесь заложена следующая логика, сначала ConditionalOrder просто висит в системе, потом когда наступают условия для его исполнения ConditionalOrder превращается в просто Order, который и инициирует сделку.
Вам нужно отлавливать Order и уже у него считать исполненный объем.
Спасибо за объяснение. Как тогда правильно отлавливать момент, когда ConditionalOrder превращается в просто Order? Нашел событие OrderChanged, но не уверен что оно подходит. Мне важно отловить MyTrade для данного ордера, т.к. у меня на это завязана дальнейшая логика&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/56616/</id>
    <title type="text">Добрый день, в целом да, у ConditionalOrder нельзя посчитать реализованный объем, т.к. ConditionalOr...</title>
    <published>2021-08-23T14:15:59Z</published>
    <updated>2021-08-23T14:15:59Z</updated>
    <author>
      <name>William B</name>
      <uri>https://stocksharp.com/users/7/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день, в целом да, у ConditionalOrder нельзя посчитать реализованный объем, т.к. ConditionalOrder не имеет связанных сделок.
Здесь заложена следующая логика, сначала ConditionalOrder просто висит в системе, потом когда наступают условия для его исполнения ConditionalOrder превращается в просто Order, который и инициирует сделку.
Вам нужно отлавливать Order и уже у него считать исполненный объем.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/56608/</id>
    <title type="text">Добрый день! Запускаю S# в режиме тестирования на истории. Создаю TakeProfit/StopLoss Conditional Or...</title>
    <published>2021-08-20T11:07:36Z</published>
    <updated>2021-08-20T12:02:29Z</updated>
    <author>
      <name>SelfDeleted</name>
      <uri>https://stocksharp.com/users/153838/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день!
Запускаю S# в режиме тестирования на истории.
Создаю TakeProfit/StopLoss Conditional Order  и подписываюсь на событие нового трейда. В момент исполнения правила возникает ошибка внутри S#:
в методе TraderHelper.GetMatchedVolume вылетает ArgumentException(&amp;quot;order&amp;quot;).&lt;/p&gt;
&lt;p&gt;в коде этого метода написан такой код:
&lt;a href="https://github.com/StockSharp/StockSharp/blob/master/Algo/TraderHelper.cs#L913" target="_blank"&gt;https://github.com/StockSharp/StockSharp/blob/master/Algo/TraderHelper.cs#L913&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
if (order.Type == OrderTypes.Conditional)
	throw new ArgumentException(nameof(order));

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Почему нельзя у ConditionalOrder посчитать реализованный объем?&lt;/p&gt;
&lt;p&gt;Судя по стектрейсу ошибки метод GetMatchedVolume вызывается при получении значения свойства AllTradesReceived в классе NewTradeOrderRule.
Это намекает на то, что TakeProfit/StopLoss ордера не могут частично исполняться. Разве это верно?&lt;/p&gt;
&lt;p&gt;Также, можно заметить закомментированный код с проверкой на ConditionalOrder  в методе OnNewMyTrade в классе NewTradeOrderRule
&lt;a href="https://github.com/StockSharp/StockSharp/blob/master/Algo/MarketRuleHelper_Order.cs#L241" target="_blank"&gt;https://github.com/StockSharp/StockSharp/blob/master/Algo/MarketRuleHelper_Order.cs#L241&lt;/a&gt;
Может эту проверку забыли закомментировать в GetMatchedVolume?&lt;/p&gt;
&lt;p&gt;Полезная инфа:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Создание TakeProfit оредра для бэкстета:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;
//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 =&amp;gt; /*&amp;lt;code&amp;gt;*/).Apply(this);
RegisterOrder(takeProfitOrder);

&lt;/code&gt;&lt;/pre&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Стектрейс&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;
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)


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Может я что-то не так делаю? Подскажите как исправить эту ошибку?&lt;/p&gt;
&lt;p&gt;Upd:
при использовании события order.WhenAllTrades таже самая ошибка&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>