Произвожу тестирование с использованием 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 секунды
Kommentare (7)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Параметр эмулятора 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
Принято пожелание или нет?
Михаил (пыхтачог) приедет из отпуска, ответит.