﻿<?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">Событийная модель 2</title>
  <id>~/topic/2771/sobytiinaya-model-2/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-04T10:01:49Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=2771" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/19965/</id>
    <title type="text">Хорошо, попробую сформулировать вопросы. 1. Как правильно использовать объект Strategy? Правильно ли...</title>
    <published>2012-06-21T14:03:09Z</published>
    <updated>2012-06-21T14:03:09Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Дмитрий Егоров &lt;a href="https://stocksharp.ru/posts/m/19942/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Хорошо, попробую сформулировать вопросы.&lt;br /&gt;&lt;br /&gt;1. Как правильно использовать объект Strategy? Правильно ли я понимаю, что он инициализируется/конструируется, затем нужно вызвать .Start(), и тогда исполнится код OnStarting(). В OnStarting() нужно запихнуть подписку на все необходимые события (все правила). При вызове Stop() будет сделан dispose всего.&lt;br /&gt;&lt;br /&gt;2. Насколько я понял изначально класс и метод уникального правила должны находиться внутри класса стратегии. Верно ли это?&lt;br /&gt;&lt;br /&gt;3. В ответе на мой вопрос Вы вызываете правило как метод larryTrader (QuikTrader). Но это ведь указатель на объект, который дала стратегии основная программа. Откуда он знает про новое правило? (При попытке сделать подобным образом Studio сразу подчёркивает ошибку) Может быть здесь должна быть стратегия? (Видимо ответ тесно связан со 2 вопросом)&lt;br /&gt;&lt;br /&gt;Слегка запутался)))&lt;br /&gt;&lt;br /&gt;С уважением,&lt;br /&gt;Егоров Дмитрий&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;1) Совершенно верно. В SampleSma (trunk\Samples\Quik\SampleSma\MainWindow.xaml.cs) это делается в методе StartClick&lt;br /&gt;2) Да. К примеру - как вы сказали в 1) вопросе - в OnStarting.&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
			_series
				.WhenCandlesFinished()
				.Do(ProcessCandle)
				.Apply(this);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Вот пример, опять же, из SmaStrategy.cs&lt;br /&gt;3) quikTrader - это объект, который вы передали в стратегию. Он доступен через свойство стратегии Trader.&lt;br /&gt;Ведь при инициализации стратегии вы инициализируете свойство Trader:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
				_strategy = new SmaStrategy(series, new SimpleMovingAverage { Length = 80 }, new SimpleMovingAverage { Length = 10 })
				{
					Volume = 1,
					Security = _lkoh,
					Portfolio = Portfolios.SelectedPortfolio,
					Trader = _trader,
				};&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;(из MainWindow.xaml.cs).&lt;br /&gt;&lt;br /&gt;поэтому теперь в стратегии в OnStarting можно писать&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
