Настройки тестирования
Некоторые настройки HistoryEmulationConnector.
- MarketTimeChangedInterval - интервал прихода события о смене времени. Если используются генераторы сделок, сделки будут генерироваться с этой периодичностью. По-умолчанию равно 1 минуте.
- MarketEmulatorSettings.Latency - Минимальное значение задержки выставляемых заявок. По-умолчанию равно TimeSpan.Zero, что означает мгновенное принятие биржей выставляемых заявок.
- MarketEmulatorSettings.MatchOnTouch - удовлетворять заявки, если цена “коснулась” уровня (допущение иногда слишком “оптимистично” и для реалистичного тестирования следует выключить режим). Если режим выключен, то лимитные заявки будут удовлетворяться, если цена “прошла сквозь них” хотя бы на 1 шаг. Опция работает во всех режимах кроме ордер лога. По-умолчанию выключено.
Даже если стратегия тестируется на свечах, нужно подписываться на тиковые сделки:
_connector.SubscribeTrades(security);
Если для стратегии нужны стаканы, нужно подписываться на стаканы:
_connector.SubscribeMarketDepth(security);
Если стаканов нет, то для проверки работоспособности стратегий, нуждающихся в стаканах, можно включить генерацию:
var mdGenerator = new TrendMarketDepthGenerator(connector.GetSecurityId(security));
_connector.MarketDataAdapter.SendInMessage(new GeneratorMessage
{
IsSubscribe = true,
Generator = mdGeneratorб
});
Интервал обновления стакана MarketDataGenerator.Interval. Обновление не может быть чаще, чем приходят тиковые сделки (т.к. стаканы генерируются перед каждой сделкой):
mdGenerator.Interval = TimeSpan.FromSeconds(1);
Глубина стаканов MarketDepthGenerator.MaxBidsDepth и MarketDepthGenerator.MaxAsksDepth. Чем больше - тем медленнее тестирование:
mdGenerator.MaxAsksDepth = 1; mdGenerator.MaxBidsDepth = 1;
Объемы у MarketDepth.BestBid и MarketDepth.BestAsk берутся из объема сделки, по которой идет генерация. Опция MarketDepthGenerator.UseTradeVolume устанавливает реалистичный объем уровня в стакане:
mdGenerator.UseTradeVolume = true;
Объем уровня MarketDataGenerator.MinVolume и MarketDataGenerator.MaxVolume:
mdGenerator.MinVolume = 1; mdGenerator.MaxVolume = 1;
Минимальный генерируемый спред равен Security.PriceStep. Не следует генерировать спред между MarketDepth.BestBid и MarketDepth.BestAsk больше чем 5 Security.PriceStep (чтобы при генерации из свечей не получалось слишком широкого спреда):
mdGenerator.MinSpreadStepCount = 1; mdGenerator.MaxSpreadStepCount = 5;