﻿<?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">Баг в классе Strategy</title>
  <id>~/topic/2621/bag-v-klasse-strategy/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-05T21:04:50Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=2621" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/18454/</id>
    <title type="text">Перечитал 3 раза, если честно, то не понял. Приложите что ли лог того что на ваш взгляд работает не ...</title>
    <published>2012-04-20T09:25:27Z</published>
    <updated>2012-04-20T09:25:27Z</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;OvcharenkoVI &lt;a href="https://stocksharp.com/posts/m/18453/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;ra81 &lt;a href="https://stocksharp.com/posts/m/18452/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Alexander Mukhanchikov &lt;a href="https://stocksharp.com/posts/m/18450/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Перечитал 3 раза, если честно, то не понял.&lt;br /&gt;Приложите что ли лог того что на ваш взгляд работает не так и попробуйте другими словами объяснить :)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;В методе OnStopping я создаю любую стратегию и добавляю ее как дочернюю. Метод OnStopping вызывается когда стратегия начинает останавливаться и при вызове метода стратегия уже имеет ProcessState == Stopping. Когда дочерняя стратегия добавляется в родительскую, ей походу статус передается от родительской. То есть нашей дочерней будет поставлен ProcessState == Stopping, и начнется выполняться метод OnStopping у нашей дочерней стратегии. А если стратегия которую мы делали дочерней тупо сейчас стоит, нафиг ее переводить в состояние  ProcessState == Stopping???&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ну то что при остановке базовой стратегии останавливаются все дочерние - так и должно быть, разве нет?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Суть вопроса не в этом, а в том что если стратегия уже стояла, нафиг она еще раз останавливается? :)</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/18453/</id>
    <title type="text">Перечитал 3 раза, если честно, то не понял. Приложите что ли лог того что на ваш взгляд работает не ...</title>
    <published>2012-04-20T09:21:33Z</published>
    <updated>2012-04-20T09:21:33Z</updated>
    <author>
      <name>OvcharenkoVI</name>
      <uri>https://stocksharp.com/users/390/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;ra81 &lt;a href="https://stocksharp.com/posts/m/18452/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Alexander Mukhanchikov &lt;a href="https://stocksharp.com/posts/m/18450/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Перечитал 3 раза, если честно, то не понял.&lt;br /&gt;Приложите что ли лог того что на ваш взгляд работает не так и попробуйте другими словами объяснить :)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;В методе OnStopping я создаю любую стратегию и добавляю ее как дочернюю. Метод OnStopping вызывается когда стратегия начинает останавливаться и при вызове метода стратегия уже имеет ProcessState == Stopping. Когда дочерняя стратегия добавляется в родительскую, ей походу статус передается от родительской. То есть нашей дочерней будет поставлен ProcessState == Stopping, и начнется выполняться метод OnStopping у нашей дочерней стратегии. А если стратегия которую мы делали дочерней тупо сейчас стоит, нафиг ее переводить в состояние  ProcessState == Stopping???&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/18452/</id>
    <title type="text">Перечитал 3 раза, если честно, то не понял. Приложите что ли лог того что на ваш взгляд работает не ...</title>
    <published>2012-04-20T09:08:37Z</published>
    <updated>2012-04-20T09:08:37Z</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/18450/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Перечитал 3 раза, если честно, то не понял.&lt;br /&gt;Приложите что ли лог того что на ваш взгляд работает не так и попробуйте другими словами объяснить :)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;В методе OnStopping я создаю любую стратегию и добавляю ее как дочернюю. Метод OnStopping вызывается когда стратегия начинает останавливаться и при вызове метода стратегия уже имеет ProcessState == Stopping. Когда дочерняя стратегия добавляется в родительскую, ей походу статус передается от родительской. То есть нашей дочерней будет поставлен ProcessState == Stopping, и начнется выполняться метод OnStopping у нашей дочерней стратегии. А если стратегия которую мы делали дочерней тупо сейчас стоит, нафиг ее переводить в состояние  ProcessState == Stopping???</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/18450/</id>
    <title type="text">Перечитал 3 раза, если честно, то не понял. Приложите что ли лог того что на ваш взгляд работает не ...</title>
    <published>2012-04-20T08:47:46Z</published>
    <updated>2012-04-20T08:47:46Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.com/users/2826/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Перечитал 3 раза, если честно, то не понял.&lt;br /&gt;Приложите что ли лог того что на ваш взгляд работает не так и попробуйте другими словами объяснить :)</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/18444/</id>
    <title type="text">Все относится к релизу 4.0.22, вполне вероятно что и дальше тоже. Путем изысканий пришел к выводу та...</title>
    <published>2012-04-20T08:24:13Z</published>
    <updated>2012-04-20T08:24:13Z</updated>
    <author>
      <name>ra81</name>
      <uri>https://stocksharp.com/users/16581/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Все относится к релизу 4.0.22, вполне вероятно что и дальше тоже.&lt;br /&gt;&lt;br /&gt;Путем изысканий пришел к выводу такому:&lt;br /&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;

        public override void Stop()
        {
            if (this.HaveActiveStopOrders())
            {
                this.AddInfoLog(&amp;quot;Стратегия имеет активные ордера, пробуем отменить их.&amp;quot;);
                this.GuarantyCancelOrders(new [] {_stopOrder});

                this
                    .When(_stopOrder.Canceled())
                    .Do(o =&amp;gt;
                            {
                                this.AddInfoLog(&amp;quot;Активные ордера отменены, останавливаем стратегию.&amp;quot;);
                                Stop();
                            });

                return;
            }
            
            base.Stop();
        }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;GuarantyCancelOrders использует стратегию для отмены ордеров. По факту при выполнении сего метода в нашу стратегию подключается дочерняя стартегия, которая отменяет ордера достаточно надежно. Что именно происходит НЕ так? Вот пример другого кода, только уже в методе OnStopping&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;

        public override void OnStopping()
        {
            if (this.HaveActiveStopOrders())
            {
                this.AddInfoLog(&amp;quot;Стратегия имеет активные ордера, пробуем отменить их.&amp;quot;);
                this.GuarantyCancelOrders(new [] {_stopOrder});

                this
                    .When(_stopOrder.Canceled())
                    .Do(o =&amp;gt;
                            {
                                this.AddInfoLog(&amp;quot;Активные ордера отменены, останавливаем стратегию.&amp;quot;);
                                Stop();
                            });

                return;
            }
            
            base.OnStopping();
        }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Этот код приведет к тому что для дочерних стратегий из метода GuarantyCancelOrders будет вызван только метод OnStopping без вызова метода OnStarting. Ну а если вы при запуске делаете инициализацию чего либо, то легко можете получить исключение если работаете с этими объектами в завершающих методах. Это связано я полагаю с тем что в дочернюю стратегию передается статус родительской. А в родительской будет Stopping. Отсюда стартовый метод не выполняется, НО вот завершающий метод почему-то выполняется. Что мне кажется не совсем правильно. Если стратегия собственно еще и не была запущена, то с какого лешего выполнять метод OnStopping??? Ну вот как-то так :). По идее если стратегия добавляемая как дочерняя в статусе Stopped, то статус может измениться только на Starting или в этом духе. Есь даж паттерн такой :).&lt;br /&gt;&lt;br /&gt;Надеюсь понятно изложил. А то кажется слегка запутанно.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>