FileStorage - отдаёт сделки только первый раз ?
Борюсь с проблемой, которую не получается пока никак локализовать.
Сделал класс HistoryTest, в котором один метод, который запускает тестирование на истории и выходит, когда оно заканчивается.
Первый раз, когда я создаю экземпляр класса и запускаю тестирование на исполнение - всё работает как надо.
Второй и последующие разы создаю НОВЫЙ экземпляр класса и не получаю от storageAPI ни новых сделок ни даже NewSecurities не срабатывает ни разу. totalStorageTrades так и остаётся 0.
Это я что-то делаю не так или storageAPI не сбрасывает текущую позицию в файле или счётчик трейдов ?
Класс использую так:
Код
for (var i = 1000; i < 30000; i+= 1000)
{
var storage = new TradingStorage(new FileStorage(PathHistoryStorage)) { BasePath = PathHistoryStorage };
var test = new HistoryTest()
{
PathHistoryStorage = PathHistoryStorage,
Security = _rts,
FileLog = fLog,
EmulationStartTime = new DateTime(2011, 06, 01),
EmulationStopTime = new DateTime(2011, 06, 02, 12, 00, 00),
storage = storage
};
test.RunHistoryTest2(i);
while (!test.IsFinished()) System.Threading.Thread.Sleep(10000);
Console.ReadLine();
}
Сам класс:
Код
class HistoryTest
{
public string PathHistoryStorage;
private EmulationTrader _historyTrader;
public Security Security;
private StrategyTest _strategy;
private DateTime _lastTitleUpdateDate;
public DateTime EmulationStartTime = new DateTime(2011, 06, 01);
public DateTime EmulationStopTime = new DateTime(2011, 09, 02);
public StreamWriter FileLog;
public TradingStorage storage;
//---------------------------------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------------------------------
public void RunHistoryTest2(int period)
{
// тестовый портфель
var portfolio = new Portfolio { Name = "TeST" };
// инициализируем настройки (инструмент в истории обновляется раз в 100ms)
var timeFrame = TimeSpan.FromSeconds(1);
_historyTrader = new EmulationTrader(new[] { Security }, new[] { portfolio })
{
MarketTimeChangedInterval = timeFrame,
Storage = storage,
WorkingTime = Exchange.Rts.WorkingTime,
DaysInMemory = 1,
};
Console.WriteLine("==============================================================");
_strategy = new StrategyTest
{
Volume = 1,
Portfolio = portfolio,
Security = Security,
Trader = _historyTrader,
period = period,
};
_historyTrader.NewSecurities += newSecs => { foreach (var security in newSecs) Console.WriteLine("Актив: " + security.Id + " " + security.Name); };
var totalStorageTrades = 0;
_historyTrader.NewTrades += trades =>{ totalStorageTrades += trades.Count(); };
_historyTrader.StateChanged += () =>
{
if (_historyTrader.State == EmulationStates.Stopped)
{
Console.WriteLine("TotalStorageTrades = " + totalStorageTrades);
Console.WriteLine("FINISHED 1 run...");
_strategy.Stop();
_strategy.Dispose();
_historyTrader.StopExport();
_historyTrader.Disconnect();
_historyTrader.Dispose();
storage.GetTradeStorage(Security).AllDates.GetEnumerator().Reset();
storage = null;
}
// запускаем стратегию когда эмулятор запустился
else if (_historyTrader.State == EmulationStates.Started) _strategy.Start();
};
// запускаем экспорт, чтобы инициализировать переданными инструментами и портфелями
// необходимоые свойства HistoryEmulationTrader
_historyTrader.Connect();
_historyTrader.StartExport();
// Запуск начала тестирования:
_historyTrader.Start(EmulationStartTime, EmulationStopTime);
}
//---------------------------------------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------------------------------------
public bool IsFinished()
{
return _historyTrader == null || _historyTrader.State == EmulationStates.Stopped;
}
}