﻿<?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">CandleManager и последняя свечка в сессии</title>
  <id>~/topic/1544/candlemanager-i-poslednyaya-svechka-v-sessii/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-17T10:03:22Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=1544" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/7860/</id>
    <title type="text">esper: Alexander: Есть вариант сделать что для последней свечки будет подниматься событие CandlesFin...</title>
    <published>2011-05-03T16:30:43Z</published>
    <updated>2011-05-03T16:30:59Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.com/users/2826/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7783)" rel="nofollow" target="_blank"&gt;esper&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7782)" rel="nofollow" target="_blank"&gt;Alexander&lt;/a&gt;:&lt;/strong&gt;
Есть вариант сделать что для последней свечки будет подниматься событие CandlesFinished если Trader.MarketTime станет больше чем время завершения сессии - т.е. если Trader.MarketTime &amp;gt;= 23.50 для фортса и &amp;gt;= 18.45 для ММВБ.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Это было бы замечательно[smile]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Фикса в 3.1 не будет.
Вариант локального решения - отнаследуйтесь от TimeFrameCandleFactory и переопределите IsCandleFinished с проверкой что время закончилось:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;			return trade.Time &amp;lt; currentCandle.Time || (currentCandle.Time + token.TypedArg) &amp;lt;= trade.Time || trade.Security.Trader.MarketTime.TimeOfDay &amp;gt;= trade.Security.Exchange.WorkingTime.Times.Last().Max;

&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/7783/</id>
    <title type="text">Alexander: Есть вариант сделать что для последней свечки будет подниматься событие CandlesFinished е...</title>
    <published>2011-04-29T12:09:37Z</published>
    <updated>2011-04-29T12:09:37Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7782)" rel="nofollow" target="_blank"&gt;Alexander&lt;/a&gt;:&lt;/strong&gt;
Есть вариант сделать что для последней свечки будет подниматься событие CandlesFinished если Trader.MarketTime станет больше чем время завершения сессии - т.е. если Trader.MarketTime &amp;gt;= 23.50 для фортса и &amp;gt;= 18.45 для ММВБ.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Это было бы замечательно[smile]&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/7782/</id>
    <title type="text">esper: Mikhail Sukhov: Оно и вызывается. Просто нужно понять схему алгоритма. Если он у вас другой, ...</title>
    <published>2011-04-29T10:53:50Z</published>
    <updated>2011-04-29T10:53:50Z</updated>
    <author>
      <name>Alexander</name>
      <uri>https://stocksharp.com/users/2826/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7781)" rel="nofollow" target="_blank"&gt;esper&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7780)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Оно и вызывается. Просто нужно понять схему алгоритма. Если он у вас другой, то можете всегда сделать свой собственный CandleFactory.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Алгоритм простой, после &amp;quot;завершения&amp;quot; свечки мне необходимо ее сохранить. CandlesFinished же не вызывается для последней свечки, так как, если я правильно понял, после нее свечек в этой сессии не будет.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Есть вариант сделать что для последней свечки будет подниматься событие CandlesFinished если Trader.MarketTime станет больше чем время завершения сессии - т.е. если Trader.MarketTime &amp;gt;= 23.50 для фортса и &amp;gt;= 18.45 для ММВБ.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/7781/</id>
    <title type="text">Mikhail Sukhov: Оно и вызывается. Просто нужно понять схему алгоритма. Если он у вас другой, то може...</title>
    <published>2011-04-29T10:43:46Z</published>
    <updated>2011-04-29T10:43:46Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7780)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Оно и вызывается. Просто нужно понять схему алгоритма. Если он у вас другой, то можете всегда сделать свой собственный CandleFactory.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Алгоритм простой, после &amp;quot;завершения&amp;quot; свечки мне необходимо ее сохранить. CandlesFinished же не вызывается для последней свечки, так как, если я правильно понял, после нее свечек в этой сессии не будет.&lt;/p&gt;
&lt;p&gt;Можно записывать все скопом после завершения сессии, но тогда усложнится момент запуска стратегии, так как сейчас я просто поднимаю нужное кол-во свечек из базы (там есть все сформировавшиеся свечки) и запускаю стратегию, а придется комбинировать получение данных из базы и CandleManager.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/7780/</id>
    <title type="text">esper: Mikhail Sukhov: Пишите по окончанию сессии все свечки один раз. Спасибо за ответы, буду думат...</title>
    <published>2011-04-29T10:34:31Z</published>
    <updated>2011-04-29T10:34:31Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7779)" rel="nofollow" target="_blank"&gt;esper&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7778)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Пишите по окончанию сессии все свечки один раз.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Спасибо за ответы, буду думать дальше, хотя было бы классно, если для последней свечки это событие тоже вызывалось.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Оно и вызывается. Просто нужно понять схему алгоритма. Если он у вас другой, то можете всегда сделать свой собственный CandleFactory.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/7779/</id>
    <title type="text">Mikhail Sukhov: Пишите по окончанию сессии все свечки один раз. Спасибо за ответы, буду думать дальш...</title>
    <published>2011-04-29T10:28:26Z</published>
    <updated>2011-04-29T10:28:26Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7778)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Пишите по окончанию сессии все свечки один раз.&lt;/p&gt;
&lt;/blockquote&gt;
&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/7778/</id>
    <title type="text">esper: Т.е. придется обрабатывать не Finished, а New и Changed? Не хотелось бы слишком часто в базу ...</title>
    <published>2011-04-29T09:58:24Z</published>
    <updated>2011-04-29T09:58:24Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7777)" rel="nofollow" target="_blank"&gt;esper&lt;/a&gt;:&lt;/strong&gt;
