Произвожу тестирование с использованием EmulationTrader, задаю максимальную задержку так:
var emulationTrader = new EmulationTrader(new[] { security }, new[] { portfolio }) {
MarketTimeChangedInterval = new TimeSpan(0, 0, 0, 10, 0), // Изменение Trader.MarketTime каждые 10 секунд
StorageRegistry = storageRegistry,
WorkingTime = Exchange.Rts.WorkingTime,
UseMarketDepth = false
};
// Задаем максимальную задержку принятия выставляемых заявок на бирже
emulationTrader.MarketEmulator.Settings.Latency = new TimeSpan(0, 0, 0, 0, 250);
в результате тестирования в логе задержка больше указанного значения:
10:55:05.000 | | TS_RIM2@RTS_tst | Выставлена PROFIT заявка по цене 156750 для заявки с Id=23. TransactionId=56758977, Id=24, V=1, Pos=1, задержка 00:00:03 в примере например 3 секунды
评论 (7)
登录 或 创建账户, 登录或注册以发表评论
Параметр эмулятора Latency означает МИНИМАЛЬНУЮ задержку от момента RegisterOrder до момента когда заявка начинает обрабатываться в эмуляторе.
Фактически, сейчас эмулятор устроен так, что этот момент времени обязан совпадать с временем прихода в эмулятор очередного тика или стакана. Именно в эти моменты происходит проверка заявок на то, что задержка уже больше чем параметр Latency и заявку можно обрабатывать.
В вашем случае видимо первый тик пришел через 3 секунды. И ФАКТИЧЕСКАЯ задержка (Order.Latency) была 3 секунды. Что больше минимальной.
Так что все нормально.
Значит ошибка в документации, там сказано:
Непонятно зачем нужен такой параметр максимальной задержки
Минимальная введена чтобы имитировать задержку сетевого канала.
Если не хотите задержки вообще - ставьте Latency=0 тогда будет мгновенное исполнение.
В чем конечная проблема которую вы пытаетесь решить?
Максимальное значение так же нужно чтобы ограничить задержку сверху. А так получается задержка максимальным пределом не ограничена. Или все таки ограничена? Алгоритм расчета задержки можно привести?
cмотрите. Latency это MarketEmulator.Settings.Latency - то что названо "минимальная задержка".
Когда эмулятор получает заявку от стратегии он просто помещает ее в список неактивных (пока) заявок, которые "в пути"
Когда эмулятор получает новый тик или стакан, он смотрит, не сидит ли заявка "в пути" больше чем Latency-мин. задержка. И если это так - обрабатывает заявку, отправляет в шлюз NewOrder. И в заявке запоминается Order.Latency - фактическое время "в пути".
Оно по данному алгоритму будет не меньше Latency, поэтому Latency- миним. задержка.
Название плохое, потому что это просто эмулируемая задержка.
Есть ньюанс что если тик или стакан не придет втечение долгого времени после отправки заявки то и заявка не будут активизирована, те будут как бы вечно "в пути".
Если это доставляет проблему то можно пофиксить последний момент и тогда факт задержка будет совпадаеть с Latency, те не будет ситуаций когда факт. Latency сильно больше чем MarketEmulator.Settings.Latency
hope it helps
Принято пожелание или нет?
Михаил (пыхтачог) приедет из отпуска, ответит.