Trader.WhenNewTodayCandles().Do(CalculatePosition).Apply(this);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/19942/</id>
    <title type="text">Хорошо, попробую сформулировать вопросы. 1. Как правильно использовать объект Strategy? Правильно ли...</title>
    <published>2012-06-21T08:34:18Z</published>
    <updated>2012-06-21T08:34:18Z</updated>
    <author>
      <name>Дмитрий Егоров</name>
      <uri>https://stocksharp.ru/users/6046/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Хорошо, попробую сформулировать вопросы.&lt;br /&gt;&lt;br /&gt;1. Как правильно использовать объект Strategy? Правильно ли я понимаю, что он инициализируется/конструируется, затем нужно вызвать .Start(), и тогда исполнится код OnStarting(). В OnStarting() нужно запихнуть подписку на все необходимые события (все правила). При вызове Stop() будет сделан dispose всего.&lt;br /&gt;&lt;br /&gt;2. Насколько я понял изначально класс и метод уникального правила должны находиться внутри класса стратегии. Верно ли это?&lt;br /&gt;&lt;br /&gt;3. В ответе на мой вопрос Вы вызываете правило как метод larryTrader (QuikTrader). Но это ведь указатель на объект, который дала стратегии основная программа. Откуда он знает про новое правило? (При попытке сделать подобным образом Studio сразу подчёркивает ошибку) Может быть здесь должна быть стратегия? (Видимо ответ тесно связан со 2 вопросом)&lt;br /&gt;&lt;br /&gt;Слегка запутался)))&lt;br /&gt;&lt;br /&gt;С уважением,&lt;br /&gt;Егоров Дмитрий</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/19928/</id>
    <title type="text">Добрый. Что именно не выходит? Все SmaStrategy в примерах - на событийной модели. DeltaHedge - это у...</title>
    <published>2012-06-20T15:35:18Z</published>
    <updated>2012-06-20T15:35:18Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Добрый.&lt;br /&gt;Что именно не выходит? Все SmaStrategy в примерах - на событийной модели.&lt;br /&gt;&lt;br /&gt;DeltaHedge - это уже закрытая стратегия в S#, код не открываем.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/19927/</id>
    <title type="text">Добрый день Пока никак не выходит переписать на событийную модель. Существует ли пример, в котором р...</title>
    <published>2012-06-20T15:22:47Z</published>
    <updated>2012-06-20T15:22:47Z</updated>
    <author>
      <name>Дмитрий Егоров</name>
      <uri>https://stocksharp.ru/users/6046/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Добрый день&lt;br /&gt;&lt;br /&gt;Пока никак не выходит переписать на событийную модель.&lt;br /&gt;Существует ли пример, в котором реализована стратегия с нестандартным правилом?&lt;br /&gt;В доках приведены отрывки кода DeltaHedge strategy, а где можно увидеть полный код стратегии?&lt;br /&gt;&lt;br /&gt;С уважением,&lt;br /&gt;Егоров Дмитрий</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/19589/</id>
    <title type="text">Добрый. Сейчас все примеры уже переписаны на событийную модель. Для того чтобы использовать When нео...</title>
    <published>2012-06-07T20:16:14Z</published>
    <updated>2012-06-07T20:16:14Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.ru/users/2826/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Добрый.&lt;br /&gt;&lt;br /&gt;Сейчас все примеры уже переписаны на событийную модель.&lt;br /&gt;&lt;br /&gt;Для того чтобы использовать When необходимы правила.&lt;br /&gt;К примеру - так.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
		private sealed class NewTodayCandlesRule : StrategyRule&amp;lt;IEnumerable&amp;lt;object&amp;gt;&amp;gt;
		{
			private readonly ITrader _trader;

			public NewCustomTablesRule (ITrader trader)
			{
				if (trader == null)
					throw new ArgumentNullException(&amp;quot;trader&amp;quot;);

				_trader = trader;

				Name = &amp;quot;Новые данные&amp;quot;;

				_trader.CustomTablesChanged += OnNewOrChangedCustomTables;
				_trader.NewCustomTables += OnNewOrChangedCustomTables;
			}

			private void OnNewOrChangedCustomTables(Type type, IEnumerable&amp;lt;object&amp;gt; objects)
			{
				if (type == typeof(TodayCandle))
				{
					Activate(objects);
				}
			}

			protected override void DisposeManaged()
			{
				_trader.CustomTablesChanged -= OnNewOrChangedCustomTables;
				_trader.NewCustomTables -= OnNewOrChangedCustomTables;
				base.DisposeManaged();
			}
		}


		public static StrategyRule&amp;lt;IEnumerable&amp;lt;object&amp;gt;&amp;gt; WhenNewTodayCandles(this ITrader trader)
		{
			return new NewTodayCandlesRule(trader);
		}

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;и теперь можно использовать&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
larryTrader.WhenNewTodayCandles().Do(CalculatePosition).Apply(this);&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Тогда в CalculatePosition придёт как раз IEnumerable&amp;lt;object&amp;gt; - список из объектов типа TodayCandle.&lt;br /&gt;&lt;br /&gt;Это всё можно модифицировать как душе угодно. Надеюсь, принцип теперь более чем ясен :)</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/19575/</id>
    <title type="text">Добрый день Наткнулся на форуме на информацию, что примеры уже устарели и лучше использовать событий...</title>
    <published>2012-06-07T12:48:58Z</published>
    <updated>2012-06-07T12:48:58Z</updated>
    <author>
      <name>Дмитрий Егоров</name>
      <uri>https://stocksharp.ru/users/6046/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Добрый день&lt;br /&gt;&lt;br /&gt;Наткнулся на форуме на информацию, что примеры уже устарели и лучше использовать событийную модель со ссылкой на документацию (Стратегии - Создание стратегии).&lt;br /&gt;Существуют ли примеры помимо SampleSMA?&lt;br /&gt;&lt;br /&gt;У меня реализована стратегия в виде отдельного класса, для неё требуются данные из исторической таблицы (qpile).&lt;br /&gt;Например это реализовано так:&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;larryTrader.NewCustomTables += (type, objects) =&amp;gt;&lt;br /&gt;                {&lt;br /&gt;                    Console.WriteLine(&amp;quot;larryTrader.NewCustomTables&amp;quot;);&lt;br /&gt;                    ...&lt;br /&gt;&lt;br /&gt;                        //Releasing wait after open position prices have been calculated&lt;br /&gt;                        waitHistory.Set();&lt;br /&gt;                    }&lt;br /&gt;                };&lt;br /&gt;            larryTrader.CustomTablesChanged += (type, objects) =&amp;gt;&lt;br /&gt;                {&lt;br /&gt;                    if (type == typeof(TodayCandle))&lt;br /&gt;                    {&lt;br /&gt;                        var candles = objects.Cast&amp;lt;TodayCandle&amp;gt;();&lt;br /&gt;                        if (candles.ElementAt&amp;lt;TodayCandle&amp;gt;(1).DateTime.Time != lastCloseTime)&lt;br /&gt;                        {&lt;br /&gt;                            lastClosePrice = candles.ElementAt&amp;lt;TodayCandle&amp;gt;(1).ClosePrice;&lt;br /&gt;                            lastCloseTime = candles.ElementAt&amp;lt;TodayCandle&amp;gt;(1).DateTime.Time;&lt;br /&gt;                            Console.WriteLine(&amp;quot;{0} New 15 min candle. Open time: {1}. Close price: {2}&amp;quot;, DateTime.Now, lastCloseTime, lastClosePrice);&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                };&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Сделать так:&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;            larryTrader&lt;br /&gt;                .NewCustomTables&lt;br /&gt;                .Do(CalculatePosition)&lt;br /&gt;                .Apply(this);&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;вроде нельзя. whenNewCustomTables тоже нет. Как правильно делать? По старому? (хоть на RTFM отправьте)))&lt;br /&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>