Т.е. придется обрабатывать не Finished, а New и Changed? Не хотелось бы слишком часто в базу писать.&lt;/p&gt;
&lt;/blockquote&gt;
&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/7777/</id>
    <title type="text">Mikhail Sukhov: esper: Mikhail Sukhov: Увидел кажется проблему... Событие CandlesFinished. Оно тольк...</title>
    <published>2011-04-29T09:43:56Z</published>
    <updated>2011-04-29T09:43:56Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7776)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7775)" rel="nofollow" target="_blank"&gt;esper&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7768)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Увидел кажется проблему... Событие CandlesFinished. Оно только для сформированных свечек. Видимо последние находятся еще в стадии формирования.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Программу с роботом закрываю через пару часов после завершения торгов, данные уже давно не поступают...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Дело в том, что свечка заканчивает формироваться не по таймеру, а по поступлению данных (чтобы избежать проблем с лагами в сети брокера, которые есть чуть ли не всегда). Поэтому свечка закончит формироваться тогда, когда появиться новая свечка.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Т.е. придется обрабатывать не Finished, а New и Changed? Не хотелось бы слишком часто в базу писать.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/7776/</id>
    <title type="text">esper: Mikhail Sukhov: Увидел кажется проблему... Событие CandlesFinished. Оно только для сформирова...</title>
    <published>2011-04-29T09:32:59Z</published>
    <updated>2011-04-29T09:32:59Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7775)" rel="nofollow" target="_blank"&gt;esper&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7768)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Увидел кажется проблему... Событие CandlesFinished. Оно только для сформированных свечек. Видимо последние находятся еще в стадии формирования.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Программу с роботом закрываю через пару часов после завершения торгов, данные уже давно не поступают...&lt;/p&gt;
&lt;/blockquote&gt;
&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/7775/</id>
    <title type="text">Mikhail Sukhov: Увидел кажется проблему... Событие CandlesFinished. Оно только для сформированных св...</title>
    <published>2011-04-29T09:25:37Z</published>
    <updated>2011-04-29T09:25:37Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7768)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Увидел кажется проблему... Событие CandlesFinished. Оно только для сформированных свечек. Видимо последние находятся еще в стадии формирования.&lt;/p&gt;
&lt;/blockquote&gt;
&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/7768/</id>
    <title type="text">Увидел кажется проблему... Событие CandlesFinished. Оно только для сформированных свечек. Видимо пос...</title>
    <published>2011-04-29T08:28:44Z</published>
    <updated>2011-04-29T08:28:44Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Увидел кажется проблему... Событие CandlesFinished. Оно только для сформированных свечек. Видимо последние находятся еще в стадии формирования.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/7761/</id>
    <title type="text">Mikhail Sukhov: Как вы проверяете? Данные записываются в базу SQL Compact, далее, после сессии, смот...</title>
    <published>2011-04-29T02:53:54Z</published>
    <updated>2011-04-29T02:53:54Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="@message(7757)" rel="nofollow" target="_blank"&gt;Mikhail Sukhov&lt;/a&gt;:&lt;/strong&gt;
Как вы проверяете?
Данные записываются в базу SQL Compact, далее, после сессии, смотрю данные в ней. По прошествии двух сессии а базе нет последних свечек.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Для работы с базой использую EF. Обработчик candleManager_CandlesFinished примерно следующий:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
void candleManager_CandlesFinished(CandleToken arg1, IEnumerable&amp;lt;Entities.Candle&amp;gt; arg2)
{
    foreach (var c in arg2)
    {
        var candle = context.Candles.FirstOrDefault(e =&amp;gt; e.Security.Code == c.Security.Code &amp;amp;&amp;amp; e.Time == c.Time);
        if (candle == null)
        {
            candle = new Entities.TimeFrameCandle()
            {
                Security = c.Security,
                Time = c.Time,
                OpenPrice = c.OpenPrice,
                HighPrice = c.HighPrice,
                LowPrice = c.LowPrice,
                ClosePrice = c.ClosePrice,
                TotalVolume = c.TotalVolume,
            };
            context.Add(candle);
        }

    }
    context.SaveChanges();
}
&lt;/code&gt;&lt;/pre&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/7757/</id>
    <title type="text">Как вы проверяете? </title>
    <published>2011-04-28T17:39:05Z</published>
    <updated>2011-04-28T17:39:05Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.com/users/201/</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/7711/</id>
    <title type="text">Добрый день. При реализации стратегии решил сохранять свечки в локальной базе. Для получения свечек ...</title>
    <published>2011-04-27T08:35:13Z</published>
    <updated>2011-04-27T08:35:13Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.com/users/5990/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день.&lt;/p&gt;
&lt;p&gt;При реализации стратегии решил сохранять свечки в локальной базе. Для получения свечек подписываюсь на событие СandleManager.CandlesFinished в событии Trader.Connected:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
candleManager = new CandleManager(trader);
candleManager.CandlesFinished += candleManager_CandlesFinished;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;в событии Trader.NewSecurities регистрирую какие свечки получать:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
sec = obj.FirstOrDefault(e =&amp;gt; e.Code == &amp;quot;GAZP&amp;quot;);
if (sec != null)
{
   if (!candleManager.IsTimeFrameCandlesRegistered(sec, timeFrame))
   {
       // регистрируем наш тайм-фрейм
       candleManager.RegisterTimeFrameCandles(sec, timeFrame);
   }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Таймфрейм равен 5 минутам. Данные приходят, за исключением последней свечки. Т.е. время первой свечки 10:30:00, а время последней 18:35:00, хотя должно быть 18:40:00?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>