﻿<?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/3648/voprosy-po-uroku_-opredelenie-vremeni-predposlednei-svechi/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-05T16:45:54Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=3648" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/25670/</id>
    <title type="text">В алгоритме SMAStrategy мы определяем время предпоследней свечи. Зачем? Только для привязки стратеги...</title>
    <published>2013-04-29T14:54:24Z</published>
    <updated>2013-06-23T15:40:13Z</updated>
    <author>
      <name>UsilaDobry</name>
      <uri>https://stocksharp.ru/users/28825/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">В алгоритме SMAStrategy мы определяем время предпоследней свечи. Зачем? Только для привязки стратегии к реальному времени?&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;

var time = timeFrame.GetCandleBounds(Security).Min - timeFrame;
&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;

if (candle.OpenTime &amp;gt;= time &amp;amp;&amp;amp; _parabolic.IsFormed &amp;amp;&amp;amp; candle.State == CandleStates.Finished)
&lt;/pre&gt;
&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.ru/posts/m/25718/</id>
    <title type="text"> Т.е. если в OnStarted() написать _candleSeries.WhenCandlesFinished() .Do(()=&amp;gt;{ _candleSeries.GetCan...</title>
    <published>2013-05-01T17:21:58Z</published>
    <updated>2013-05-01T17:21:58Z</updated>
    <author>
      <name>IvanB</name>
      <uri>https://stocksharp.ru/users/26984/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;UsilaDobry &lt;a href="https://stocksharp.ru/posts/m/25713/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Т.е. если в OnStarted() написать&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;
_candleSeries.WhenCandlesFinished()
             .Do(()=&amp;gt;{
                      _candleSeries.GetCandle(1);
                      MainAlgorithm(); 
           }).Apply(this)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;то в основном алгоритме можно не вызывать метод  _candleSeries.GetCandle(1);?&lt;br /&gt;или в этом правиле даже не надо указывать метод _candleSeries.GetCandle(1);?, т.е.&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;
_candleSeries.WhenCandlesFinished()
             .Do(MainAlgorithm) 
             .Apply(this)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&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;
protected override void OnStarted()
        {
            //подписываемся на событие изменения индикатора
           // _sma.Changed += MainAlgorithm;

            _candleSeries.WhenCandlesFinished()
                         .Do(candle =&amp;gt;
                             {
                                 // Обработать завершенную свечу candle
                             })
                         .Apply();

            base.OnStarted();
        }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;если надо получать предпоследнюю свечу, то нужно будет делать как-то специально, например даже так _candleSeries.GetCandle(1)&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;UsilaDobry &lt;a href="https://stocksharp.ru/posts/m/25713/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Я думаю проверка candle.OpenTime &amp;gt;= time необходима в случае, если мы одновременно запускаем вывод на график и стратегию, например одной кнопкой.&lt;br /&gt;А если мы сначала одной кнопкой запускаем график, а потом второй кнопкой стартует наша стратегия, то такая проверка не нужна.&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.ru/posts/m/25713/</id>
    <title type="text"> Зачем городить для этого этот код... Более того, можно использовать правило _candleSeries.WhenCandl...</title>
    <published>2013-05-01T16:27:16Z</published>
    <updated>2013-05-01T16:27:49Z</updated>
    <author>
      <name>UsilaDobry</name>
      <uri>https://stocksharp.ru/users/28825/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;IvanB &lt;a href="https://stocksharp.ru/posts/m/25701/" 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;UsilaDobry &lt;a href="https://stocksharp.ru/posts/m/25698/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Зачем городить для этого этот код...&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Более того, можно использовать  правило _candleSeries.WhenCandlesFinished() и он же передает завершенную свечу, т.е. не надо специально получать свечи.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Т.е. если в OnStarted() написать&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;
_candleSeries.WhenCandlesFinished()
             .Do(()=&amp;gt;{
                      _candleSeries.GetCandle(1);
                      MainAlgorithm(); 
           }).Apply(this)&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;то в основном алгоритме можно не вызывать метод  _candleSeries.GetCandle(1);?&lt;br /&gt;или в этом правиле даже не надо указывать метод _candleSeries.GetCandle(1);?, т.е.&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;
_candleSeries.WhenCandlesFinished()
             .Do(MainAlgorithm) 
             .Apply(this)&lt;/pre&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; НО, без проверки:&lt;br /&gt;candle.OpenTime &amp;gt;= time&lt;br /&gt;никак не обойтись, иначе при запуске стратегии, наш алгоритм отработается на старых свечах и такое наторгует.....&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Я думаю проверка candle.OpenTime &amp;gt;= time необходима в случае, если мы одновременно запускаем вывод на график и стратегию, например одной кнопкой.&lt;br /&gt;А если мы сначала одной кнопкой запускаем график, а потом второй кнопкой стартует наша стратегия, то такая проверка не нужна.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/25701/</id>
    <title type="text"> Зачем городить для этого этот код... Более того, можно использовать правило _candleSeries.WhenCandl...</title>
    <published>2013-05-01T05:16:26Z</published>
    <updated>2013-05-01T05:18:08Z</updated>
    <author>
      <name>IvanB</name>
      <uri>https://stocksharp.ru/users/26984/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;UsilaDobry &lt;a href="https://stocksharp.ru/posts/m/25698/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Зачем городить для этого этот код...&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Более того, можно использовать  правило _candleSeries.WhenCandlesFinished() и он же передает завершенную свечу, т.е. не надо специально получать свечи. НО, без проверки:&lt;br /&gt;candle.OpenTime &amp;gt;= time&lt;br /&gt;никак не обойтись, иначе при запуске стратегии, наш алгоритм отработается на старых свечах и такое наторгует.....</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/25698/</id>
    <title type="text"> Дело в том, что мы должны пропускать только последние свечи чтобы наша стратегия работала, историче...</title>
    <published>2013-05-01T04:42:41Z</published>
    <updated>2013-05-01T04:45:46Z</updated>
    <author>
      <name>UsilaDobry</name>
      <uri>https://stocksharp.ru/users/28825/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;IvanB &lt;a href="https://stocksharp.ru/posts/m/25689/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Дело в том, что мы должны пропускать только последние свечи чтобы наша стратегия работала, исторические свечи, например, которые были час назад нас (например при таймфрейме 1 мин.) не устраивают, ведь, при запуске получения свечей мы начинаем получать все свечи, котрые доступны системе, в том числе и историчсески, т.е. те, которые прошли например час назад (если говорим о таймфрейме, например, в 1 минуту.).&lt;br /&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;

            var candle = _candleSeries.GetCurrentCandle&amp;lt;TimeFrameCandle&amp;gt;();

            var timeFrame = (TimeSpan) candle.Arg;
            
            var time = timeFrame.GetCandleBounds(Security).Min - timeFrame;
            
            if (candle.OpenTime &amp;gt;= time &amp;amp;&amp;amp; _parabolic.IsFormed &amp;amp;&amp;amp; candle.State == CandleStates.Finished)&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;
var candle = _candleSeries.GetCandle&amp;lt;TimeFrameCandle&amp;gt;(1);&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;
_candleSeries.WhenCandlesStarted()
                         .Do(MainAlgorithm)
                         .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/25689/</id>
    <title type="text">В алгоритме SMAStrategy мы определяем время предпоследней свечи. Зачем? Только для привязки стратеги...</title>
    <published>2013-04-30T16:16:50Z</published>
    <updated>2013-04-30T16:16:50Z</updated>
    <author>
      <name>IvanB</name>
      <uri>https://stocksharp.ru/users/26984/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;UsilaDobry &lt;a href="https://stocksharp.ru/posts/m/25670/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;В алгоритме SMAStrategy мы определяем время предпоследней свечи. Зачем? Только для привязки стратегии к реальному времени?&lt;br /&gt;Поясните мне смысл этой строки &lt;br /&gt;&lt;br /&gt;var time = timeFrame.GetCandleBounds(Security).Min - timeFrame;&lt;br /&gt;&lt;/div&gt;&lt;/div&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;
timeFrame.GetCandleBounds(Security).Min&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;и затем из нее вычитаем таймфрейм свечи. чтобы получить левую временную границу предыдущей свечи.&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;UsilaDobry &lt;a href="https://stocksharp.ru/posts/m/25670/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Получается временной период как-то зависит от инструмента? У каждого инструмента свой временной период? Тогда бы реальное время было разное... Я вот не пойму какая связь между временным периодом и инструментом...&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Если взглянуть на реализацию этого метода (&lt;a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAAAbncQVTu8T5yVB2LlB47S-5KHyW8ZN6xcH4iJyKFKwUQgjwasowjZHTe_leX0HSMFrsQlNB3dBUr494VZjmWzvFGq7COYguiYWSpVlY88MJw" title="http://stocksharp.codeplex.com/SourceControl/changeset/view/23281#362188"&gt;GetCandleBounds&lt;/a&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;
public static Range&amp;lt;DateTime&amp;gt; GetCandleBounds(this TimeSpan timeFrame, Security security)
		{
			if (security == null)
				throw new ArgumentNullException(&amp;quot;security&amp;quot;);

			return timeFrame.GetCandleBounds(security.GetMarketTime(), security.ExchangeBoard);
		}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;то дело прояснится, видно, что торговый инструмент используется для получения времени торговой площадки.&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;UsilaDobry &lt;a href="https://stocksharp.ru/posts/m/25670/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Прошу пояснить первое условие в этой строке&lt;br /&gt;&lt;br /&gt;if (candle.OpenTime &amp;gt;= time &amp;amp;&amp;amp; _parabolic.IsFormed &amp;amp;&amp;amp; candle.State == CandleStates.Finished)&lt;br /&gt;&lt;br /&gt;если время открытия полученной свечи больше или равно времени предпоследней свечи... Разве может быть время открытия последней меньше предпоследней? Они поступаю в стратегию на обработку по очереди...&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Дело в том, что мы должны пропускать только последние свечи чтобы наша стратегия работала, исторические свечи, например, которые были час назад нас (например при таймфрейме 1 мин.) не устраивают, ведь, при запуске получения свечей мы начинаем получать все свечи, котрые доступны системе, в том числе и историчсески, т.е. те, которые прошли например час назад (если говорим о таймфрейме, например, в 1 минуту.).&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>