ilmir
|
Date: 12/9/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));
|