Я хотел узнать как тестировать с помощью 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[] ;
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));