﻿<?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">Синхронное тестирование на истории двух разных TimeFrameCandle</title>
  <id>~/topic/5412/sinhronnoe-testirovanie-na-istorii-dvuh-raznyh-timeframecandle/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-03T17:55:37Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=5412" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/34830/</id>
    <title type="text">Такая ошибка может быть, если при этом график отрисовывается</title>
    <published>2016-06-01T16:32:39Z</published>
    <updated>2016-06-01T16:32:39Z</updated>
    <author>
      <name>Сергей Гаврилов</name>
      <uri>https://stocksharp.com/users/28633/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Такая ошибка может быть, если при этом график отрисовывается</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/34823/</id>
    <title type="text">Только что попробовал вопроизвести на версии 4.3.14.2 (до этого делал на 4.3.13) После применения вс...</title>
    <published>2016-05-30T11:02:20Z</published>
    <updated>2016-05-30T21:10:22Z</updated>
    <author>
      <name>suglosta</name>
      <uri>https://stocksharp.com/users/95650/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Только что попробовал вопроизвести на версии 4.3.14.2 (до этого делал на 4.3.13)&lt;br /&gt;После применения всех необходимых корректировок все равно не заработало, но проблемы стали другими и в голову пришла идея.&lt;br /&gt;В общем - все получилось.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Итак, чтобы протестировать на исторических свечках стратегию, где нужны несколько разных Series (в моем случае 5m и 60m) нужно:&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Инициализировать только один CandleManager. Это принципиально.&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

            var candleManager = new CandleManager(connector);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Создать нужные Series:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

            var timeFrame5m = TimeSpan.FromMinutes(5);
            var timeFrame60m = TimeSpan.FromMinutes(60);

            _series5m = new CandleSeries(typeof(TimeFrameCandle), security, timeFrame5m);
            _series60m = new CandleSeries(typeof(TimeFrameCandle), security, timeFrame60m);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Передать CandleManager и нужные Series в стратегию, где подписаться на свечки:&lt;br /&gt;Можно подписать одно событие и в нем определять тип свечи по candle.arg или сделать 2 разных процедуры, по желанию.&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

        protected override void OnStarted()
        {
            _candleManager
                .WhenCandlesFinished(_series5m)
                .Do(ProcessCandle)
                .Apply(this);

            _candleManager
                .WhenCandlesFinished(_series60m)
                .Do(ProcessCandle)
                .Apply(this);

            base.OnStarted();
        }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;При добавлении Security в коннектор запустить генерацию на обе(все) Series:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

            connector.NewSecurities += securities =&amp;gt;
            {
                if (securities.All(s =&amp;gt; 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();
            };

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;И будет вам счастье.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/34822/</id>
    <title type="text">Если вы свечи из тиков собирать будете то у вас получиться то что вы хотите, но это медленно. А вот ...</title>
    <published>2016-05-30T09:59:29Z</published>
    <updated>2016-05-30T09:59:29Z</updated>
    <author>
      <name>Иван З.</name>
      <uri>https://stocksharp.com/users/6502/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Если вы свечи из тиков собирать будете то у вас получиться то что вы хотите, но это медленно. А вот как из готовых свечей сложно сказать.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/34819/</id>
    <title type="text">Здравствуйте. Скачал при помощи гидры свечки 5-минутки и часовики. Попробовал загрузить разными Hist...</title>
    <published>2016-05-30T00:02:33Z</published>
    <updated>2016-05-30T00:02:33Z</updated>
    <author>
      <name>suglosta</name>
      <uri>https://stocksharp.com/users/95650/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Здравствуйте.&lt;br /&gt;&lt;br /&gt;Скачал при помощи гидры свечки 5-минутки и часовики.&lt;br /&gt;Попробовал загрузить разными HistoryEmulationConnector в разные графики - все работает.&lt;br /&gt;Теперь пробую через один HistoryEmulationConnector загрузить оба набора свечей.&lt;br /&gt;Пробовал и через один CandleManager и через разные, но подключенные к одному HistoryEmulationConnector.&lt;br /&gt;Выскакивает одна и та-же ошибка - &amp;quot;An item with the same key has already been added.&amp;quot;&lt;br /&gt;Ругается на выделенную строку.&lt;br /&gt;Причем в Series у СandleManager этот _series60m успевает добавиться.&lt;br /&gt;&lt;br /&gt;Хочется понять я странного хочу или есть возможность синхронной симуляции двух разных TimeFrameCandle для одного инструмента.&lt;br /&gt;Заранее спасибо за ответ.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

            connector.NewSecurities += securities =&amp;gt;
            {
                if (securities.All(s =&amp;gt; s != security))
                    return;

                // start strategy before emulation started
                strategy.Start();
                candleManager.Start(_series5m);
                candleManager.Start(_series60m); &amp;lt;-------------------------------- Проблема тут

                // start historical data loading when connection established successfully and all data subscribed
                connector.Start();
            };

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;StackTrace:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

   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&amp;lt;StockSharp.Algo.Candles.Candle&amp;gt;.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.&amp;lt;&amp;gt;c__DisplayClass19_0.&amp;lt;Window_Loaded&amp;gt;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)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>