← Zurück

Не верный расчет Latency в EmulationTrader

Произвожу тестирование с использованием 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 секунды

War dieses Thema hilfreich?

Thema teilen

Kommentare (7)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

pyhta4og
pyhta4og

Параметр эмулятора Latency означает МИНИМАЛЬНУЮ задержку от момента RegisterOrder до момента когда заявка начинает обрабатываться в эмуляторе.

Фактически, сейчас эмулятор устроен так, что этот момент времени обязан совпадать с временем прихода в эмулятор очередного тика или стакана. Именно в эти моменты происходит проверка заявок на то, что задержка уже больше чем параметр Latency и заявку можно обрабатывать.

В вашем случае видимо первый тик пришел через 3 секунды. И ФАКТИЧЕСКАЯ задержка (Order.Latency) была 3 секунды. Что больше минимальной.

Так что все нормально.

PavelAd
PavelAd Autor

pyhta4og: Параметр эмулятора Latency означает МИНИМАЛЬНУЮ задержку от момента RegisterOrder до момента когда заявка начинает обрабатываться в эмуляторе.

Значит ошибка в документации, там сказано:

MarketEmulatorSettings.Latency свойство

Максимальное значение задержки выставляемых заявок. По умолчанию равно Zero, что означает мгновенное принятие биржей выставляемых заявок. Тогда есть пожелание к разработчикам, реализовать возможность задавать максимальную задержку.

pyhta4og
pyhta4og

Непонятно зачем нужен такой параметр максимальной задержки

Минимальная введена чтобы имитировать задержку сетевого канала.

Если не хотите задержки вообще - ставьте Latency=0 тогда будет мгновенное исполнение.

В чем конечная проблема которую вы пытаетесь решить?

PavelAd
PavelAd Autor

pyhta4og: Непонятно зачем нужен такой параметр максимальной задержки

Минимальная введена чтобы имитировать задержку сетевого канала.

Если не хотите задержки вообще - ставьте Latency=0 тогда будет мгновенное исполнение.

В чем конечная проблема которую вы пытаетесь решить?

Максимальное значение так же нужно чтобы ограничить задержку сверху. А так получается задержка максимальным пределом не ограничена. Или все таки ограничена? Алгоритм расчета задержки можно привести?

pyhta4og
pyhta4og

PavelAd:

pyhta4og: Непонятно зачем нужен такой параметр максимальной задержки

Минимальная введена чтобы имитировать задержку сетевого канала.

Если не хотите задержки вообще - ставьте Latency=0 тогда будет мгновенное исполнение.

В чем конечная проблема которую вы пытаетесь решить?

Максимальное значение так же нужно чтобы ограничить задержку сверху. А так получается задержка максимальным пределом не ограничена. Или все таки ограничена? Алгоритм расчета задержки можно привести?

cмотрите. Latency это MarketEmulator.Settings.Latency - то что названо "минимальная задержка".

Когда эмулятор получает заявку от стратегии он просто помещает ее в список неактивных (пока) заявок, которые "в пути"

Когда эмулятор получает новый тик или стакан, он смотрит, не сидит ли заявка "в пути" больше чем Latency-мин. задержка. И если это так - обрабатывает заявку, отправляет в шлюз NewOrder. И в заявке запоминается Order.Latency - фактическое время "в пути".

Оно по данному алгоритму будет не меньше Latency, поэтому Latency- миним. задержка.

Название плохое, потому что это просто эмулируемая задержка.

Есть ньюанс что если тик или стакан не придет втечение долгого времени после отправки заявки то и заявка не будут активизирована, те будут как бы вечно "в пути".

Если это доставляет проблему то можно пофиксить последний момент и тогда факт задержка будет совпадаеть с Latency, те не будет ситуаций когда факт. Latency сильно больше чем MarketEmulator.Settings.Latency

hope it helps

PavelAd
PavelAd Autor

Принято пожелание или нет?

Alexander
Alexander

Михаил (пыхтачог) приедет из отпуска, ответит.