﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Параллельное тестирование разных интервалов времени</title>
  <id>~/topic/4783/parallelnoe-testirovanie-raznyh-intervalov-vremeni/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-10T13:12:13Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=4783" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/32231/</id>
    <title type="text">Я хотел узнать как тестировать с помощью HistoryEmulationConnector , одну и ту же стратегию с одними...</title>
    <published>2014-12-09T17:46:50Z</published>
    <updated>2014-12-09T17:46:50Z</updated>
    <author>
      <name>ilmir</name>
      <uri>https://stocksharp.ru/users/16755/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Я хотел узнать как тестировать с помощью  HistoryEmulationConnector  , одну и ту же стратегию  с одними и теми же историческими данными  несколько раз , не читая заново с жесткого диска историю .&lt;br /&gt;При повторном старте один и тот  HistoryEmulationConnector  завершает работу без тестирования приходит в состояние  EmulationStates.Stopped&lt;br /&gt;Версия используемой библиотеки : 4.2.2.15&lt;br /&gt;&lt;br /&gt;Можно ли как то тестировать без повторных перезагрузок данных и с помощью разных потоков (при тестировании на разных потоках с перезагрузкой истории) и избежав ошибку описанную выше пользователем vladch8&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;           var strategy = new Str_2222();&lt;br /&gt;&lt;br /&gt;            var SecId = @&amp;quot;ROSN-9.13_FT@EQBR&amp;quot;;&lt;br /&gt;            var secIdParts = SecId.Split(&amp;#39;@&amp;#39;);&lt;br /&gt;            var secCode = secIdParts[0];&lt;br /&gt;            var board = ExchangeBoard.GetOrCreateBoard(secIdParts[1]);&lt;br /&gt;&lt;br /&gt;            Security securityForTest = new Security&lt;br /&gt;                {&lt;br /&gt;                    Id = SecId,&lt;br /&gt;                    // по идентификатору инструмента будет искаться папка с историческими маркет данными&lt;br /&gt;                    Code = secCode,&lt;br /&gt;                    PriceStep = 1,&lt;br /&gt;                    MinPrice = 1,&lt;br /&gt;                    MaxPrice = 1000000,&lt;br /&gt;                    MarginBuy = 10000, // задаем ГО&lt;br /&gt;                    MarginSell = 10000,&lt;br /&gt;                    Board = board,&lt;br /&gt;                };&lt;br /&gt;&lt;br /&gt;            StorageRegistry onStorageRegistry = new StorageRegistry()&lt;br /&gt;            {&lt;br /&gt;                DefaultDrive = new LocalMarketDataDrive(@&amp;quot;D:\Storages\ITInvest\Out2&amp;quot;),&lt;br /&gt;            };&lt;br /&gt;                &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;         //   strategy.Security = securityForTest;&lt;br /&gt;&lt;br /&gt;            AllStatisticks allStatisticks = new AllStatisticks();&lt;br /&gt;            List&amp;lt;TotalStat&amp;gt; stats = new List&amp;lt;TotalStat&amp;gt;();&lt;br /&gt;            &lt;br /&gt;            List&amp;lt;HistoryEmulationConnector&amp;gt; conns  = new List&amp;lt;HistoryEmulationConnector&amp;gt;();&lt;br /&gt;&lt;br /&gt;//            strategy.AddConnectorForTesting(securityForTest, onStorageRegistry,&lt;br /&gt;//                new DateTime(2013, 1, 1), new DateTime(2014, 1, 1), new ProcessCount(),&lt;br /&gt;//                conns, allStatisticks, stats);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            Portfolio portfolio = new Portfolio&lt;br /&gt;            {&lt;br /&gt;                Name = &amp;quot;test account&amp;quot;,&lt;br /&gt;                BeginValue = 1000000,&lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            var iConnector = new HistoryEmulationConnector(&lt;br /&gt;                new[] { securityForTest },&lt;br /&gt;                new[] { portfolio })&lt;br /&gt;            {&lt;br /&gt;                StorageRegistry = onStorageRegistry,&lt;br /&gt;&lt;br /&gt;                MarketEmulator =&lt;br /&gt;                {&lt;br /&gt;                    Settings =&lt;br /&gt;                    {&lt;br /&gt;                        //                        UseCandlesTimeFrame = timeFrame,&lt;br /&gt;                        MatchOnTouch = false,&lt;br /&gt;                    }&lt;br /&gt;                },&lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            Connector connector = iConnector;&lt;br /&gt;            &lt;br /&gt;            iConnector.NewSecurities += sec =&amp;gt;&lt;br /&gt;            {&lt;br /&gt;                if (sec.All(s =&amp;gt; s != securityForTest))&lt;br /&gt;                    return;&lt;br /&gt;                strategy.Security = sec.First(s =&amp;gt; s.Name == securityForTest.Name);&lt;br /&gt;                strategy.Security.WhenMarketDepthChanged().Do(strategy.MarketDephtChanged).Apply(strategy);&lt;br /&gt;                iConnector.RegisterMarketDepth(strategy.Security);&lt;br /&gt;                &lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            &lt;br /&gt;//            Security.Connector = Connector;&lt;br /&gt;            &lt;br /&gt;            //            Connector.RegisterMarketDepth(Security);&lt;br /&gt;&lt;br /&gt;//            iConnector.MarketDataAdapter.SessionHolder.MarketTimeChangedInterval = timeFrame;&lt;br /&gt;            //            iConnector.NewSecurities += securities =&amp;gt;&lt;br /&gt;            //            {&lt;br /&gt;            //            };&lt;br /&gt;            iConnector.Connect();&lt;br /&gt;            iConnector.StartExport();&lt;br /&gt;            iConnector.StateChanged += (oldState, newState) =&amp;gt;&lt;br /&gt;            {&lt;br /&gt;                if (iConnector.State == EmulationStates.Stopped)&lt;br /&gt;                {&lt;br /&gt;                    if (iConnector.IsFinished)&lt;br /&gt;                    {&lt;br /&gt;                        //                        this.Start();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                        //iConnector.RegisteredSecurities&lt;br /&gt;&lt;br /&gt;                      //  iConnector.Stop();&lt;br /&gt;  &lt;br /&gt;                        strategy.Dispose();&lt;br /&gt;// ПОПЫТКА  ПОВТОРНОГО Запуска новой стратегии  но с загруженными ранее истрическими данными&lt;br /&gt;                        strategy = new Str_2222();&lt;br /&gt;                        strategy.Security = iConnector.Securities.First();&lt;br /&gt;                        strategy.Connector = iConnector;&lt;br /&gt;                        strategy.Portfolio = new Portfolio()&lt;br /&gt;                        {&lt;br /&gt;                            Name = &amp;quot;test account&amp;quot;,&lt;br /&gt;                            BeginValue = 1000000,&lt;br /&gt;                        };&lt;br /&gt;//                        iConnector.Portfolios = new[] { strategy.Portfolio };&lt;br /&gt;                        iConnector.Start(new DateTime(2013, 1, 1), new DateTime(2014, 1, 1));&lt;br /&gt;//                        strategy.Stop();&lt;br /&gt;&lt;br /&gt;                        &lt;br /&gt;&lt;br /&gt;                        //                        allStatisticks.AddOneState1(this, stats);&lt;br /&gt;                        //                        processCount.iCount--;&lt;br /&gt;                        //                            MessageBox.Show(string.Format(@&amp;quot;BB {0}  Std Dev {1}  pnl  {2}&amp;quot;,allParams[0].Value.ToString(),allParams[1].Value.ToString(),this.PnL.ToString()));&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                if (iConnector.State == EmulationStates.Started)&lt;br /&gt;                //                    &amp;amp;&amp;amp; this.ProcessState != ProcessStates.Started)&lt;br /&gt;                {&lt;br /&gt;                    var sssa = strategy.ProcessState;&lt;br /&gt;                    strategy.Start();&lt;br /&gt;                }&lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            iConnector.Start(new DateTime(2013, 1, 1), new DateTime(2014, 1, 1));</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/32007/</id>
    <title type="text">Спасибо за dll, помогло. Если не сложно, объясните в чем было дело. </title>
    <published>2014-10-22T16:59:53Z</published>
    <updated>2014-10-22T16:59:53Z</updated>
    <author>
      <name>vladch8</name>
      <uri>https://stocksharp.ru/users/28168/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Спасибо за dll, помогло.&lt;br /&gt;Если не сложно, объясните в чем было дело.&lt;br /&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31990/</id>
    <title type="text">Вот эту dll замените.</title>
    <published>2014-10-21T19:39:42Z</published>
    <updated>2014-10-21T19:40:49Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Вот эту dll замените.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/31989/</id>
    <title type="text">Создаю несколько потоков тестирования, в каждом свой HistoryEmulationConnector со своими настройками...</title>
    <published>2014-10-21T19:14:13Z</published>
    <updated>2014-10-21T19:14:13Z</updated>
    <author>
      <name>vladch8</name>
      <uri>https://stocksharp.ru/users/28168/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Создаю несколько потоков тестирования, в каждом свой HistoryEmulationConnector со своими настройками (инструменты RIM2, RIM3, RIU2 и т.д., соответственно, разные временные интервалы).&lt;br /&gt;Один, иногда два - три, потока выполняются нормально, остальные выдают ошибку: &lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

