﻿<?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/4141/pochemu-svecha-otrisovyvaetsya-mnogokratno/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-19T18:43:08Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=4141" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/28452/</id>
    <title type="text">Спасибо, я вроде более менее подразобрался. У меня не то чтобы не работало, более теоретический был ...</title>
    <published>2013-11-27T06:34:51Z</published>
    <updated>2013-11-27T06:34:51Z</updated>
    <author>
      <name>alexan3010</name>
      <uri>https://stocksharp.ru/users/49745/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Спасибо, я вроде более менее подразобрался.
У меня не то чтобы не работало, более теоретический был вопрос, что валится после вызова обработчика _candleManager.Processing += PrintCandle.
Просто если не указывать в _candleManager.Start(_series) временные рамки, то валится кроме текущих свечей еще ряд исторических свечей заданного таймфрема в обработчик. Вот это меня и смущало - валилось куча свечек разных.
Но во-первых можно указать временные рамки, во вторых я научился их запихивать в List и уже там анализировать и выводить когда мне нужно.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/28389/</id>
    <title type="text">alexan3010: Вот, код тестовый минимальный Лучше полный проект, чтобы на своем терминале проверить. Н...</title>
    <published>2013-11-24T06:56:03Z</published>
    <updated>2013-11-24T06:58:58Z</updated>
    <author>
      <name>Дюшес</name>
      <uri>https://stocksharp.ru/users/6407/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(28366)" rel="nofollow" target="_blank"&gt;alexan3010&lt;/a&gt;:&lt;/strong&gt;
Вот, код тестовый минимальный
Лучше полный проект, чтобы на своем терминале проверить.
На каких-то версиях S# работает или не работает вообще?&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/28366/</id>
    <title type="text">Вот, код тестовый минимальный, коннект, подписка и вывод. Для версии API 4.1.19, в последней что то ...</title>
    <published>2013-11-22T04:11:13Z</published>
    <updated>2013-11-22T16:09:14Z</updated>
    <author>
      <name>alexan3010</name>
      <uri>https://stocksharp.ru/users/49745/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Вот, код тестовый минимальный, коннект, подписка и вывод. Для версии API 4.1.19, в последней что то пока не разобрался в изменениях, свечки вообще не появляются.
Код внутри обработки события OnClick кнопки. На форме только одна эта кнопка и лист-бокс MyList в который все выводится.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
 var account = &amp;quot;BP****&amp;quot;;

            _trader = new SmartTrader { Login = &amp;quot;BP****&amp;quot;, Password = &amp;quot;*****&amp;quot;}; //Создаем шлюз
            this.GuiAsync(() =&amp;gt; MyList.Items.Add(&amp;quot;Производим подключение к SmartCom v3.0...&amp;quot;));
            _trader.ApplyWrapper(SmartComVersions.V3);   //тут указываем что именно третья версия.
            _trader.NewSecurities += securities =&amp;gt;
            {

                _ri = securities.FirstOrDefault(sec =&amp;gt; sec.Code == &amp;quot;RIZ3&amp;quot;);
                if (_ri != null)
                {
                    this.GuiAsync(() =&amp;gt; MyList.Items.Add(&amp;quot;RIZ3 появился.&amp;quot;));
                    _trader.RegisterSecurity(_ri);
                      _trader.RegisterTrades(_ri);    
                    _candleManager = new CandleManager(_trader);  //Заводим менеджер свечей
                    _series = new CandleSeries(typeof(TimeFrameCandle), _ri, _timeFrame);
                    _candleManager.Start(_series);
                    _trader.RegisterTrades(_ri);
                    _candleManager.Processing += (s, candle) =&amp;gt;
                    {
                        if (candle.State == CandleStates.Finished) this.GuiAsync(() =&amp;gt; MyList.Items.Add(candle.CloseTime + &amp;quot;  &amp;quot; + candle.ClosePrice));
                    };

                }

            };   //NewSecurities

          _trader.NewPortfolios += portfolios =&amp;gt;
            {
                portfolios.ForEach(_trader.RegisterPortfolio);
               if (_portfolio == null)
                {
                    // находим нужный портфель и присваиваем его переменной _portfolio
                    _portfolio = portfolios.FirstOrDefault(p =&amp;gt; p.Name == account);
                   if (_portfolio != null)
                    {
                        this.GuiAsync(() =&amp;gt; MyList.Items.Add(&amp;quot;Портфель появился. &amp;quot;+_portfolio));
                   }
                } //конец if _portfolio
            };//конец NewPortFolios
            _trader.Connected += () =&amp;gt;
            {
                this.GuiAsync(() =&amp;gt; MyList.Items.Add(&amp;quot;Подключение было произведено успешно, запускаем экспорт.&amp;quot;));
                 _trader.StartExport();   
             };
            _trader.Connect();


