Здравствуйте.
Скачал при помощи гидры свечки 5-минутки и часовики. Попробовал загрузить разными HistoryEmulationConnector в разные графики - все работает. Теперь пробую через один HistoryEmulationConnector загрузить оба набора свечей. Пробовал и через один CandleManager и через разные, но подключенные к одному HistoryEmulationConnector. Выскакивает одна и та-же ошибка - "An item with the same key has already been added." Ругается на выделенную строку. Причем в Series у СandleManager этот _series60m успевает добавиться.
Хочется понять я странного хочу или есть возможность синхронной симуляции двух разных TimeFrameCandle для одного инструмента. Заранее спасибо за ответ.
connector.NewSecurities += securities =>
{
if (securities.All(s => s != security))
return;
// start strategy before emulation started
strategy.Start();
candleManager.Start(_series5m);
candleManager.Start(_series60m); <-------------------------------- Проблема тут
// start historical data loading when connection established successfully and all data subscribed
connector.Start();
};
StackTrace:
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
at Ecng.Collections.SynchronizedDictionary`2.Add(TKey key, TValue value)
at StockSharp.Algo.Testing.HistoryEmulationConnector.StockSharp.Algo.Candles.IExternalCandleSource.SubscribeCandles(CandleSeries series, DateTimeOffset from, DateTimeOffset to)
at StockSharp.Algo.Candles.CandleManager.ExternalCandleSource.StockSharp.Algo.Candles.ICandleSource<StockSharp.Algo.Candles.Candle>.Start(CandleSeries series, DateTimeOffset from, DateTimeOffset to)
at StockSharp.Algo.Candles.CandleSourceEnumerator`2.Start()
at StockSharp.Algo.Candles.CandleManager.Start(CandleSeries series, DateTimeOffset from, DateTimeOffset to)
at StockSharp.Algo.Candles.CandleHelper.Start(ICandleManager manager, CandleSeries series)
at SimpleStrategy.MainWindow.<>c__DisplayClass19_0.<Window_Loaded>b__0(IEnumerable`1 securities) in C:\Users\xxxxxxx\Stock\Stage\SimpleStrategy\SimpleStrategy\MainWindow.xaml.cs:line 258
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
at StockSharp.Algo.Connector.GetSecurity(String id, Func`2 changeSecurity)
at StockSharp.Algo.Connector.ProcessSecurityMessage(SecurityMessage message)
at StockSharp.Algo.Connector.OnProcessMessage(Message message)
Comentarios (3)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
Если вы свечи из тиков собирать будете то у вас получиться то что вы хотите, но это медленно. А вот как из готовых свечей сложно сказать.
Только что попробовал вопроизвести на версии 4.3.14.2 (до этого делал на 4.3.13) После применения всех необходимых корректировок все равно не заработало, но проблемы стали другими и в голову пришла идея. В общем - все получилось.
Итак, чтобы протестировать на исторических свечках стратегию, где нужны несколько разных Series (в моем случае 5m и 60m) нужно: Инициализировать только один CandleManager. Это принципиально.
Создать нужные Series:
Передать CandleManager и нужные Series в стратегию, где подписаться на свечки: Можно подписать одно событие и в нем определять тип свечи по candle.arg или сделать 2 разных процедуры, по желанию.
При добавлении Security в коннектор запустить генерацию на обе(все) Series:
И будет вам счастье.
Такая ошибка может быть, если при этом график отрисовывается