2013/09/16 00:00:00.000|Debug  |HistoryEmulationConnector|BP:Error,T=2013.09.16 00:00:00.000,Error=Элемент с тем же ключом уже был добавлен.
2013/09/16 00:00:00.000|Error  |HistoryEmulationConnector|System.ArgumentException: Элемент с тем же ключом уже был добавлен.
   в System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   в System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   в System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
   в Ecng.Common.MathHelper.GetCachedDecimals(Decimal value)
   в StockSharp.Algo.Testing.MarketEmulator.#=qh1ZPidasARRg00NQf$sYjQX6A5pJSOEq4NH0ij$ONbs=.#=qnsQljlGqreo$Nyl8gora5Q==(Message #=q5iaVPc$F6hSLTNF1QH0JcA==, ICollection`1 #=qzIhA_j$b5yBI7rmxuSunwQ==)
   в StockSharp.Algo.Testing.MarketEmulator.#=qh1ZPidasARRg00NQf$sYjQX6A5pJSOEq4NH0ij$ONbs=.#=q7c$sqXM9_4BnhBWBfQdQJPfqNrto39GyW7ZGSuU7dATJMptYfjghXHCHDGeYtAvYvbZdrmJ_PsTBmLzXx4bbDQ==(Message #=qZPTtD$kY54AFaC8HpusqHg==)
   в StockSharp.Algo.Testing.MarketEmulator.#=qBRCpsJ52rTsW3$nd7Na$JNW9ns9arLvM6$wzd8S3ekSb0DK5Cja$PWbDeio8Z0Nhqh7xdvMGmwRbdUdevVqBOQ==(Message #=qvIToI5VzogMn$7w9dERplw==)
   в StockSharp.Algo.Testing.EmulationMessageAdapter.OnSendInMessage(Message message)
   в StockSharp.Messages.MessageAdapter`1.OnInMessageProcessor(Message message, IMessageAdapter adapter)
&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>
</feed>