﻿<?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">Остановка стратегии</title>
  <id>~/topic/1244/ostanovka-strategii/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-08T05:11:47Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=1244" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/4724/</id>
    <title type="text">Превеликое спасибо))) Вот я и получил свою порцию знаний) </title>
    <published>2010-11-22T16:39:12Z</published>
    <updated>2010-11-22T16:39:12Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</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.ru/posts/m/4722/</id>
    <title type="text">Serg: Вроде бы все просто. Стратегия должна выполнять OnProcess раз в 100мс, в логгере я должен увид...</title>
    <published>2010-11-22T16:30:21Z</published>
    <updated>2010-11-22T16:30:21Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Serg:&lt;/strong&gt;
Вроде бы все просто. Стратегия должна выполнять OnProcess раз в 100мс, в логгере я должен увидеть приблизительно 100 сообщений OnProcess и в течении 10 сек стратегия должна сама себя остановить.
Спасибо&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Скопировал код в тесты. Сделал вот такой логгер:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;private sealed class TestStrategy : Strategy
{
	private readonly bool _isAutoStop;

	public TestStrategy(bool isAutoStop)
	{
		_isAutoStop = isAutoStop;
	}

	protected override StrategyProcessResults OnProcess()
	{
		if (base.ProcessState == StrategyProcessStates.Stopping)
			return StrategyProcessResults.Stop;

		if (this.TotalWorkingTime.Seconds &amp;gt; 10)
		{
			if (_isAutoStop)
				return StrategyProcessResults.Stop;
			else
				this.Stop();

			AddLog(StrategyErrorStates.Warning, &amp;quot;send stop&amp;quot;, this);
		}

		AddLog(StrategyErrorStates.None, &amp;quot;OnProcess&amp;quot;, this);
		return StrategyProcessResults.Continue;
	}

	protected override void OnRunned()
	{
		AddLog(StrategyErrorStates.None, &amp;quot;OnRunned&amp;quot;, this);
		base.OnRunned();
	}

	protected override void OnRunning()
	{
		AddLog(StrategyErrorStates.None, &amp;quot;OnRunning&amp;quot;, this);
		base.OnRunning();
	}

	protected override void OnStopped()
	{
		AddLog(StrategyErrorStates.None, &amp;quot;OnStopped&amp;quot;, this);
		base.OnStopped();
	}

	protected override void OnStopping()
	{
		AddLog(StrategyErrorStates.None, &amp;quot;OnStopping&amp;quot;, this);
		base.OnStopping();
	}
}

private sealed class StringStategyLogger : StrategyLogger
{
	private readonly StringBuilder _builder = new StringBuilder();

	public string String
	{
		get { return _builder.ToString(); }
	}

	public override void WriteMessage(Strategy strategy, StrategyErrorStates state, string message)
	{
		_builder.Append(message);
	}
}

[TestMethod]
public void ManualStartStop()
{
	StartStop(false);
}

[TestMethod]
public void AutoStartStop()
{
	StartStop(true);
}

