﻿<?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">Создание роботов с помощью S#. Часть 2. Базовый класс для всех стратегий</title>
  <id>~/topic/358/sozdanie-robotov-s-pomoshshyu-s_-chast-2_-bazovyi-klass-dlya-vseh-strategii/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-10T04:23:37Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=358" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/23731/</id>
    <title type="text">Тут </title>
    <published>2013-02-03T15:15:40Z</published>
    <updated>2016-08-16T00:11:27Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.com/users/5973/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;&lt;a href="http://stocksharp.com/posts/m/23728/"&gt;Тут&lt;/a&gt;&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23740/</id>
    <title type="text">Скоростью. Т.к. тестирование идет уже на готовых свечках а не на тиках. </title>
    <published>2013-02-03T19:12:49Z</published>
    <updated>2013-02-03T19:12:49Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.com/users/5973/</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/23738/</id>
    <title type="text">Moadip: На текущий момент, это пример уже еще раз переделан. И дока не успевает за обновлениями.[big...</title>
    <published>2013-02-03T19:00:48Z</published>
    <updated>2013-02-03T19:00:48Z</updated>
    <author>
      <name>Den</name>
      <uri>https://stocksharp.com/users/6003/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(23737)" rel="nofollow" target="_blank"&gt;Moadip&lt;/a&gt;:&lt;/strong&gt;
На текущий момент, это пример уже еще раз переделан. И дока не успевает за обновлениями.[biggrin]
Поэтому то что в доке, и в примере &lt;strong&gt;SampleHistoryTesting&lt;/strong&gt; отличается, но не сильно.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Поясните, пожалуйста, на что влияет установка &lt;strong&gt;UseCandlesTimeFrame = emulationInfo.UseCandleTimeFrame&lt;/strong&gt;
Чем это будет отличаться от тикового тестирования, по которому все равно генерятся 5m свечки?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23737/</id>
    <title type="text">В доке был изменен топик по тестированию На истории. Переделан пример SampleHistoryTesting, для срав...</title>
    <published>2013-02-03T18:50:15Z</published>
    <updated>2013-02-03T18:50:15Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.com/users/5973/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;В доке был изменен топик по тестированию &lt;a href="http://stocksharp.com/doc/html/5b90a23e-24b9-474a-a699-da47b666194a.htm"&gt;На истории&lt;/a&gt;.
Переделан пример &lt;strong&gt;SampleHistoryTesting&lt;/strong&gt;, для сравнительного теста на различных маркет-данных.&lt;/p&gt;
&lt;p&gt;На текущий момент, это пример уже еще раз переделан. И дока не успевает за обновлениями.[biggrin]
Поэтому то что в доке, и в примере &lt;strong&gt;SampleHistoryTesting&lt;/strong&gt; отличается, но не сильно.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23736/</id>
    <title type="text">Moadip: А кто сказал что будет CandleToken? Его уже давно нет. То что нашлось по CandleToken, это не...</title>
    <published>2013-02-03T18:40:55Z</published>
    <updated>2013-02-03T18:43:16Z</updated>
    <author>
      <name>Den</name>
      <uri>https://stocksharp.com/users/6003/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(23735)" rel="nofollow" target="_blank"&gt;Moadip&lt;/a&gt;:&lt;/strong&gt;
А кто сказал что будет CandleToken? Его уже давно нет.
То что нашлось по CandleToken, это недосмотр, когда переделывалась дока. Будет исправлено.
В &lt;a href="http://stocksharp.com/doc/"&gt;доке&lt;/a&gt; надо почитать раздел &lt;a href="http://stocksharp.com/doc/html/cd52cfcf-938c-4fce-9a56-4e9a001f0792.htm"&gt;Свечки&lt;/a&gt;, и все его подразделы.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;В анонсе 4.1.7 сказано, что появилось тестирование на свечках.
Что имеется в виду и отражено ли это в доке?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23735/</id>
    <title type="text">А кто сказал что будет CandleToken? Его уже давно нет. То что нашлось по CandleToken, это недосмотр,...</title>
    <published>2013-02-03T17:44:55Z</published>
    <updated>2013-02-03T17:44:55Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.com/users/5973/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;А кто сказал что будет CandleToken? Его уже давно нет.
То что нашлось по CandleToken, это недосмотр, когда переделывалась дока. Будет исправлено.&lt;/p&gt;
&lt;p&gt;В &lt;a href="http://stocksharp.com/doc/"&gt;доке&lt;/a&gt; надо почитать раздел &lt;a href="http://stocksharp.com/doc/html/cd52cfcf-938c-4fce-9a56-4e9a001f0792.htm"&gt;Свечки&lt;/a&gt;, и все его подразделы.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://" rel="nofollow" target="_blank"&gt;Поиск вернули&lt;/a&gt;. Можно им пользоваться, а не google.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23733/</id>
    <title type="text">забил в гугл: site:http://stocksharp.com/doc/ candletoken хм...ответ только на эту страницу http://w...</title>
    <published>2013-02-03T17:29:17Z</published>
    <updated>2013-02-03T17:29:53Z</updated>
    <author>
      <name>beemo</name>
      <uri>https://stocksharp.com/users/26841/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;забил в гугл: site:http://stocksharp.com/doc/ candletoken&lt;/p&gt;
&lt;p&gt;хм...ответ только на эту страницу&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.stocksharp.com/doc/html/9d3b0442-0633-4ba5-97e1-22829adcd025.htm"&gt;http://www.stocksharp.com/doc/html/9d3b0442-0633-4ba5-97e1-22829adcd025.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;а вот в каком namespace это лежит не сказано.
поиск по reference в проекте тоже сказал что ничего нет.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/23725/</id>
    <title type="text">в версии 4.1.7 нет CandleToken! Чем его заменить? </title>
    <published>2013-02-03T12:52:35Z</published>
    <updated>2013-02-03T12:52:35Z</updated>
    <author>
      <name>beemo</name>
      <uri>https://stocksharp.com/users/26841/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;в версии 4.1.7 нет CandleToken! Чем его заменить?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/134/</id>
    <title type="text">Все наши стратегии будем наследовать от класса StandardStrategy. Зачем он нужен? Дело в том, что все...</title>
    <published>2012-03-18T21:58:41Z</published>
    <updated>2012-12-17T15:07:01Z</updated>
    <author>
      <name>FinDirector</name>
      <uri>https://stocksharp.com/users/473/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Все наши стратегии будем наследовать от класса StandardStrategy. Зачем он нужен? Дело в том, что все стратегии часто должны уметь делать одни и теже вещи: брать откуда-то торговую систему, портфель, инструмент, исторические свечки, хранить состояние, устанавливать  размер позиции. Чтобы не решать каждый раз эти проблемы, можно сделать так:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;	public abstract class StandardStrategy : Strategy
	{
		public virtual string Description { get { return Name; } }
		public ITraderBuilder TraderBuilder { get; set; }
		public IPortfolioSelector PortfolioSelector { get; set; }
		public ISecuritySelector SecuritySelector { get; set; }
		public IVolumeSizer VolumeSizer { get; set; }
		public IHistoryCandleProvider HistoryCandleProvider { get; set; }
		public ISettingsProvider SettingsProvider { get; set; }
		public Unit PriceDelta { get; set; }

		protected StandardStrategy()
		{
			PriceDelta = 0.1.Percents();
		}
	}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ITraderBuilder будет  уметь волшебным образом создавать торговую систему:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;	public interface ITraderBuilder : IDisposable
	{
		string Title { get; }
		ITrader Trader { get; }
		ICandleManager CandleManager { get; }
		void RunTerminal();
		ITrader BuildTrader();
		event Action IsConnectedChanged;
	}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;IPortfolioSelector будет находить портфель:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;	public interface IPortfolioSelector
	{
		string Title { get; }
		Portfolio GetPortfolio(ITrader trader);
	}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ISecuritySelector находить инструмент:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;	public interface ISecuritySelector
	{
		string Title { get; }
		Security GetSecurity(ITrader trader);
	}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;IVolumeSizer расчитывать размер позиции:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;	public interface IVolumeSizer
	{
		int GetVolume(Portfolio portfolio, Security security);
	}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;IHistoryCandleProvider получать исторические свечки:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;	public interface IHistoryCandleProvider
	{
		List&amp;lt;TimeFrameCandle&amp;gt; GetHistoryCandles(DateTime beginDate, DateTime endDate);
	}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ISettingsProvider хранить состояние стратегии:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;	public interface ISettingsProvider
	{
		string ReadSetting(string name);
		void WriteSetting(string name, string value);
	}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Представим, что у нас уже есть реалзации всех этих интерфесов (этим мы займемся позже). Как будет выглядить конкретная стратегия?&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;	public class StrikeStrategy : StandardStrategy
	{
		public override string Description
		{
			get { return &amp;quot;Стратегия для ловли ударного дня&amp;quot;; }
		}

		CandleToken candleToken;
		DateTime strategyStartTime;

		public TimeSpan TimeFrame { get; set; }

		public StrikeStrategy()
		{
			TimeFrame = TimeSpan.FromMinutes(5);
		}

		protected override void OnStarting()
		{
			try
			{
				Trader = TraderBuilder.BuildTrader();
				if (Trader == null)
					throw new ApplicationException(string.Format(&amp;quot;Отсутствует трейдер {0}.&amp;quot;, TraderBuilder.Title));
				strategyStartTime = Trader.MarketTime;

				Portfolio = PortfolioSelector.GetPortfolio(Trader);
				if (Portfolio == null)
					throw new ApplicationException(string.Format(&amp;quot;Отсутствует портфель {0}.&amp;quot;, PortfolioSelector.Title));

				Security = SecuritySelector.GetSecurity(Trader);
				if (this.Security == null)
					throw new ApplicationException(string.Format(&amp;quot;Отсутствует инструмент {0}.&amp;quot;, SecuritySelector.Title));
				Trader.RegisterQuotes(Security);

				if (VolumeSizer != null)
				{
					Volume = VolumeSizer.GetVolume(Portfolio, Security);
					this.AddInfoLog(&amp;quot;Объем: {0}&amp;quot;, Volume);
				}

				if (TraderBuilder.CandleManager.IsTimeFrameCandlesRegistered(Security, TimeFrame))
				{
					candleToken = TraderBuilder.CandleManager.GetToken(typeof(TimeFrameCandle), Security, TimeFrame);
				}
				else
				{
					candleToken = TraderBuilder.CandleManager.RegisterTimeFrameCandles(Security, TimeFrame);
				}

				this.When(candleToken.CandlesFinished())
					.Do&amp;lt;IEnumerable&amp;lt;Candle&amp;gt;&amp;gt;(OnCandlesFinished);
			}
			catch (ApplicationException ex)
			{
				this.AddErrorLog(ex.Message);
			}

			base.OnStarting();
		}

		void OnCandlesFinished(IEnumerable&amp;lt;Candle&amp;gt; newCandles)
		{
			foreach (Candle candle in newCandles)
			{
				OnCandleFinished(candle);
			}
		}

		void OnCandleFinished(Candle candle)
		{
			DateTime currentDate = candle.Time;

			if (candle.Time &amp;lt; strategyStartTime)
				return;

			...
		}
	}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:[:::right
&lt;strong&gt;Автор статьи — Вадим Чижов&lt;/strong&gt;&lt;/p&gt;
&lt;div class="]"&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/22720/</id>
    <title type="text">Ндааа... API уже совсем не тот. </title>
    <published>2012-11-29T15:33:09Z</published>
    <updated>2012-11-29T15:33:09Z</updated>
    <author>
      <name>VassilSanych</name>
      <uri>https://stocksharp.com/users/6491/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Ндааа... API уже совсем не тот.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>