| ilmir 
 
   
 
						
						
					 | Дата: 09.12.2014 
						
							|  |  |  |   |  
 
 
	
			Я хотел узнать как тестировать с помощью  HistoryEmulationConnector  , одну и ту же стратегию  с одними и теми же историческими данными  несколько раз , не читая заново с жесткого диска историю .При повторном старте один и тот  HistoryEmulationConnector  завершает работу без тестирования приходит в состояние  EmulationStates.Stopped
 Версия используемой библиотеки : 4.2.2.15
 
 Можно ли как то тестировать без повторных перезагрузок данных и с помощью разных потоков (при тестировании на разных потоках с перезагрузкой истории) и избежав ошибку описанную выше пользователем vladch8
 
 
 var strategy = new Str_2222();
 
 var SecId = @"ROSN-9.13_FT@EQBR";
 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(@"D:\Storages\ITInvest\Out2"),
 };
 
 
 
 //   strategy.Security = securityForTest;
 
 AllStatisticks allStatisticks = new AllStatisticks();
 List<TotalStat> stats = new List<TotalStat>();
 
 List<HistoryEmulationConnector> conns  = new List<HistoryEmulationConnector>();
 
 //            strategy.AddConnectorForTesting(securityForTest, onStorageRegistry,
 //                new DateTime(2013, 1, 1), new DateTime(2014, 1, 1), new ProcessCount(),
 //                conns, allStatisticks, stats);
 
 
 Portfolio portfolio = new Portfolio
 {
 Name = "test account",
 BeginValue = 1000000,
 };
 
 var iConnector = new HistoryEmulationConnector(
 new[] { securityForTest },
 new[] { portfolio })
 {
 StorageRegistry = onStorageRegistry,
 
 MarketEmulator =
 {
 Settings =
 {
 //                        UseCandlesTimeFrame = timeFrame,
 MatchOnTouch = false,
 }
 },
 };
 
 Connector connector = iConnector;
 
 iConnector.NewSecurities += sec =>
 {
 if (sec.All(s => s != securityForTest))
 return;
 strategy.Security = sec.First(s => s.Name == securityForTest.Name);
 strategy.Security.WhenMarketDepthChanged().Do(strategy.MarketDephtChanged).Apply(strategy);
 iConnector.RegisterMarketDepth(strategy.Security);
 
 };
 
 
 //            Security.Connector = Connector;
 
 //            Connector.RegisterMarketDepth(Security);
 
 //            iConnector.MarketDataAdapter.SessionHolder.MarketTimeChangedInterval = timeFrame;
 //            iConnector.NewSecurities += securities =>
 //            {
 //            };
 iConnector.Connect();
 iConnector.StartExport();
 iConnector.StateChanged += (oldState, newState) =>
 {
 if (iConnector.State == EmulationStates.Stopped)
 {
 if (iConnector.IsFinished)
 {
 //                        this.Start();
 
 
 //iConnector.RegisteredSecurities
 
 //  iConnector.Stop();
 
 strategy.Dispose();
 // ПОПЫТКА  ПОВТОРНОГО Запуска новой стратегии  но с загруженными ранее истрическими данными
 strategy = new Str_2222();
 strategy.Security = iConnector.Securities.First();
 strategy.Connector = iConnector;
 strategy.Portfolio = new Portfolio()
 {
 Name = "test account",
 BeginValue = 1000000,
 };
 //                        iConnector.Portfolios = new[] { strategy.Portfolio };
 iConnector.Start(new DateTime(2013, 1, 1), new DateTime(2014, 1, 1));
 //                        strategy.Stop();
 
 
 
 //                        allStatisticks.AddOneState1(this, stats);
 //                        processCount.iCount--;
 //                            MessageBox.Show(string.Format(@"BB {0}  Std Dev {1}  pnl  {2}",allParams[0].Value.ToString(),allParams[1].Value.ToString(),this.PnL.ToString()));
 }
 }
 
 if (iConnector.State == EmulationStates.Started)
 //                    && this.ProcessState != ProcessStates.Started)
 {
 var sssa = strategy.ProcessState;
 strategy.Start();
 }
 };
 
 iConnector.Start(new DateTime(2013, 1, 1), new DateTime(2014, 1, 1));
 |