Добрый вечер. Пример SampleHistoryTesting и github я посмотрел прежде чем писать сообщение выше.
После вашего ответа перепроверил еще раз - но каких-либо существенных изменений у вас в примере не нашел, кроме:
1) Подписка происходит теперь по событию подключения
2) Подписка происходит для всех инструментов сразу - в метод RegisterHistorySource() первым аргументом вы передаете null.
У меня в коннекторе HistoryEmulationConnector используется не один инструмент (у каждого своя стратегия). Плюс ко всему, каждый инструмент может содержать несколько таймфреймов.
Поэтому ранее я метод RegisterHistorySource() вызывал для всех таймфреймов для каждого инструмента.
Попробовал подписаться по событию подключения - тщетно. Поэтому непонятно даже, куда копать :( Танцевал с бубном долго.
Псевдокод получается такой:
1) Для каждого таймфрейма каждого инструмента подгружаю из СУБД свечи в коллекцию таймфрейма
Codepublic List<Candle> candles_sourse;
В классе каждого таймфрейма реализован метод getCandles() :
Codepublic IEnumerable<Message> getCandles(DateTimeOffset d)
{
return candles_sourse.Where(
c => c.OpenTime.Date == d.Date
).Select(t => t.ToMessage());
}
2) В HistoryEmulationConnector подписываюсь на события изменения состояния, успешного подключения и получения инструментов:
CodeStateChanged += AHistoryEmulationConnector_StateChanged;
NewSecurity += AHistoryEmulationConnector_NewSecurity;
Connected += AHistoryEmulationConnector_Connected;
3) Событие успешного подключения AHistoryEmulationConnector_Connected() :
Codeprivate void AHistoryEmulationConnector_Connected()
{
для каждого инструмента security из всех инструментов
{
для каждого таймфрейма t из всех таймфремов инструмента
{
RegisterHistorySource(security, MarketDataTypes.CandleTimeFrame, TimeSpan.FromMinutes(t.period), t.getCandles);
}
}
}
4) Событие получения инструмента AHistoryEmulationConnector_NewSecurity() :
Code
4.1. Создаю стратегию для пришедшего инструмента
4.2. Если пришли все имеющиеся инструменты:
-> Запускаю все стратегии методом strategy.Start()
-> Вызываю метод Start() для HistoryEmulationConnector
Вопросы:
1) Правильная ли логика и порядок действий?
2) Прежде, чем собирать сжатый пример по данной ситуации (например, их двух инструментов в одном коннекторе), можете, пожалуйста, написать более подробно,
что вы поменяли в плане подписок на внешние источники в версии 4.4.7. Попробую сам догадаться, т.к. в примере не совсем ясно, как реализованы методы getCandles()
у источников Финам и Яху.
Спасибо!