Algorithmischer Handel für .NET und Python✦86+ Konnektoren · Börsen · Broker · Krypto✦S#.Designer · Backtest · optimieren · live gehen✦Eine Community von 31,449+ Tradern und Entwicklern✦Algorithmischer Handel für .NET und Python✦86+ Konnektoren · Börsen · Broker · Krypto✦S#.Designer · Backtest · optimieren · live gehen✦Eine Community von 31,449+ Tradern und Entwicklern✦
Добрый день. Как зарегистрировать свой CandleBuilder? Следующий код _connector.Adapter.CandleBuilderProvider.Register(new TickCandleBuilder()); - НЕРАБОЧИЙ
Спасибо.
Kommentare (4)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Документация давно не соответствует актуальному коду. Как это сделать можно понять только путем изучения регистрации встроенных свечей в платформе.
В общем мне пришлось долго возиться чтобы понять что там внутри к чему, но в итоге получил рабочий код.
Извиняюсь что выдрал из кода приложения, со спецификой не относящейся к сути вопроса, но думаю понять что нужно сделать можно.
Т.е. в сумме:
Регистрируем в платформе свои типы сообщений и маркет даты.
Регистрируем в системном конвертере сообщений (MessageConverterHelper) свои типы.
Регистрируем свой тип свечей в системном классе StockSharp.Messages.Extensions
Как правильно делать сообщения, аргументы свечей, билдер тоже нужно смотреть не в примерах, а в исходниках библиотеки.
public static class ExtendedDataTypes
{
public static MarketDataTypes CandleRangeXV => (MarketDataTypes)1001;
}
public static class ExtendedMessageTypes
{
public static MessageTypes CandleRangeXV => (MessageTypes)1001;
}
.......
private static void RegisterCandles(Connector connector)
{
RegisterCandle(
connector,
new RangeXVCandleBuilder(new InMemoryExchangeInfoProvider()),
() => new RangeXVCandle(),
() => new RangeXVCandleMessage(),
ExtendedMessageTypes.CandleRangeXV,
ExtendedDataTypes.CandleRangeXV,
str => str.ToUnit(),
arg => arg.ToString());
}
private static void RegisterCandle<TCandle, TMessage, Arg>(Connector connector,
ICandleBuilder candleBuilder,
Func<TCandle> candleCreator,
Func<TMessage> candleMessageCreator,
MessageTypes messageType,
MarketDataTypes dataType,
Func<string, Arg> argParserTo,
Func<Arg, string> 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);
}
}
}
Учитывая что это не задокументировано, то с каждым апдейтом надо проверять на работоспособность.
sprite:
Документация давно не соответствует актуальному коду. Как это сделать можно понять только путем изучения регистрации встроенных свечей в платформе.
В общем мне пришлось долго возиться чтобы понять что там внутри к чему, но в итоге получил рабочий код.
Извиняюсь что выдрал из кода приложения, со спецификой не относящейся к сути вопроса, но думаю понять что нужно сделать можно.
Т.е. в сумме:
Регистрируем в платформе свои типы сообщений и маркет даты.
Регистрируем в системном конвертере сообщений (MessageConverterHelper) свои типы.
Регистрируем свой тип свечей в системном классе StockSharp.Messages.Extensions
Как правильно делать сообщения, аргументы свечей, билдер тоже нужно смотреть не в примерах, а в исходниках библиотеки.
public static class ExtendedDataTypes
{
public static MarketDataTypes CandleRangeXV => (MarketDataTypes)1001;
}
public static class ExtendedMessageTypes
{
public static MessageTypes CandleRangeXV => (MessageTypes)1001;
}
.......
private static void RegisterCandles(Connector connector)
{
RegisterCandle(
connector,
new RangeXVCandleBuilder(new InMemoryExchangeInfoProvider()),
() => new RangeXVCandle(),
() => new RangeXVCandleMessage(),
ExtendedMessageTypes.CandleRangeXV,
ExtendedDataTypes.CandleRangeXV,
str => str.ToUnit(),
arg => arg.ToString());
}
private static void RegisterCandle<TCandle, TMessage, Arg>(Connector connector,
ICandleBuilder candleBuilder,
Func<TCandle> candleCreator,
Func<TMessage> candleMessageCreator,
MessageTypes messageType,
MarketDataTypes dataType,
Func<string, Arg> argParserTo,
Func<Arg, string> 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);
}
}
}
Учитывая что это не задокументировано, то с каждым апдейтом надо проверять на работоспособность.
Благодарю за ответ) О не покажите реализацию классов: RangeXVCandleBuilder, RangeXVCandle, RangeXVCandleMessage?
Супер!!!! Спасибо Вам ОГРОМНЕЙШЕЕ. Буду разбираться
Wir verwenden Cookies, um die beste Erfahrung auf unserer Website zu gewährleisten. Durch die weitere Nutzung unserer Seite stimmen Sie der Verwendung von Cookies zu.
Kommentare (4)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Документация давно не соответствует актуальному коду. Как это сделать можно понять только путем изучения регистрации встроенных свечей в платформе.
В общем мне пришлось долго возиться чтобы понять что там внутри к чему, но в итоге получил рабочий код. Извиняюсь что выдрал из кода приложения, со спецификой не относящейся к сути вопроса, но думаю понять что нужно сделать можно. Т.е. в сумме:
Регистрируем в платформе свои типы сообщений и маркет даты.
Регистрируем в системном конвертере сообщений (MessageConverterHelper) свои типы.
Регистрируем свой тип свечей в системном классе StockSharp.Messages.Extensions
Как правильно делать сообщения, аргументы свечей, билдер тоже нужно смотреть не в примерах, а в исходниках библиотеки.
public static class ExtendedDataTypes { public static MarketDataTypes CandleRangeXV => (MarketDataTypes)1001; }
public static class ExtendedMessageTypes { public static MessageTypes CandleRangeXV => (MessageTypes)1001; } ....... private static void RegisterCandles(Connector connector) { RegisterCandle( connector, new RangeXVCandleBuilder(new InMemoryExchangeInfoProvider()), () => new RangeXVCandle(), () => new RangeXVCandleMessage(), ExtendedMessageTypes.CandleRangeXV, ExtendedDataTypes.CandleRangeXV, str => str.ToUnit(), arg => arg.ToString()); }
}
Учитывая что это не задокументировано, то с каждым апдейтом надо проверять на работоспособность.
Благодарю за ответ) О не покажите реализацию классов: RangeXVCandleBuilder, RangeXVCandle, RangeXVCandleMessage?
Супер!!!! Спасибо Вам ОГРОМНЕЙШЕЕ. Буду разбираться