﻿<?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-06-22T08:20:31Z</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">&lt;p&gt;Я хотел узнать как тестировать с помощью  HistoryEmulationConnector  , одну и ту же стратегию  с одними и теми же историческими данными  несколько раз , не читая заново с жесткого диска историю .
При повторном старте один и тот  HistoryEmulationConnector  завершает работу без тестирования приходит в состояние  EmulationStates.Stopped
Версия используемой библиотеки : 4.2.2.15&lt;/p&gt;
&lt;p&gt;Можно ли как то тестировать без повторных перезагрузок данных и с помощью разных потоков (при тестировании на разных потоках с перезагрузкой истории) и избежав ошибку описанную выше пользователем vladch8&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;       var strategy = new Str_2222();

        var SecId = @&amp;quot;ROSN-9.13_FT@EQBR&amp;quot;;
        var secIdParts = SecId.Split('@');
        var secCode = secIdParts[0];
        var board = ExchangeBoard.GetOrCreateBoard(secIdParts[1]);

        Security securityForTest = new Security
            {
                Id = SecId,
                // по идентификатору инструмента будет искаться папка с историческими маркет данными
                Code = secCode,
                PriceStep = 1,
                MinPrice = 1,
                MaxPrice = 1000000,
                MarginBuy = 10000, // задаем ГО
                MarginSell = 10000,
                Board = board,
            };

        StorageRegistry onStorageRegistry = new StorageRegistry()
        {
            DefaultDrive = new LocalMarketDataDrive(@&amp;quot;D:\Storages\ITInvest\Out2&amp;quot;),
        };
            


     //   strategy.Security = securityForTest;

        AllStatisticks allStatisticks = new AllStatisticks();
        List&amp;lt;TotalStat&amp;gt; stats = new List&amp;lt;TotalStat&amp;gt;();
        
        List&amp;lt;HistoryEmulationConnector&amp;gt; conns  = new List&amp;lt;HistoryEmulationConnector&amp;gt;();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;//            strategy.AddConnectorForTesting(securityForTest, onStorageRegistry,
//                new DateTime(2013, 1, 1), new DateTime(2014, 1, 1), new ProcessCount(),
//                conns, allStatisticks, stats);&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;        Portfolio portfolio = new Portfolio
        {
            Name = &amp;quot;test account&amp;quot;,
            BeginValue = 1000000,
        };

        var iConnector = new HistoryEmulationConnector(
            new[] { securityForTest },
            new[] { portfolio })
        {
            StorageRegistry = onStorageRegistry,

            MarketEmulator =
            {
                Settings =
                {
                    //                        UseCandlesTimeFrame = timeFrame,
                    MatchOnTouch = false,
                }
            },
        };

        Connector connector = iConnector;
        
        iConnector.NewSecurities += sec =&amp;gt;
        {
            if (sec.All(s =&amp;gt; s != securityForTest))
                return;
            strategy.Security = sec.First(s =&amp;gt; s.Name == securityForTest.Name);
            strategy.Security.WhenMarketDepthChanged().Do(strategy.MarketDephtChanged).Apply(strategy);
            iConnector.RegisterMarketDepth(strategy.Security);
            
        };

        
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;//            Security.Connector = Connector;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;        //            Connector.RegisterMarketDepth(Security);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;//            iConnector.MarketDataAdapter.SessionHolder.MarketTimeChangedInterval = timeFrame;
//            iConnector.NewSecurities += securities =&amp;gt;
//            {
//            };
iConnector.Connect();
iConnector.StartExport();
iConnector.StateChanged += (oldState, newState) =&amp;gt;
{
if (iConnector.State == EmulationStates.Stopped)
{
if (iConnector.IsFinished)
{
//                        this.Start();&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;                    //iConnector.RegisteredSecurities

                  //  iConnector.Stop();

                    strategy.Dispose();
&lt;/code&gt;&lt;/pre&gt;
&lt;p strategy.Portfolio=""&gt;// ПОПЫТКА  ПОВТОРНОГО Запуска новой стратегии  но с загруженными ранее истрическими данными
strategy = new Str_2222();
strategy.Security = iConnector.Securities.First();
strategy.Connector = iConnector;
strategy.Portfolio = new Portfolio()
{
Name = &amp;quot;test account&amp;quot;,
BeginValue = 1000000,
};
//                        iConnector.Portfolios = new[] ;
iConnector.Start(new DateTime(2013, 1, 1), new DateTime(2014, 1, 1));
//                        strategy.Stop();&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;                    //                        allStatisticks.AddOneState1(this, stats);
                    //                        processCount.iCount--;
                    //                            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()));
                }
            }

            if (iConnector.State == EmulationStates.Started)
            //                    &amp;amp;&amp;amp; this.ProcessState != ProcessStates.Started)
            {
                var sssa = strategy.ProcessState;
                strategy.Start();
            }
        };

        iConnector.Start(new DateTime(2013, 1, 1), new DateTime(2014, 1, 1));
&lt;/code&gt;&lt;/pre&gt;
</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">&lt;p&gt;Спасибо за dll, помогло.
Если не сложно, объясните в чем было дело.&lt;/p&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">&lt;p&gt;Вот эту dll замените.&lt;/p&gt;
</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">&lt;p&gt;Создаю несколько потоков тестирования, в каждом свой HistoryEmulationConnector со своими настройками (инструменты RIM2, RIM3, RIU2 и т.д., соответственно, разные временные интервалы).
Один, иногда два - три, потока выполняются нормально, остальные выдают ошибку:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-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;/code&gt;&lt;/pre&gt;
&lt;p&gt;Не пойму, с чем может быть связана эта ошибка?&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>