private static void StartStop(bool isAuto)
{
	var st = new TestStrategy(isAuto);
	var logger = new StringStategyLogger();
	logger.Strategies.Add(st);
	var manager = new StrategyManager(Helper.CreateTestTrader());
	st.Interval = TimeSpan.FromSeconds(0.1);
	manager.Register(st, Helper.CreatePortfolio(), Helper.CreateSecurity());
	st.Start();
	Thread.Sleep(TimeSpan.FromSeconds(20));
	var str = logger.String;
	Assert.IsTrue(str.Contains(&amp;quot;OnRunned&amp;quot;));
	Assert.IsTrue(str.Contains(&amp;quot;OnRunning&amp;quot;));
	Assert.IsTrue(str.Contains(&amp;quot;OnStopped&amp;quot;));
	Assert.IsTrue(str.Contains(&amp;quot;OnStopping&amp;quot;));
	Assert.IsTrue(str.Contains(&amp;quot;OnProcess&amp;quot;));
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Все отработало как часики.&lt;/p&gt;
&lt;p&gt;Нашел особенность с StrategyManager. Его нужно создавать до подключения ITrader. В след. версии это исправлю и можно будет создавать когда угодно.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/4717/</id>
    <title type="text">Да и спасибо за &amp;gt; Mikhail Sukhov: http://stockmarketdotnet...m/2010/10/stock-25.html Алгоритмы Пункт...</title>
    <published>2010-11-22T14:11:30Z</published>
    <updated>2010-11-22T14:11:30Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Да и спасибо за &amp;gt; &lt;strong&gt;Mikhail Sukhov:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;http://stockmarketdotnet...m/2010/10/stock-25.html Алгоритмы Пункт 1. не сразу дошло))&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/4714/</id>
    <title type="text">Mikhail Sukhov: Но как-то не все рвутся отвечать другим, чего не сказать наоборот, о вопросах. Да то...</title>
    <published>2010-11-22T14:01:50Z</published>
    <updated>2010-11-22T14:01:50Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Mikhail Sukhov:&lt;/strong&gt;
Но как-то не все рвутся отвечать другим, чего не сказать наоборот, о вопросах.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Да тоже заметил. Сложно отвечать когда сам еще не разобрался до конца и задаешь глупые вопросы)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Mikhail Sukhov:&lt;/strong&gt;
Что-то явно в коде робота. Потому что одно на другое очень слабо влияет... Попробуйте код упростить. Подозреваю, что там много больше, чем Вы привели в топике.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Это весь код стратегии. Я просто решил потестить все ли переопределения выполняються&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    class ABC : Strategy
    {
        public ABC()
            : base()
        {
        }

        protected override StrategyProcessResults OnProcess()
        {
            if (base.ProcessState == StrategyProcessStates.Stopping)
                return StrategyProcessResults.Stop;

            if (this.TotalWorkingTime.Seconds &amp;gt; 10)
            {
                this.Stop();
                AddLog(StrategyErrorStates.Warning, &amp;quot;send stop&amp;quot;, this);
            }

            AddLog(StrategyErrorStates.None, &amp;quot;OnProcess&amp;quot;, this);
            return StrategyProcessResults.Continue;
        }

        protected override void OnRunned()
        {
            AddLog(StrategyErrorStates.None, &amp;quot;OnRunned&amp;quot;, this);
            base.OnRunned();
        }

        protected override void OnRunning()
        {
            AddLog(StrategyErrorStates.None, &amp;quot;OnRunning&amp;quot;, this);
            base.OnRunning();
        }

        protected override void OnStopped()
        {
            AddLog(StrategyErrorStates.None, &amp;quot;OnStopped&amp;quot;, this);
            base.OnStopped();
        }

        protected override void OnStopping()
        {
            AddLog(StrategyErrorStates.None, &amp;quot;OnStopping&amp;quot;, this);
            base.OnStopping();
        }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Стратегия только одна, без дочерних.&lt;/p&gt;
&lt;p&gt;Код регистрации и запуска стратегии из главного окна&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;private void button5_Click(object sender, RoutedEventArgs e)
		{
			Security m1 = sList.FirstOrDefault(s =&amp;gt; s.Code == &amp;quot;LKOH&amp;quot;);
			Portfolio p = pList.FirstOrDefault(i =&amp;gt; i.Name == &amp;quot;NL0011100043&amp;quot;);
			var st = new ABC();
            gsl.Strategies.Add(st);
            st.Interval = TimeSpan.FromSeconds(0.1);
			man.Register(st, p, m1);
			st.Start();
		}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;это весь код не включая получения инструментов, портфелей и подключения к квику.
В такой реализации OnProcess у меня ни разу не выполняется.&lt;/p&gt;
&lt;p&gt;Во так я останавливаю ее:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;private void button6_Click(object sender, RoutedEventArgs e)
		{
			foreach (var item in man.Strategies)
			{
				if (item.Name == &amp;quot;ABC&amp;quot; || item.Name == &amp;quot;&amp;quot;)
					item.Stop();
			}
		}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;а вот весь лог GuiStrategyLogger'a:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ABC 16:35:28 OnRunning
ABC 16:35:29 Стратегия запущена
ABC 16:35:29 OnRunned
ABC 16:35:35 Стратегия останавливается.
ABC 16:35:35 OnStopping&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Вроде бы все просто. Стратегия должна выполнять OnProcess раз в 100мс, в логгере я должен увидеть приблизительно 100 сообщений OnProcess и в течении 10 сек стратегия должна сама себя остановить.
Будьте так добры)) все кому не лень попробуйте создать такой пример и отписаться по результатам.
Все кому лень чуть позже выложу ссылку на солюшн)&lt;/p&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/4707/</id>
    <title type="text">Serg: Продолжаю тему)) По приведенному выше классу. Полная остановка стратегии не происходит( В логе...</title>
    <published>2010-11-22T12:55:11Z</published>
    <updated>2010-11-22T12:55:11Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Serg:&lt;/strong&gt;
Продолжаю тему))
По приведенному выше классу. Полная остановка стратегии не происходит(
В логе вижу OnStopping но не вижу OnStopped. И также не вижу сообщения о том что стратегия остановилась. как это было ранее.
Ктонить может подсказать это моя бага или S#?
Спасибо.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Попробуйте бряку поставить в OnStopped.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Serg:&lt;/strong&gt;
Михаилу по поводу проекта:
Как я понимаю чем дальше тем сложнее поддерживать библиотеку, да и возможно вам это просто надоело уже.
Но... не надо отчаиваться) Нас тут Уже много и я думаю многие могли и хотели бы помочь. Ждем ваших, Михаил, предложений...
Возможно было бы не плохо сделать что-то типа wiki с элементарными примерами использования S# и возможностью пользователей дополнять ее примерами.
Вот к примеру класс описанный мной выше... что в нем не так?
Благодаря вышей библиотеке написал одного робота на версии 2.4 работает прекрасно но писал его под winforms и многим возможностями не пользовался.
Сейчас хочу углубиться, сделать все на wpf чтобы воспользоваться всяческими мониторами стратегий и тд и тп но не могу получить желанный результат. Написав уже практически всю реализацию стратегии возвращаюсь в начало к таким вот элементарным примерам(возможно по глупости своей). Не разобравшись с основами нельзя сделать стабильно работающую систему((
Еще раз спасибо.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Стоило мне отдохнуть раз в выходные, как проект сразу надоел.[biggrin] Реальная помощь проекты на данный момент (до чего действительно сейчас руки редко доходят и в дальнейшем будет все сложнее) - это ответы на вопросы - что и как. Есть конечно и S# ошибки, но есть и те, на которые по силам ответить многим. Но как-то не все рвутся отвечать другим, чего не сказать наоборот, о вопросах.[glare]&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/4706/</id>
    <title type="text">Serg: Всем hi Подскажите плиз почему такая стратегия не останавливается? Как можно сделать так чтобы...</title>
    <published>2010-11-22T12:50:38Z</published>
    <updated>2010-11-22T12:50:38Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Serg:&lt;/strong&gt;
Всем hi&lt;/p&gt;
&lt;p&gt;Подскажите плиз почему такая стратегия не останавливается?
Как можно сделать так чтобы стратегия сама себя остановила?
Остановка происходит толька после вызова Stop() извне.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Что из вне, что снаружи - вызывается одно и тоже... Стратегия дочерняя? Имеет ли сама дочерние стратегии? Точку останова ставили внутрь OnProcess? Плюс, еще приведите как Вы снаружи останавливаете?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Serg:&lt;/strong&gt;
Попутный вопрос: Не вижу в Ecng.Trading.Algo класс FileStrategyLogger. Что-то изменилось?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://stockmarketdotnet.blogspot.com/2010/10/stock-25.html" rel="nofollow" target="_blank"&gt;http://stockmarketdotnet.blogspot.com/2010/10/stock-25.html&lt;/a&gt; Алгоритмы Пункт 1.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Serg:&lt;/strong&gt;
Проблема как выяснилось тут в другом. OnProcess вообще не выполняется.
Вот так происходит регистрация и запуск стратегии:
var st = new aaa();
st.Interval = TimeSpan.FromSeconds(0.1);
man.Register(st, p, m1);
st.Start();&lt;/p&gt;
&lt;p&gt;Но если добавить в OnRunned
две строки вида:
Trader.QuotesChanged += new Action&amp;lt;IEnumerable&lt;MarketDepth&gt;&amp;gt;(Trader_QuotesChanged);
Trader.RegisterQuotes(this.Security);
все работает как часы&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.ru/posts/m/4702/</id>
    <title type="text">Продолжаю тему)) По приведенному выше классу. Полная остановка стратегии не происходит( В логе вижу ...</title>
    <published>2010-11-22T10:29:06Z</published>
    <updated>2010-11-22T10:29:06Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Продолжаю тему))
