﻿<?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-04-07T20:53:37Z</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;br /&gt;У меня не то чтобы не работало, более теоретический был вопрос, что валится после вызова обработчика _candleManager.Processing += PrintCandle.&lt;br /&gt;Просто если не указывать в _candleManager.Start(_series) временные рамки, то валится кроме текущих свечей еще ряд исторических свечей заданного таймфрема в обработчик. Вот это меня и смущало - валилось куча свечек разных.&lt;br /&gt;Но во-первых можно указать временные рамки, во вторых я научился их запихивать в List и уже там анализировать и выводить когда мне нужно.&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/28389/</id>
    <title type="text"> Вот, код тестовый минимальный Лучше полный проект, чтобы на своем терминале проверить. На каких-то ...</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;div class="quote"&gt;&lt;span class="quotetitle"&gt;alexan3010 &lt;a href="https://stocksharp.ru/posts/m/28366/" 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;br /&gt;На каких-то версиях S# работает или не работает вообще?</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">Вот, код тестовый минимальный, коннект, подписка и вывод. Для версии API 4.1.19, в последней что то пока не разобрался в изменениях, свечки вообще не появляются.&lt;br /&gt;Код внутри обработки события OnClick кнопки. На форме только одна эта кнопка и лист-бокс MyList в который все выводится.&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 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;/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/28358/</id>
    <title type="text"> Почему, когда с каждым тиком, когда вызывается processing и передает моему обработчику candle, т.е....</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;div class="quote"&gt;&lt;span class="quotetitle"&gt;alexan3010 &lt;a href="https://stocksharp.ru/posts/m/28354/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Почему, когда с каждым тиком, когда вызывается processing и передает моему обработчику candle, т.е. текущую свечу, я по конструкции &lt;br /&gt;if (candle.State == CandleStates.Finished)&lt;br /&gt;{&lt;br /&gt;this.GuiAsync(() =&amp;gt; MyList.Items.Add(candle.CloseTime + &amp;quot; &amp;quot; + candle.ClosePrice));&lt;br /&gt;}&lt;br /&gt;&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/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;br /&gt;&lt;br /&gt;Но тогда, как понимать то, что я описал в начале этой темы?&lt;br /&gt;Почему, когда с каждым тиком, когда вызывается processing и передает моему обработчику candle, т.е. текущую свечу, я по конструкции &lt;br /&gt;if (candle.State == CandleStates.Finished)&lt;br /&gt;{&lt;br /&gt;this.GuiAsync(() =&amp;gt; MyList.Items.Add(candle.CloseTime + &amp;quot; &amp;quot; + candle.ClosePrice));&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/28339/</id>
    <title type="text"> Как то сложно, а 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;div class="quote"&gt;&lt;span class="quotetitle"&gt;Дюшес &lt;a href="https://stocksharp.ru/posts/m/28338/" 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;alexan3010 &lt;a href="https://stocksharp.ru/posts/m/28283/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Как то сложно, а syncToken откуда берется?&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Это пример правила, для получения законченных свечек, если вы пользуетесь стратегиями.&lt;br /&gt;&lt;a href="http://stocksharp.com/doc/html/2c3a0d3a-6e89-42a1-a158-9a258e0a62e1.htm" title="http://stocksharp.com/doc/html/2c3a0d3a-6e89-42a1-a158-9a258e0a62e1.htm"&gt;http://stocksharp.com/doc/html/...a1-a158-9a258e0a62e1.htm&lt;/a&gt;&lt;br /&gt;synctoken - это new SyncObject(), примерно то же, что и new object(), т.е. объект синхронизации.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;На 100% не уверен, но с 4.2 скорее всего этот метод более не нужен. Причина - события ITrader вызываются из одного потока по умолчанию. Если это не менять, то и синхронизация не нужна.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/28338/</id>
    <title type="text"> Как то сложно, а 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;div class="quote"&gt;&lt;span class="quotetitle"&gt;alexan3010 &lt;a href="https://stocksharp.ru/posts/m/28283/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Как то сложно, а syncToken откуда берется?&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Это пример правила, для получения законченных свечек, если вы пользуетесь стратегиями.&lt;br /&gt;&lt;a href="http://stocksharp.com/doc/html/2c3a0d3a-6e89-42a1-a158-9a258e0a62e1.htm" title="http://stocksharp.com/doc/html/2c3a0d3a-6e89-42a1-a158-9a258e0a62e1.htm"&gt;http://stocksharp.com/doc/html/...a1-a158-9a258e0a62e1.htm&lt;/a&gt;&lt;br /&gt;synctoken - это new SyncObject(), примерно то же, что и new object(), т.е. объект синхронизации.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;alexan3010 &lt;a href="https://stocksharp.ru/posts/m/28283/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;А если вам не сложно, можете пояснить физику процесса, что происходит при вызове&lt;br /&gt;_candleManager.Processing += PrintCandle;  ?&lt;br /&gt;&lt;br /&gt;Из мануалов - это подписывание на событие появления нового элемента для обработки, который мы передаем в процедуру PrintCandle,&lt;br /&gt;где и обрабатываем. &lt;br /&gt;А что туда фактически передается и когда во времени? &lt;br /&gt;Правильно ли я понимаю, что любое изменение состояния свечи (по сути любая сделка) вызывает это событие?&lt;br /&gt;Если так, то как мне в процедуре обработку написать так, чтобы я видел скажем Close последних N полных завершенных свечей, а текущую - не видел, чтобы она появлялась только в момент своего завершения.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;CandleManager формирует из тиков свечки заданного таймфрейма, с каждым тиком вызывается событие processing и передает вашему обработчику объект candle, т.е. текущую свечу. Если нужно ловить окончание свечи, то проверяете на candle.State == CandleStates.Finished. Получить n-последних свечек можно через метод _series.GetCandles, например так:&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 candles = _series.GetCandles&amp;lt;TimeFrameCandle&amp;gt;(3).Where(c =&amp;gt; c.State == CandleStates.Finished);
