﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/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-06-16T02:21:32Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=2621" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/18454/</id>
    <title type="text">OvcharenkoVI: ra81: Alexander Mukhanchikov: Перечитал 3 раза, если честно, то не понял. Приложите чт...</title>
    <published>2012-04-20T09:25:27Z</published>
    <updated>2012-04-20T09:25:27Z</updated>
    <author>
      <name>ra81</name>
      <uri>https://stocksharp.ru/users/16581/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(18453)" rel="nofollow" target="_blank"&gt;OvcharenkoVI&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(18452)" rel="nofollow" target="_blank"&gt;ra81&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(18450)" rel="nofollow" target="_blank"&gt;Alexander Mukhanchikov&lt;/a&gt;:&lt;/strong&gt;
Перечитал 3 раза, если честно, то не понял.
Приложите что ли лог того что на ваш взгляд работает не так и попробуйте другими словами объяснить :)
В методе OnStopping я создаю любую стратегию и добавляю ее как дочернюю. Метод OnStopping вызывается когда стратегия начинает останавливаться и при вызове метода стратегия уже имеет ProcessState == Stopping. Когда дочерняя стратегия добавляется в родительскую, ей походу статус передается от родительской. То есть нашей дочерней будет поставлен ProcessState == Stopping, и начнется выполняться метод OnStopping у нашей дочерней стратегии. А если стратегия которую мы делали дочерней тупо сейчас стоит, нафиг ее переводить в состояние  ProcessState == Stopping???&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ну то что при остановке базовой стратегии останавливаются все дочерние - так и должно быть, разве нет?
Суть вопроса не в этом, а в том что если стратегия уже стояла, нафиг она еще раз останавливается? :)&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/18453/</id>
    <title type="text">ra81: Alexander Mukhanchikov: Перечитал 3 раза, если честно, то не понял. Приложите что ли лог того ...</title>
    <published>2012-04-20T09:21:33Z</published>
    <updated>2012-04-20T09:21:33Z</updated>
    <author>
      <name>OvcharenkoVI</name>
      <uri>https://stocksharp.ru/users/390/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(18452)" rel="nofollow" target="_blank"&gt;ra81&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(18450)" rel="nofollow" target="_blank"&gt;Alexander Mukhanchikov&lt;/a&gt;:&lt;/strong&gt;
Перечитал 3 раза, если честно, то не понял.
Приложите что ли лог того что на ваш взгляд работает не так и попробуйте другими словами объяснить :)
В методе OnStopping я создаю любую стратегию и добавляю ее как дочернюю. Метод OnStopping вызывается когда стратегия начинает останавливаться и при вызове метода стратегия уже имеет ProcessState == Stopping. Когда дочерняя стратегия добавляется в родительскую, ей походу статус передается от родительской. То есть нашей дочерней будет поставлен ProcessState == Stopping, и начнется выполняться метод OnStopping у нашей дочерней стратегии. А если стратегия которую мы делали дочерней тупо сейчас стоит, нафиг ее переводить в состояние  ProcessState == Stopping???&lt;/p&gt;
&lt;/blockquote&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.ru/posts/m/18452/</id>
    <title type="text">Alexander Mukhanchikov: Перечитал 3 раза, если честно, то не понял. Приложите что ли лог того что на...</title>
    <published>2012-04-20T09:08:37Z</published>
    <updated>2012-04-20T09:08:37Z</updated>
    <author>
      <name>ra81</name>
      <uri>https://stocksharp.ru/users/16581/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(18450)" rel="nofollow" target="_blank"&gt;Alexander Mukhanchikov&lt;/a&gt;:&lt;/strong&gt;
Перечитал 3 раза, если честно, то не понял.
Приложите что ли лог того что на ваш взгляд работает не так и попробуйте другими словами объяснить :)
В методе OnStopping я создаю любую стратегию и добавляю ее как дочернюю. Метод OnStopping вызывается когда стратегия начинает останавливаться и при вызове метода стратегия уже имеет ProcessState == Stopping. Когда дочерняя стратегия добавляется в родительскую, ей походу статус передается от родительской. То есть нашей дочерней будет поставлен ProcessState == Stopping, и начнется выполняться метод OnStopping у нашей дочерней стратегии. А если стратегия которую мы делали дочерней тупо сейчас стоит, нафиг ее переводить в состояние  ProcessState == Stopping???&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/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.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Перечитал 3 раза, если честно, то не понял.
Приложите что ли лог того что на ваш взгляд работает не так и попробуйте другими словами объяснить :)&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/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.ru/users/16581/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Все относится к релизу 4.0.22, вполне вероятно что и дальше тоже.&lt;/p&gt;
&lt;p&gt;Путем изысканий пришел к выводу такому:&lt;/p&gt;
&lt;p&gt;У меня есть стратегия, которая перед тем как совсем остановиться, пытается отменить все свои ордера активные. Проверка происходит в методе&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-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;/code&gt;&lt;/pre&gt;
&lt;p&gt;GuarantyCancelOrders использует стратегию для отмены ордеров. По факту при выполнении сего метода в нашу стратегию подключается дочерняя стартегия, которая отменяет ордера достаточно надежно. Что именно происходит НЕ так? Вот пример другого кода, только уже в методе OnStopping&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-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;/code&gt;&lt;/pre&gt;
&lt;p&gt;Этот код приведет к тому что для дочерних стратегий из метода GuarantyCancelOrders будет вызван только метод OnStopping без вызова метода OnStarting. Ну а если вы при запуске делаете инициализацию чего либо, то легко можете получить исключение если работаете с этими объектами в завершающих методах. Это связано я полагаю с тем что в дочернюю стратегию передается статус родительской. А в родительской будет Stopping. Отсюда стартовый метод не выполняется, НО вот завершающий метод почему-то выполняется. Что мне кажется не совсем правильно. Если стратегия собственно еще и не была запущена, то с какого лешего выполнять метод OnStopping??? Ну вот как-то так :). По идее если стратегия добавляемая как дочерняя в статусе Stopped, то статус может измениться только на Starting или в этом духе. Есь даж паттерн такой :).&lt;/p&gt;
&lt;p&gt;Надеюсь понятно изложил. А то кажется слегка запутанно.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>