﻿<?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">Удаление правил, исключение</title>
  <id>~/topic/2896/udalenie-pravil-isklyuchenie/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-11T00:46:29Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=2896" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/20605/</id>
    <title type="text">Alexander Mukhanchikov: У вас в коде бред написан. В Do вы пытаетесь удалить из Rules. Этого делать ...</title>
    <published>2012-08-01T12:24:00Z</published>
    <updated>2012-08-01T12:24:00Z</updated>
    <author>
      <name>ra81</name>
      <uri>https://stocksharp.com/users/16581/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(20556)" rel="nofollow" target="_blank"&gt;Alexander Mukhanchikov&lt;/a&gt;:&lt;/strong&gt;
У вас в коде бред написан.
В Do вы пытаетесь удалить из Rules.
Этого делать нельзя, что и приводит к исключению.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Раньше так работало однозначно я даже тесты делал подобного рода специально :).&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20590/</id>
    <title type="text">Ну вот, другое дело. :) Спасибо большое за конструктивный ответ! </title>
    <published>2012-07-30T06:58:07Z</published>
    <updated>2012-07-30T06:58:07Z</updated>
    <author>
      <name>Дюшес</name>
      <uri>https://stocksharp.com/users/6407/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Ну вот, другое дело. :) Спасибо большое за конструктивный ответ!&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20563/</id>
    <title type="text">Дайте тогда может пример какой поглядеть. Скопировано из справки. Использование правил У IMarketRule...</title>
    <published>2012-07-26T12:48:40Z</published>
    <updated>2012-07-26T12:48:40Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.com/users/5973/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Дайте тогда может пример какой поглядеть.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Скопировано из справки.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Использование правил&lt;/p&gt;
&lt;div class="spoiler"&gt;&lt;p&gt;У &lt;strong&gt;IMarketRule&lt;/strong&gt;есть Token - токен правила, с которым он ассоциирован. Например, для правила &lt;strong&gt;WhenCanceled&lt;/strong&gt;токеном будет являться заявка.
Когда сработало правило успешной отмены заявки, то лучше удалить все остальные правила, связанные с этой заявкой:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
var order = this.CreateOrder(direction, (decimal) Security.GetCurrentPrice(direction), Volume);

var ruleCanceled = order.WhenCanceled();

ruleCanceled
    .Do(() =&amp;gt; 
            {
                this.AddInfoLog(&amp;quot;Заявка успешно отменена&amp;quot;);

                // удаление всех правил связанных с order
                Rules.RemoveRulesByToken(ruleCanceled, ruleCanceled.Token);
            })
    .Once()
    .Apply(this);

order
    .WhenRegistered()
    .Do(() =&amp;gt; this.AddInfoLog(&amp;quot;Заявка успешно зарегестрирована&amp;quot;))
    .Once()
    .Apply(this)

order
    .WhenRegisterFailed()
    .Do(() =&amp;gt; this.AddInfoLog(&amp;quot;Заявка не принята биржей&amp;quot;))
    .Once()
    .Apply(this)

order
    .WhenMatched()
    .Do(() =&amp;gt; this.AddInfoLog(&amp;quot;Заявка полностью исполнена&amp;quot;))
    .Once()
    .Apply(this);    

// регистрирация заявки
RegisterOrder(order);

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Взаимоисключающие правила&lt;/p&gt;
&lt;div class="spoiler"&gt;&lt;p&gt;Взаимоисключающие правила, это правила которые удаляются по активации одного из этих правил. Для этого вызвается метод &lt;strong&gt;MarketRuleHelper.Exclusive&lt;/strong&gt; в который передается правило, которое будет удалено при активации данного правила.
Например регистрируется два правила, на успешную и неуспешную регистрацию заявки, одно из них нужно удалить в случае активации другого:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
var order = this.CreateOrder(direction, (decimal) Security.GetCurrentPrice(direction), Volume);

var ruleReg = order.WhenRegistered();
var ruleRegFailed = order.WhenRegisterFailed();

ruleReg
    .Do(() =&amp;gt; this.AddInfoLog(&amp;quot;Заявка успешно зарегестрирована&amp;quot;))
    .Once()
    .Apply(this)
    .Exclusive(ruleRegFailed);

ruleRegFailed
    .Do(() =&amp;gt; this.AddInfoLog(&amp;quot;Заявка не принята биржей&amp;quot;))
    .Once()
    .Apply(this)
    .Exclusive(ruleReg);

// регистрирация заявки
RegisterOrder(order);

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Также взаимоисключающие правила можно создать через добавление в &lt;strong&gt;ExclusiveRules&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
var order = this.CreateOrder(direction, (decimal) Security.GetCurrentPrice(direction), Volume);

var ruleReg = order.WhenRegistered();
var ruleRegFailed = order.WhenRegisterFailed();

ruleReg.ExclusiveRules.Add(ruleRegFailed);
ruleRegFailed.ExclusiveRules.Add(ruleReg);

ruleReg
    .Do(() =&amp;gt; this.AddInfoLog(&amp;quot;Заявка успешно зарегестрирована&amp;quot;))
    .Once()
    .Apply(this);

ruleRegFailed
    .Do(() =&amp;gt; this.AddInfoLog(&amp;quot;Заявка не принята биржей&amp;quot;))
    .Once()
    .Apply(this);