&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/28358/</id>
    <title type="text">alexan3010: Почему, когда с каждым тиком, когда вызывается processing и передает моему обработчику c...</title>
    <published>2013-11-21T19:47:15Z</published>
    <updated>2013-11-21T19:47:15Z</updated>
    <author>
      <name>Дюшес</name>
      <uri>https://stocksharp.ru/users/6407/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(28354)" rel="nofollow" target="_blank"&gt;alexan3010&lt;/a&gt;:&lt;/strong&gt;
Почему, когда с каждым тиком, когда вызывается processing и передает моему обработчику candle, т.е. текущую свечу, я по конструкции
if (candle.State == CandleStates.Finished)
{
this.GuiAsync(() =&amp;gt; MyList.Items.Add(candle.CloseTime + &amp;quot; &amp;quot; + candle.ClosePrice));
}&lt;/p&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/28354/</id>
    <title type="text">Дюшес, спасибо за разъяснения! Но тогда, как понимать то, что я описал в начале этой темы? Почему, к...</title>
    <published>2013-11-21T12:38:24Z</published>
    <updated>2013-11-21T12:38:24Z</updated>
    <author>
      <name>alexan3010</name>
      <uri>https://stocksharp.ru/users/49745/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Дюшес, спасибо за разъяснения!&lt;/p&gt;
&lt;p&gt;Но тогда, как понимать то, что я описал в начале этой темы?
Почему, когда с каждым тиком, когда вызывается processing и передает моему обработчику candle, т.е. текущую свечу, я по конструкции
if (candle.State == CandleStates.Finished)
{
this.GuiAsync(() =&amp;gt; MyList.Items.Add(candle.CloseTime + &amp;quot; &amp;quot; + candle.ClosePrice));
}&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/28339/</id>
    <title type="text">Дюшес: alexan3010: Как то сложно, а syncToken откуда берется? Это пример правила, для получения зако...</title>
    <published>2013-11-20T18:51:02Z</published>
    <updated>2013-11-20T18:51:02Z</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;&lt;a href="@message(28338)" rel="nofollow" target="_blank"&gt;Дюшес&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(28283)" rel="nofollow" target="_blank"&gt;alexan3010&lt;/a&gt;:&lt;/strong&gt;
Как то сложно, а syncToken откуда берется?
Это пример правила, для получения законченных свечек, если вы пользуетесь стратегиями.
&lt;a href="http://stocksharp.com/doc/html/2c3a0d3a-6e89-42a1-a158-9a258e0a62e1.htm"&gt;http://stocksharp.com/doc/html/2c3a0d3a-6e89-42a1-a158-9a258e0a62e1.htm&lt;/a&gt;
synctoken - это new SyncObject(), примерно то же, что и new object(), т.е. объект синхронизации.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;На 100% не уверен, но с 4.2 скорее всего этот метод более не нужен. Причина - события ITrader вызываются из одного потока по умолчанию. Если это не менять, то и синхронизация не нужна.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/28338/</id>
    <title type="text">alexan3010: Как то сложно, а syncToken откуда берется? Это пример правила, для получения законченных...</title>
    <published>2013-11-20T18:44:22Z</published>
    <updated>2013-11-20T18:44:22Z</updated>
    <author>
      <name>Дюшес</name>
      <uri>https://stocksharp.ru/users/6407/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(28283)" rel="nofollow" target="_blank"&gt;alexan3010&lt;/a&gt;:&lt;/strong&gt;
Как то сложно, а syncToken откуда берется?
Это пример правила, для получения законченных свечек, если вы пользуетесь стратегиями.
&lt;a href="http://stocksharp.com/doc/html/2c3a0d3a-6e89-42a1-a158-9a258e0a62e1.htm"&gt;http://stocksharp.com/doc/html/2c3a0d3a-6e89-42a1-a158-9a258e0a62e1.htm&lt;/a&gt;
synctoken - это new SyncObject(), примерно то же, что и new object(), т.е. объект синхронизации.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(28283)" rel="nofollow" target="_blank"&gt;alexan3010&lt;/a&gt;:&lt;/strong&gt;
А если вам не сложно, можете пояснить физику процесса, что происходит при вызове
_candleManager.Processing += PrintCandle;  ?&lt;/p&gt;
&lt;p&gt;Из мануалов - это подписывание на событие появления нового элемента для обработки, который мы передаем в процедуру PrintCandle,
где и обрабатываем.
А что туда фактически передается и когда во времени?
Правильно ли я понимаю, что любое изменение состояния свечи (по сути любая сделка) вызывает это событие?
Если так, то как мне в процедуре обработку написать так, чтобы я видел скажем Close последних N полных завершенных свечей, а текущую - не видел, чтобы она появлялась только в момент своего завершения.
CandleManager формирует из тиков свечки заданного таймфрейма, с каждым тиком вызывается событие processing и передает вашему обработчику объект candle, т.е. текущую свечу. Если нужно ловить окончание свечи, то проверяете на candle.State == CandleStates.Finished. Получить n-последних свечек можно через метод _series.GetCandles, например так:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
var candles = _series.GetCandles&amp;lt;TimeFrameCandle&amp;gt;(3).Where(c =&amp;gt; c.State == CandleStates.Finished);

