Время заявок и сделок отстает от исторического при тестировании
Время заявок и сделок отстает от исторического при тестировании.
Использую EmulationTrader, данные загружаю из истории, закаченой через Гидру.
В чем причина, как сделать правильно?
Далее куски кода.
Код
private void EmulateClick(object sender, RoutedEventArgs e)
{
if (!Directory.Exists(tbPathHistory.Text))
{
System.Windows.MessageBox.Show(string.Format("Directory is not found: {0}", tbPathHistory.Text));
return;
}
// хранилище, через которое будет производиться доступ к тиковой и котировочной базе
var storageRegistry = new StorageRegistry();
// изменяем путь, используемый по умолчанию
((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = tbPathHistory.Text;
// используем алфавитное хранилище
((LocalMarketDataDrive)storageRegistry.DefaultDrive).UseAlphabeticPath = true;
//===============
// создаем тестовый инструмент, на котором будет производится тестирование
_security = new Security
{
Id = tbSecurityId.Text,//"RIZ2@RTS",
// по идентификатору инструмента будет искаться папка с историческими маркет данными
Code = tbSecurityCode.Text,//"RIZ2",
Name = tbSecurityName.Text,//"RTS-12.12",
ExchangeBoard = (ExchangeBoard)cbSecurityExchangeBoard.SelectedItem,//ExchangeBoard.Forts,
};
// тестовый портфель
_portfolio = new Portfolio { Name = tbPortfolioName.Text, BeginValue = decimal.Parse(tbPortfolioBeginValue.Text) };
// создаем шлюз для эмуляции
// инициализируем настройки (инструмент в истории обновляется раз в секунду)
_trader = new EmulationTrader(
new[] { _security },
new[] { _portfolio },
storageRegistry)
{
MarketTimeChangedInterval = tpTimeFrame.Value.Value.TimeOfDay,
};
_trader.Connect();
_trader.StartExport();
}
Код
_candleSeries.ProcessCandle += candle =>
{
//Debug.Print("{0}", candle);
var candleBounds = timeFrame.GetCandleBounds(_candleSeries.Security);
if (candle.State == CandleStates.Finished || candle.OpenTime >= candleBounds.Min)
{
var valueSma = _indicatorSma.Process(candle);
var chartValueSma = new ChartIndicatorValue(_indicatorSma, valueSma);
var valueStohastic = _indicator.Process(candle);
var chartValueStohastic = new ChartIndicatorValue(_indicator, valueStohastic);
this.GuiAsync(() => Chart.ProcessValues(candle.OpenTime, new Dictionary<IChartElement, object>()
{
{_chartCandleElement, candle},
{_chartIndicatorSmaElement, chartValueSma},
{_chartIndicatorStohasticElement, chartValueStohastic}
}));
}
};
Код
strategy.WhenNewMyTrades()
.Do(mytrades => this.GuiAsync(
() =>
{
Debug.WriteLine("NewMyTrades: " + mytrades.Count());
mytrades.ForEach(
t => Chart.ProcessValues(t.Trade.Time, new Dictionary<IChartElement, object>()
{
{_tradeElement, t}
}));
}))
.Apply();
strategy.WhenOrderRegistered()
.Do(order =>
{
Debug.WriteLine("OrderRegistered: " + order.Volume.ToString());
this.GuiAsync(
() => Chart.ProcessValues(order.Time, new Dictionary<IChartElement, object>()
{
{_orderElement, order}
}));
})
.Apply();