По приведенному выше классу. Полная остановка стратегии не происходит(
В логе вижу OnStopping но не вижу OnStopped. И также не вижу сообщения о том что стратегия остановилась. как это было ранее.
Ктонить может подсказать это моя бага или S#?
Спасибо.&lt;/p&gt;
&lt;p&gt;Михаилу по поводу проекта:
Как я понимаю чем дальше тем сложнее поддерживать библиотеку, да и возможно вам это просто надоело уже.
Но... не надо отчаиваться) Нас тут Уже много и я думаю многие могли и хотели бы помочь. Ждем ваших, Михаил, предложений...
Возможно было бы не плохо сделать что-то типа wiki с элементарными примерами использования S# и возможностью пользователей дополнять ее примерами.
Вот к примеру класс описанный мной выше... что в нем не так?
Благодаря вышей библиотеке написал одного робота на версии 2.4 работает прекрасно но писал его под winforms и многим возможностями не пользовался.
Сейчас хочу углубиться, сделать все на wpf чтобы воспользоваться всяческими мониторами стратегий и тд и тп но не могу получить желанный результат. Написав уже практически всю реализацию стратегии возвращаюсь в начало к таким вот элементарным примерам(возможно по глупости своей). Не разобравшись с основами нельзя сделать стабильно работающую систему((
Еще раз спасибо.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/4698/</id>
    <title type="text">Всем hi Не могу остановить вот такую стратегию: class aaa :Strategy { public aaa() : base() { } prot...</title>
    <published>2010-11-20T16:08:44Z</published>
    <updated>2010-11-20T17:51:45Z</updated>
    <author>
      <name>Serg</name>
      <uri>https://stocksharp.ru/users/484/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Всем hi&lt;/p&gt;
&lt;p&gt;Не могу остановить вот такую стратегию:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
    class aaa :Strategy
    {
        public aaa()
            : base()
        {
        }

        protected override StrategyProcessResults OnProcess()
        {
            if (base.ProcessState == StrategyProcessStates.Stopping)
                return StrategyProcessResults.Stop;
            
            if (this.TotalWorkingTime.Seconds &amp;gt; 10)
                this.Stop();
            AddLog(StrategyErrorStates.None, &amp;quot;OnProcess&amp;quot;, this);
            return StrategyProcessResults.Continue;
        }

        protected override void OnRunned()
        {
            AddLog(StrategyErrorStates.None, &amp;quot;OnRunned&amp;quot;, this);
            base.OnRunned();
        }

        protected override void OnRunning()
        {
            AddLog(StrategyErrorStates.None, &amp;quot;OnRunning&amp;quot;, this);
            base.OnRunning();
        }

        protected override void OnStopped()
        {
            AddLog(StrategyErrorStates.None, &amp;quot;OnStopped&amp;quot;, this);
            base.OnStopped();
        }

        protected override void OnStopping()
        {
            AddLog(StrategyErrorStates.None, &amp;quot;OnStopping&amp;quot;, this);
            base.OnStopping();
        }
    }

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Подскажите плиз почему такая стратегия не останавливается?
Как можно сделать так чтобы стратегия сама себя остановила?
Остановка происходит толька после вызова Stop() извне.&lt;/p&gt;
&lt;p&gt;Попутный вопрос: Не вижу в Ecng.Trading.Algo класс FileStrategyLogger. Что-то изменилось?&lt;/p&gt;
&lt;p&gt;Версия S# 2.5.2&lt;/p&gt;
&lt;p&gt;Спасибо.&lt;/p&gt;
&lt;p&gt;+++&lt;/p&gt;
&lt;p&gt;Проблема как выяснилось тут в другом. OnProcess вообще не выполняется.
Вот так происходит регистрация и запуск стратегии:
var st = new aaa();
st.Interval = TimeSpan.FromSeconds(0.1);
man.Register(st, p, m1);
st.Start();&lt;/p&gt;
&lt;p&gt;Но если добавить в OnRunned
две строки вида:
Trader.QuotesChanged += new Action&amp;lt;IEnumerable&lt;MarketDepth&gt;&amp;gt;(Trader_QuotesChanged);
Trader.RegisterQuotes(this.Security);
все работает как часы&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>