﻿<?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">Как зарегистрировать свой CandleBuilder?</title>
  <id>~/topic/15835/kak-zaregistrirovat-svoi-candlebuilder/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-03T20:43:06Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=15835" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/56148/</id>
    <title type="text">Документация давно не соответствует актуальному коду. Как это сделать можно понять только путем изуч...</title>
    <published>2021-05-07T17:08:43Z</published>
    <updated>2021-05-09T14:04:52Z</updated>
    <author>
      <name>Sprite</name>
      <uri>https://stocksharp.com/users/104190/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Документация давно не соответствует актуальному коду. Как это сделать  можно понять только путем изучения регистрации встроенных свечей в платформе.&lt;/p&gt;
&lt;p&gt;В общем мне пришлось долго возиться чтобы понять что там внутри к чему, но в итоге получил рабочий код.
Извиняюсь что выдрал из кода приложения, со спецификой не относящейся к сути вопроса, но думаю понять что нужно сделать можно.
Т.е. в сумме:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Регистрируем в платформе свои типы сообщений и маркет даты.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Регистрируем в системном конвертере сообщений (MessageConverterHelper) свои типы.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Регистрируем свой тип свечей в системном классе StockSharp.Messages.Extensions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Как правильно делать сообщения, аргументы свечей, билдер тоже нужно смотреть не в примерах, а в исходниках библиотеки.&lt;/p&gt;
&lt;p&gt;public static class ExtendedDataTypes
{
public static MarketDataTypes CandleRangeXV =&amp;gt; (MarketDataTypes)1001;
}&lt;/p&gt;
&lt;p&gt;public static class ExtendedMessageTypes
{
public static MessageTypes CandleRangeXV =&amp;gt; (MessageTypes)1001;
}
.......
private static void RegisterCandles(Connector connector)
{
RegisterCandle(
connector,
new RangeXVCandleBuilder(new InMemoryExchangeInfoProvider()),
() =&amp;gt; new RangeXVCandle(),
() =&amp;gt; new RangeXVCandleMessage(),
ExtendedMessageTypes.CandleRangeXV,
ExtendedDataTypes.CandleRangeXV,
str =&amp;gt; str.ToUnit(),
arg =&amp;gt; arg.ToString());
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; private static void RegisterCandle&amp;lt;TCandle, TMessage, Arg&amp;gt;(Connector connector,
                                                            ICandleBuilder candleBuilder,
                                                            Func&amp;lt;TCandle&amp;gt; candleCreator,
                                                            Func&amp;lt;TMessage&amp;gt; candleMessageCreator,
                                                            MessageTypes messageType,
                                                            MarketDataTypes dataType,
                                                            Func&amp;lt;string, Arg&amp;gt; argParserTo,
                                                            Func&amp;lt;Arg, string&amp;gt; argParserFrom) where TCandle : Candle where TMessage : CandleMessage
 {
     var provider = connector.Adapter.StorageProcessor.CandleBuilderProvider;
     var candleType = candleCreator().GetType();
     var candleMessageType = candleMessageCreator().GetType();
     var candleFileName = candleMessageType.Name.Remove(nameof(Message));

     provider.Register(candleBuilder);

     if (!MessageConverterHelper.AllCandleTypes.Contains(candleType))
     {
         MessageConverterHelper.RegisterCandle(candleCreator, candleMessageCreator);
         StockSharp.Messages.Extensions.RegisterCandleType(candleMessageType, messageType, dataType, candleFileName, argParserTo, argParserFrom);
     }
 }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&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/56150/</id>
    <title type="text">[quote=Greenn;56149]Благодарю за ответ) О не покажите реализацию классов: RangeXVCandleBuilder, Rang...</title>
    <published>2021-05-07T17:53:04Z</published>
    <updated>2021-05-09T14:04:49Z</updated>
    <author>
      <name>Sprite</name>
      <uri>https://stocksharp.com/users/104190/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;[quote=Greenn;56149]Благодарю за ответ) О не покажите реализацию классов: RangeXVCandleBuilder, RangeXVCandle, RangeXVCandleMessage?[/quote]
&lt;a href="https://github.com/StockSharp/StockSharp/blob/master/Algo/Candles/Compression/CandleBuilder.cs#L607" target="_blank"&gt;https://github.com/StockSharp/StockSharp/blob/master/Algo/Candles/Compression/CandleBuilder.cs#L607&lt;/a&gt;
&lt;a href="https://github.com/StockSharp/StockSharp/blob/master/Messages/CandleMessage.cs#L495" target="_blank"&gt;https://github.com/StockSharp/StockSharp/blob/master/Messages/CandleMessage.cs#L495&lt;/a&gt;
&lt;a href="https://github.com/StockSharp/StockSharp/blob/master/Algo/Candles/Candle.cs#L427" target="_blank"&gt;https://github.com/StockSharp/StockSharp/blob/master/Algo/Candles/Candle.cs#L427&lt;/a&gt;&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/56151/</id>
    <title type="text">[quote=sprite;56150][quote=Greenn;56149]Благодарю за ответ) О не покажите реализацию классов: RangeX...</title>
    <published>2021-05-07T18:01:21Z</published>
    <updated>2021-05-07T18:01:21Z</updated>
    <author>
      <name>Greenn</name>
      <uri>https://stocksharp.com/users/99877/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;[quote=sprite;56150][quote=Greenn;56149]Благодарю за ответ) О не покажите реализацию классов: RangeXVCandleBuilder, RangeXVCandle, RangeXVCandleMessage?[/quote]
