Не верный расчет Latency в EmulationTrader
Atom Ответить
21.06.2012


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

Фотография
Дата: 21.06.2012
Ответить


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

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

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

Так что все нормально.
Спасибо:

PavelAd

Фотография
Дата: 22.06.2012
Ответить


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


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

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

Тогда есть пожелание к разработчикам, реализовать возможность задавать максимальную задержку.
Автор топика
Спасибо:

PavelAd

Фотография
Дата: 27.06.2012
Ответить


Принято пожелание или нет?
Автор топика
Спасибо:

Alexander

Фотография
Дата: 27.06.2012
Ответить


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

pyhta4og

Фотография
Дата: 03.07.2012
Ответить


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

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

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

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

PavelAd

Фотография
Дата: 11.07.2012
Ответить


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

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

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

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


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

pyhta4og

Фотография
Дата: 11.07.2012
Ответить


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

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

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

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


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


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

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

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

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

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

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

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


hope it helps
Спасибо: PavelAd


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy