Чтобы дать некоторое представление об объемах данных, Nasdaq TotalView ITCH провела анализ сделок по инструментам, торгуемым на NASDAQ.
В результате получилось, что объем получаемой информации за день может составить до 20 Гб, с максимальной скоростью передачи до 3 Мб / сек и более отдельными сообщениями в, среднем около 20 байт каждое.
Это означает, что для HFT необходима обработка 100 000-200 000 сообщений в секунду.
Таким образом, необходимо обрабатывать одно сообщение примерно за 0.01 ms(10 микросекунд).
В своем роботе я использую тайм 5 минут.
Попытка перейти на более мелкие таймы приводит к существенному увеличению времени расчета и отображения информации .
Поэтому решил написать платформу, которая не только обеспечивала бы высокую скорость работы в реальном времени, но и позволяла бы максимально компактно и быстро собирать историю торгов.
Сейчас в данной платформе реализован интерфейс DDE с торговым терминалом QUIK.
Думаю, что скоростные характеристики, которые можно реализовать на основе этого интерфейса, мало кому известны, и будут полезны начинающим создателям HFT роботов.
В своих исследованиях я поставил следующие задачи:
1) Определить максимальную скорость передачи информации торговым терминалом QUIK по каналу DDE.
2) Определить время обработки принимающей программой стакана и таблицы всех сделок.
3) Определить период передачи информации о заявках (стаканах) сервером брокера
Как говорится, не обошлось и без казуса.
Когда я стал измерять период передачи информации о заявках сервером брокера, то получил странную величину – ровно 1000 ms.
Пришлось задать вопрос разработчикам QUIK.
На который получил ответ, что этот интервал передачи информации по DDE установлен по умолчанию ( интересно кто-нибудь видел об этом упоминание в документации) и если надо иное,
то следует установить значение в файле инициализации.
Минимальной интервал передачи по каналу DDE со стороны терминала составляет 10 ms.
Время обработки стакана реализованной мною программой составило 0.3 ms на 40 строк стакана.
В пересчете на одну строку имеем примерно 0.01 ms.
Далее я протестировал скорость передачи таблицы всех сделок объемом в 1.1 млн.записей.
В результате получил следующие данные.
Общее время составило 8 секунд.
Из них терминал QUIK готовил информацию 6 секунд.
Моя программа принимала информацию, сортировала ее по инструментам ( всего 1000 инструментов) и записывала в базу данных за 2 секунды.
Таким образом, время обработки записи об одной сделки составляет примерно 0.01 ms.
В итоге, за торговый день, я получил записи 1 млн.сделок по 1000 инструментам объемом 30 Мбайт, при работе в реальном времени, и 6 Мбайт – для бектестинга.
Последним этапом было определение интервала обновления информации о заявках(стаканах) брокером.
В результате я получил, что время обновления составляет от 200 до 500 ms.
В последнее время начинают появляются сообщения, что кто-то якобы создает базы данных стаканов с шагом миллисекунда.
На основе собственных измерений и публично доступной информации, считаю, что реально период получения информации о заявках может составлять порядка 100 ms.
Буду рад, если кто-то сможет на результатах фактических замеров доказать , что можно быстрее.