https://github.com/StockSharp/StockSharp/blob/master/Algo/Candles/Compression/CandleBuilder.cs#L607
https://github.com/StockSharp/StockSharp/blob/master/Messages/CandleMessage.cs#L495
https://github.com/StockSharp/StockSharp/blob/master/Algo/Candles/Candle.cs#L427&lt;/p&gt;
&lt;p&gt;[/quote]&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.com/posts/m/56149/</id>
    <title type="text">[quote=sprite;56148]Документация давно не соответствует актуальному коду. Как это сделать можно поня...</title>
    <published>2021-05-07T17:27:24Z</published>
    <updated>2021-05-07T17:27:24Z</updated>
    <author>
      <name>Greenn</name>
      <uri>https://stocksharp.com/users/99877/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;[quote=sprite;56148]Документация давно не соответствует актуальному коду. Как это сделать  можно понять только путем изучения регистрации встроенных свечей в платформе.&lt;/p&gt;
&lt;p&gt;В общем мне пришлось долго возиться чтобы понять что там внутри к чему, но в итоге получил рабочий код.
Извиняюсь что выдрал из кода приложения, со спецификой не относящейся к сути вопроса, но думаю понять что нужно сделать можно.
Т.е. в сумме:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Регистрируем в платформе свои типы сообщений и маркет даты.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Регистрируем в системном конвертере сообщений (MessageConverterHelper) свои типы.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Регистрируем свой тип свечей в системном классе StockSharp.Messages.Extensions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Как правильно делать сообщения, аргументы свечей, билдер тоже нужно смотреть не в примерах, а в исходниках библиотеки.&lt;/p&gt;
&lt;p&gt;public static class ExtendedDataTypes
{
public static MarketDataTypes CandleRangeXV =&amp;gt; (MarketDataTypes)1001;
}&lt;/p&gt;
&lt;p&gt;public static class ExtendedMessageTypes
{
public static MessageTypes CandleRangeXV =&amp;gt; (MessageTypes)1001;
}
.......
private static void RegisterCandles(Connector connector)
{
RegisterCandle(
connector,
new RangeXVCandleBuilder(new InMemoryExchangeInfoProvider()),
() =&amp;gt; new RangeXVCandle(),
() =&amp;gt; new RangeXVCandleMessage(),
ExtendedMessageTypes.CandleRangeXV,
ExtendedDataTypes.CandleRangeXV,
str =&amp;gt; str.ToUnit(),
arg =&amp;gt; arg.ToString());
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; private static void RegisterCandle&amp;lt;TCandle, TMessage, Arg&amp;gt;(Connector connector,
                                                            ICandleBuilder candleBuilder,
                                                            Func&amp;lt;TCandle&amp;gt; candleCreator,
                                                            Func&amp;lt;TMessage&amp;gt; candleMessageCreator,
                                                            MessageTypes messageType,
                                                            MarketDataTypes dataType,
                                                            Func&amp;lt;string, Arg&amp;gt; argParserTo,
                                                            Func&amp;lt;Arg, string&amp;gt; argParserFrom) where TCandle : Candle where TMessage : CandleMessage
 {
     var provider = connector.Adapter.StorageProcessor.CandleBuilderProvider;
     var candleType = candleCreator().GetType();
     var candleMessageType = candleMessageCreator().GetType();
     var candleFileName = candleMessageType.Name.Remove(nameof(Message));

     provider.Register(candleBuilder);

     if (!MessageConverterHelper.AllCandleTypes.Contains(candleType))
     {
         MessageConverterHelper.RegisterCandle(candleCreator, candleMessageCreator);
         StockSharp.Messages.Extensions.RegisterCandleType(candleMessageType, messageType, dataType, candleFileName, argParserTo, argParserFrom);
     }
 }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Учитывая что это не задокументировано, то с каждым апдейтом надо проверять на работоспособность.[/quote]&lt;/p&gt;
&lt;p&gt;Благодарю за ответ) О не покажите реализацию классов: RangeXVCandleBuilder, RangeXVCandle, RangeXVCandleMessage?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/56146/</id>
    <title type="text">Добрый день. Как зарегистрировать свой CandleBuilder? Следующий код _connector.Adapter.CandleBuilder...</title>
    <published>2021-05-07T16:19:35Z</published>
    <updated>2021-05-07T16:19:35Z</updated>
    <author>
      <name>Greenn</name>
      <uri>https://stocksharp.com/users/99877/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день. Как зарегистрировать свой CandleBuilder? Следующий код  _connector.Adapter.CandleBuilderProvider.Register(new TickCandleBuilder()); - НЕРАБОЧИЙ
Спасибо.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>