&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/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">Как то сложно, а syncToken откуда берется?&lt;br /&gt;&lt;br /&gt;А если вам не сложно, можете пояснить физику процесса, что происходит при вызове&lt;br /&gt;_candleManager.Processing += PrintCandle;  ?&lt;br /&gt;&lt;br /&gt;Из мануалов - это подписывание на событие появления нового элемента для обработки, который мы передаем в процедуру PrintCandle,&lt;br /&gt;где и обрабатываем. &lt;br /&gt;А что туда фактически передается и когда во времени? &lt;br /&gt;Правильно ли я понимаю, что любое изменение состояния свечи (по сути любая сделка) вызывает это событие?&lt;br /&gt;Если так, то как мне в процедуре обработку написать так, чтобы я видел скажем Close последних N полных завершенных свечей, а текущую - не видел, чтобы она появлялась только в момент своего завершения.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/28251/</id>
    <title type="text"> нужно как то в 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;div class="quote"&gt;&lt;span class="quotetitle"&gt;alexan3010 &lt;a href="https://stocksharp.ru/posts/m/28236/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;нужно как то в MyList выводить только уникальную новую свечку после ее формирования, то есть один раз в TimeFrame.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Правило WhenCandlesFinished не подходит?&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(candle =&amp;gt;
                {
                })
                .Sync(syncToken)
                .Apply(this);

&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/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">Ok, спрошу по другому.&lt;br /&gt;PrintCandle как я понял вызывается несколько раз в секунду конструкцией _candleManager.Processing += PrintCandle;&lt;br /&gt;&lt;br /&gt;Соответственно туда передаются все полученные свечки, как я понял и новые и исторические.&lt;br /&gt;&lt;br /&gt;Мне нужно как то в MyList выводить только уникальную новую свечку после ее формирования, то есть один раз в TimeFrame.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Коннектор SmartCom если что.</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;br /&gt;просто хочу например выводить время закрытия законченной свечи тайм-фрейма 1 мин в ListBox,&lt;br /&gt;то есть например чтобы раз в минуту появлялась запись о сформировавшейся свече.&lt;br /&gt;Для этого я делаю  _candleManager.Processing += PrintCandle;&lt;br /&gt;&lt;br /&gt;И в процедуре PrintCandle у меня только это:&lt;br /&gt;&lt;br /&gt;if (candle.State == CandleStates.Finished)&lt;br /&gt;    {&lt;br /&gt;     this.GuiAsync(() =&amp;gt; MyList.Items.Add(candle.CloseTime + &amp;quot;  &amp;quot; + candle.ClosePrice));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;При этом в ListBox валятся свечки, во первых исторические (так как они подпадают под условие &lt;br /&gt;законченности), а также текущая свеча выводится многократно с предыдущей, типа такого:&lt;br /&gt;&lt;br /&gt;14.11.2013 18:31:00  143520&lt;br /&gt;14.11.2013 18:32:00  143460&lt;br /&gt;14.11.2013 18:31:00  143520&lt;br /&gt;14.11.2013 18:32:00  143460&lt;br /&gt;14.11.2013 18:31:00  143520&lt;br /&gt;14.11.2013 18:32:00  143460&lt;br /&gt;14.11.2013 18:31:00  143520&lt;br /&gt;14.11.2013 18:32:00  143460&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>
</feed>