Немного об HFT

23 февраля, 2012

Чтобы дать некоторое представление об объемах данных, 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.

Буду рад, если кто-то сможет на результатах фактических замеров доказать , что можно быстрее.

 

QUIK-> DDE->робот->API-> (ч.3)

22 февраля, 2012

Закончил тестирование скорости поступления и обработки информации о котировках (стакан).

Получились следующие результаты.

Время приема и обработки информации по DDE

1)  C моей стороны:  0.3 ms без отображения стакана,  и 1.8 ms при отображении стакана на экране монитора.

2) Со стороны терминала QUIK интервал вывода  информации по DDE не менее 15 ms.

3) Со стороны сервера брокера интервал обновления информации в диапазоне от 250 ms до 600 ms.

4) Средняя величина  запаздывания информации от сервера от 150 ms до 250 ms.