Здравствуйте! Загрузил 4.1.7. Очень хотелось тестирование на свечках поиспытывать. И натолкнулся на следующую проблемку. Свечки, приходящие при тестировании не соответствуют действительности. Стал экспериментировать, выводя свечи на график. Вывел один день 2012.01.03 на график, через гидру двумя способами с постройкой свечек из сделок и без постройки, графика получились одинаковыми. А вот график, который я строю при тестировании на свечах от них отличается. А количество свечей 10 минуток(на них экспериментировал) за весь 2012год при тестировании, приходит больше чем в гидре создается, хоть с постройкой свечек из сделок хоть без постройки. Может, кто то уже тестировал на свечках, проблем не возникало? Ошибиться то вроде негде...
Код получения графика.
Code
private void Test_Click(object sender, RoutedEventArgs e)
{
var timeFrame = TimeSpan.FromMinutes(10);
// хранилище, через которое будет производиться доступ к тиковой и котировочной базе
var storageRegistry = new StorageRegistry();
// изменяем путь, используемый по умолчанию
((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = PathStorage;
// используем алфавитное хранилище
((LocalMarketDataDrive)storageRegistry.DefaultDrive).UseAlphabeticPath = true;
var startTime = new DateTime(2012, 1, 1);
var stopTime = new DateTime(2012, 1, 3);
// задаем шаг ProgressBar
var progressStep = ((stopTime - startTime).Ticks / 100).To<TimeSpan>();
// создаем тестовый инструмент, на котором будет производится тестирование
var security = SelectedSecurity;
// тестовый портфель
var portfolio = new Portfolio { Name = "test account" };
// создаем шлюз для эмуляции
// инициализируем настройки (инструмент в истории обновляется раз в секунду)
var trader = new EmulationTrader(new[] { security },new[] { portfolio })
{
MarketTimeChangedInterval = timeFrame,
StorageRegistry = storageRegistry,
// использовать свечки
UseCandlesTimeFrame = timeFrame,
};
trader.Connect();
trader.StartExport();
var candleManager = new CandleManager(trader);
var series = new CandleSeries(typeof(TimeFrameCandle), security, timeFrame);
InitChart();
candleManager.Processing += DrawCandles;
candleManager.Start(series);
var nextTime = startTime + progressStep;
// и подписываемся на событие изменения времени, чтобы обновить ProgressBar
trader.MarketTimeChanged += d =>
{
if (trader.CurrentTime >= nextTime || trader.CurrentTime >= stopTime)
{
nextTime += progressStep;
this.GuiAsync(() => ProgressBar.Value++);
}
};
trader.StateChanged += (oldState, newState) =>
{
if (trader.State == EmulationStates.Stopped)
{
this.GuiAsync(() =>
{
if (trader.IsFinished)
{
ProgressBar.Value = ProgressBar.Maximum;
MessageBox.Show("Закончено за " + (DateTime.Now - _startEmulationTime));
}
else
MessageBox.Show("Отменено");
});
}
};
trader.Start(startTime, stopTime);
_startEmulationTime = DateTime.Now;
}
private void DrawCandles(CandleSeries series, Candle candle)
{
if (candle.State == CandleStates.Finished)
{
this.GuiAsync(
() => _chartWindow.Chart.ProcessValues(candle.OpenTime, new Dictionary<IChartElement, object>
{
{_candlesElem, candle},
}));
}
}