// регистрирация заявки
RegisterOrder(order);

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20562/</id>
    <title type="text">В версии 4.1.2 оно еще работало. </title>
    <published>2012-07-26T12:22:58Z</published>
    <updated>2012-07-26T12:22:58Z</updated>
    <author>
      <name>Дюшес</name>
      <uri>https://stocksharp.com/users/6407/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;В версии 4.1.2 оно еще работало.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20561/</id>
    <title type="text">Дайте тогда может пример какой поглядеть. И какая разница откуда их удалять? И собственно откуда их ...</title>
    <published>2012-07-26T12:21:33Z</published>
    <updated>2012-07-26T12:21:33Z</updated>
    <author>
      <name>Дюшес</name>
      <uri>https://stocksharp.com/users/6407/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Дайте тогда может пример какой поглядеть. И какая разница откуда их удалять? И собственно откуда их удалять можно?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20560/</id>
    <title type="text">Да, но раньше работало. А как тогда удалять правила, которые уже не нужны. Я по приходу события о по...</title>
    <published>2012-07-26T12:19:14Z</published>
    <updated>2012-07-26T12:19:14Z</updated>
    <author>
      <name>Дюшес</name>
      <uri>https://stocksharp.com/users/6407/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Да, но раньше работало. А как тогда удалять правила, которые уже не нужны. Я по приходу события о полном исполнении ордеров удаляю ненужные правила - соответственно canceled и failed. Иначе они ведь будут болтаться. Дай&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20556/</id>
    <title type="text">У вас в коде бред написан. В Do вы пытаетесь удалить из Rules. Этого делать нельзя, что и приводит к...</title>
    <published>2012-07-26T11:03:15Z</published>
    <updated>2012-07-26T11:03:15Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.com/users/2826/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;У вас в коде бред написан.
В Do вы пытаетесь удалить из Rules.
Этого делать нельзя, что и приводит к исключению.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20549/</id>
    <title type="text">Скорее всего при событии WhenMatched эти правила (2 первых) удаляются автоматически. </title>
    <published>2012-07-26T08:21:51Z</published>
    <updated>2012-07-26T08:21:51Z</updated>
    <author>
      <name>Pantov</name>
      <uri>https://stocksharp.com/users/98/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Скорее всего при событии WhenMatched
эти правила (2 первых) удаляются автоматически.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20548/</id>
    <title type="text">s# v.4.1.3 </title>
    <published>2012-07-26T07:46:46Z</published>
    <updated>2012-07-26T07:46:46Z</updated>
    <author>
      <name>Дюшес</name>
      <uri>https://stocksharp.com/users/6407/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;s# v.4.1.3&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/20547/</id>
    <title type="text">Есть следующий код: order .WhenCanceled() .Do(o =&amp;gt; ) .Once() .Apply(this); order .WhenRegisterFailed...</title>
    <published>2012-07-26T07:45:22Z</published>
    <updated>2012-07-26T07:45:22Z</updated>
    <author>
      <name>Дюшес</name>
      <uri>https://stocksharp.com/users/6407/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Есть следующий код:&lt;/p&gt;
&lt;p&gt;order
.WhenCanceled()
.Do(o =&amp;gt;
)
.Once()
.Apply(this);&lt;/p&gt;
&lt;p&gt;order
.WhenRegisterFailed()
.Do(fail =&amp;gt;
)
.Once()
.Apply(this);&lt;/p&gt;
&lt;p&gt;order
.WhenMatched()
.Do(o =&amp;gt; {
Rules.Remove(order.WhenRegisterFailed()); Тут выдается исключение
Rules.Remove(order.WhenCanceled());
})
.Once()
.Apply(this);&lt;/p&gt;
&lt;p&gt;Выдается исключение при попытке удалить правило (на самом деле любых правил) Rules.Remove(order.WhenRegisterFailed()):&lt;/p&gt;
&lt;p&gt;System.InvalidOperationException: Операция является недопустимой из-за текущего состояния объекта.
в #=qa_4zGoLcsro_feFbb0XM96ZE7LOy5hveNYH9wnxFE2w=.OnRemoving(IMarketRule #=qju3lJ7K286dxREWSpw8cmg==)
в Ecng.Collections.BaseCollection&lt;code&gt;2.Remove(TItem item) в Ecng.Collections.SynchronizedCollection&lt;/code&gt;2.Remove(TItem item)
в StockSharp.Algo.Strategies.DeltaHedgeStrategy.&amp;lt;&amp;gt;c__DisplayClassc.&lt;ReHedge&gt;b__8(Order o) в D:\work\PROG\Projects\StockSharp 4.1.3\Strategies\VolatilityTradingStrategy\DeltaHedgeStrategy.cs:строка 202
в StockSharp.Algo.MarketRule&lt;code&gt;2.#=q6_Dj$NpGFM71HHUqmQhQ0G5RZlYBsJ6Wee9kQg_qgVo=() в StockSharp.Algo.MarketRuleHelper.#=qw7TgNQ_P_7uPcYTNTLttHg==(IMarketRuleContainer #=qTNAYzkNQSqZjn9BvAkH9cA==, IMarketRule #=quLfxru5uzbPCCVRiCLmC0g==, Func&lt;/code&gt;1 #=q8YGWbkMa6AIbIV3KFFO5Xw==)
в StockSharp.Algo.Strategies.Strategy.#=q47pcTs$vhqCk7bcqb_pv_886glmmzTC1_raPs3xepsw5km_KDfufw3zJMTnb0$eVObikcyITlFlAUYx_AKAK_A==(IMarketRule #=qTJ4HwZuqQOv0fT2qFqxPLg==, Func`1 #=q8pW741NtpT_BaJV1HedsHw==)&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>