﻿<?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-04-27T02:54:23Z</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">У вас в коде бред написан. В 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;div class="quote"&gt;&lt;span class="quotetitle"&gt;Alexander Mukhanchikov &lt;a href="https://stocksharp.com/posts/m/20556/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;У вас в коде бред написан.&lt;br /&gt;В Do вы пытаетесь удалить из Rules.&lt;br /&gt;Этого делать нельзя, что и приводит к исключению.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&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">Ну вот, другое дело. :) Спасибо большое за конструктивный ответ!</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;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;Дайте тогда может пример какой поглядеть.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Скопировано из справки.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Использование правил&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Show spoiler' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_a43b4af6c1b949ec81da22f0e982ca87');" title='Show spoiler' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_a43b4af6c1b949ec81da22f0e982ca87' style='display:none'&gt;&lt;br /&gt;У &lt;b&gt;IMarketRule &lt;/b&gt;есть Token - токен правила, с которым он ассоциирован. Например, для правила &lt;b&gt;WhenCanceled &lt;/b&gt;токеном будет являться заявка.&lt;br /&gt;Когда сработало правило успешной отмены заявки, то лучше удалить все остальные правила, связанные с этой заявкой:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush: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;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Взаимоисключающие правила&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Show spoiler' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_8140a36d39774bb9a89f311fbfb1e4a0');" title='Show spoiler' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_8140a36d39774bb9a89f311fbfb1e4a0' style='display:none'&gt;&lt;br /&gt;Взаимоисключающие правила, это правила которые удаляются по активации одного из этих правил. Для этого вызвается метод &lt;b&gt;MarketRuleHelper.Exclusive&lt;/b&gt; в который передается правило, которое будет удалено при активации данного правила.&lt;br /&gt;Например регистрируется два правила, на успешную и неуспешную регистрацию заявки, одно из них нужно удалить в случае активации другого:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush: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;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Также взаимоисключающие правила можно создать через добавление в &lt;b&gt;ExclusiveRules&lt;/b&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush: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;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&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">В версии 4.1.2 оно еще работало.</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">Дайте тогда может пример какой поглядеть. И какая разница откуда их удалять? И собственно откуда их удалять можно?</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">Да, но раньше работало. А как тогда удалять правила, которые уже не нужны. Я по приходу события о полном исполнении ордеров удаляю ненужные правила - соответственно canceled и failed. Иначе они ведь будут болтаться. Дай</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;br /&gt;В Do вы пытаетесь удалить из Rules.&lt;br /&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">Скорее всего при событии WhenMatched&lt;br /&gt;эти правила (2 первых) удаляются автоматически.</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">s# v.4.1.3</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 .WhenRegiste...</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;br /&gt;&lt;br /&gt;order&lt;br /&gt;    .WhenCanceled()&lt;br /&gt;    .Do(o =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;      ...&lt;br /&gt;    })&lt;br /&gt;    .Once()&lt;br /&gt;    .Apply(this);&lt;br /&gt;&lt;br /&gt;order&lt;br /&gt;    .WhenRegisterFailed()&lt;br /&gt;    .Do(fail =&amp;gt;&lt;br /&gt;    {&lt;br /&gt;      ...&lt;br /&gt;    })&lt;br /&gt;    .Once()&lt;br /&gt;    .Apply(this);&lt;br /&gt;&lt;br /&gt;order&lt;br /&gt;    .WhenMatched()&lt;br /&gt;    .Do(o =&amp;gt; {&lt;br /&gt;                 Rules.Remove(order.WhenRegisterFailed()); Тут выдается исключение&lt;br /&gt;                 Rules.Remove(order.WhenCanceled());&lt;br /&gt;             })&lt;br /&gt;    .Once()&lt;br /&gt;    .Apply(this);&lt;br /&gt;&lt;br /&gt;Выдается исключение при попытке удалить правило (на самом деле любых правил) Rules.Remove(order.WhenRegisterFailed()):&lt;br /&gt;&lt;br /&gt;System.InvalidOperationException: Операция является недопустимой из-за текущего состояния объекта.&lt;br /&gt;   в #=qa_4zGoLcsro_feFbb0XM96ZE7LOy5hveNYH9wnxFE2w=.OnRemoving(IMarketRule #=qju3lJ7K286dxREWSpw8cmg==)&lt;br /&gt;   в Ecng.Collections.BaseCollection`2.Remove(TItem item)&lt;br /&gt;   в Ecng.Collections.SynchronizedCollection`2.Remove(TItem item)&lt;br /&gt;   в StockSharp.Algo.Strategies.DeltaHedgeStrategy.&amp;lt;&amp;gt;c__DisplayClassc.&amp;lt;ReHedge&amp;gt;b__8(Order o) в D:\work\PROG\Projects\StockSharp 4.1.3\Strategies\VolatilityTradingStrategy\DeltaHedgeStrategy.cs:строка 202&lt;br /&gt;   в StockSharp.Algo.MarketRule`2.#=q6_Dj$NpGFM71HHUqmQhQ0G5RZlYBsJ6Wee9kQg_qgVo=()&lt;br /&gt;   в StockSharp.Algo.MarketRuleHelper.#=qw7TgNQ_P_7uPcYTNTLttHg==(IMarketRuleContainer #=qTNAYzkNQSqZjn9BvAkH9cA==, IMarketRule #=quLfxru5uzbPCCVRiCLmC0g==, Func`1 #=q8YGWbkMa6AIbIV3KFFO5Xw==)&lt;br /&gt;   в StockSharp.Algo.Strategies.Strategy.#=q47pcTs$vhqCk7bcqb_pv_886glmmzTC1_raPs3xepsw5km_KDfufw3zJMTnb0$eVObikcyITlFlAUYx_AKAK_A==(IMarketRule #=qTJ4HwZuqQOv0fT2qFqxPLg==, Func`1 #=q8pW741NtpT_BaJV1HedsHw==)&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>