&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/28283/</id>
    <title type="text">Как то сложно, а syncToken откуда берется? А если вам не сложно, можете пояснить физику процесса, чт...</title>
    <published>2013-11-18T17:23:14Z</published>
    <updated>2013-11-18T18:13:10Z</updated>
    <author>
      <name>alexan3010</name>
      <uri>https://stocksharp.ru/users/49745/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Как то сложно, а syncToken откуда берется?&lt;/p&gt;
&lt;p&gt;А если вам не сложно, можете пояснить физику процесса, что происходит при вызове
_candleManager.Processing += PrintCandle;  ?&lt;/p&gt;
&lt;p&gt;Из мануалов - это подписывание на событие появления нового элемента для обработки, который мы передаем в процедуру PrintCandle,
где и обрабатываем.
А что туда фактически передается и когда во времени?
Правильно ли я понимаю, что любое изменение состояния свечи (по сути любая сделка) вызывает это событие?
Если так, то как мне в процедуре обработку написать так, чтобы я видел скажем Close последних N полных завершенных свечей, а текущую - не видел, чтобы она появлялась только в момент своего завершения.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/28251/</id>
    <title type="text">alexan3010: нужно как то в MyList выводить только уникальную новую свечку после ее формирования, то ...</title>
    <published>2013-11-16T09:38:05Z</published>
    <updated>2013-11-16T09:38:05Z</updated>
    <author>
      <name>Дюшес</name>
      <uri>https://stocksharp.ru/users/6407/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(28236)" rel="nofollow" target="_blank"&gt;alexan3010&lt;/a&gt;:&lt;/strong&gt;
нужно как то в MyList выводить только уникальную новую свечку после ее формирования, то есть один раз в TimeFrame.
Правило WhenCandlesFinished не подходит?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;
            _series
                .WhenCandlesFinished()
                .Do(candle =&amp;gt;
                {
                })
                .Sync(syncToken)
                .Apply(this);


&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/28236/</id>
    <title type="text">Ok, спрошу по другому. PrintCandle как я понял вызывается несколько раз в секунду конструкцией _cand...</title>
    <published>2013-11-15T12:55:34Z</published>
    <updated>2013-11-15T12:55:34Z</updated>
    <author>
      <name>alexan3010</name>
      <uri>https://stocksharp.ru/users/49745/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Ok, спрошу по другому.
PrintCandle как я понял вызывается несколько раз в секунду конструкцией _candleManager.Processing += PrintCandle;&lt;/p&gt;
&lt;p&gt;Соответственно туда передаются все полученные свечки, как я понял и новые и исторические.&lt;/p&gt;
&lt;p&gt;Мне нужно как то в MyList выводить только уникальную новую свечку после ее формирования, то есть один раз в TimeFrame.&lt;/p&gt;
&lt;p&gt;Коннектор SmartCom если что.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/28209/</id>
    <title type="text">Пытаюсь работать со свечками. Рисовать на графике я их не хочу, просто хочу например выводить время ...</title>
    <published>2013-11-14T14:36:29Z</published>
    <updated>2013-11-14T14:36:29Z</updated>
    <author>
      <name>alexan3010</name>
      <uri>https://stocksharp.ru/users/49745/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;p&gt;Пытаюсь работать со свечками. Рисовать на графике я их не хочу,
просто хочу например выводить время закрытия законченной свечи тайм-фрейма 1 мин в ListBox,
то есть например чтобы раз в минуту появлялась запись о сформировавшейся свече.
Для этого я делаю  _candleManager.Processing += PrintCandle;&lt;/p&gt;
&lt;p&gt;И в процедуре PrintCandle у меня только это:&lt;/p&gt;
&lt;p&gt;if (candle.State == CandleStates.Finished)
{
this.GuiAsync(() =&amp;gt; MyList.Items.Add(candle.CloseTime + &amp;quot;  &amp;quot; + candle.ClosePrice));
}&lt;/p&gt;
&lt;p&gt;При этом в ListBox валятся свечки, во первых исторические (так как они подпадают под условие
законченности), а также текущая свеча выводится многократно с предыдущей, типа такого:&lt;/p&gt;
&lt;p&gt;14.11.2013 18:31:00  143520
14.11.2013 18:32:00  143460
14.11.2013 18:31:00  143520
14.11.2013 18:32:00  143460
14.11.2013 18:31:00  143520
14.11.2013 18:32:00  143460
14.11.2013 18:31:00  143520
14.11.2013 18:32:00  143460&lt;/p&gt;
&lt;p&gt;Подскажите, что я делаю не так, как сделать, чтобы видеть только одну запись раз в минуту по окончанию свечи и не грузить исторические, ну или грузить заданное их количество.&lt;/p&gt;
&lt;p&gt;Спасибо.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>