Что такое latency и из чего она складывается
Latency (задержка) в трейдинге — время от появления рыночного события до исполнения вашего ордера в ответ на него.
Полный путь:
- Событие на бирже (сделка, изменение ордербука)
- Биржа формирует сообщение и отправляет подписчикам
- Сообщение идёт по сети до вашего сервера
- Ваш код получает данные и обрабатывает их
- Принимается торговое решение
- Ордер формируется и отправляется на биржу
- Биржа принимает и исполняет ордер
Каждый шаг — источник задержки. Оптимизация идёт снизу вверх: сначала убираем самые большие потери.
Уровень 1: Географическая близость
Самый большой источник latency — физическое расстояние. Скорость света в оптоволокне — около 200 000 км/с. Москва–Лондон — ~2 500 км. Минимальная задержка только на скорость света: ~12 мс в одну сторону. Реальная задержка с промежуточным оборудованием: 25–40 мс.
Для HFT это недопустимо много.
Решение: размещайте сервер в том же дата-центре, что и биржа. Если Binance использует AWS eu-west-1 (Ирландия) — ваш сервер тоже должен быть там. Внутри одного дата-центра latency: 0,1–1 мс.
Co-location — аренда стойки в дата-центре биржи — даёт преимущество даже перед другим облачным провайдером в том же городе. Прямое соединение через cross-connect кабель убирает все промежуточные узлы.
Уровень 2: Протокол передачи данных
WebSocket — хорошее решение для большинства задач. Но для экстремального HFT переходят на бинарные протоколы.
FIX API — старейший протокол для профессиональной торговли. Присутствует на Binance, Bybit, Coinbase. Бинарный формат даёт меньше накладных расходов по сравнению с JSON. Сложнее в реализации.
Проприетарные протоколы — некоторые биржи предлагают собственные бинарные форматы для институциональных клиентов. Детали — по договорённости.
Уровень 3: Сетевой стек ОС
Стандартный Linux-стек добавляет задержку за счёт прерываний, переключений контекста, системных вызовов. Для обычных приложений это незначительно. Для HFT — заметно.
Kernel bypass (DPDK): позволяет сетевому приложению работать с сетевой картой напрямую, минуя ядро ОС. Снижение latency: 20–50 мкс. Уровень проприетарных HFT-решений.
CPU pinning: закрепление критических потоков на конкретных ядрах CPU. Исключает overhead от планировщика ОС.
NUMA awareness: на многосокетных серверах сетевая карта и CPU-ядра должны быть на одном NUMA-узле.
Уровень 4: Язык программирования и код
Rust — оптимальный выбор для low-latency. Компилируется в машинный код, нет GC-пауз, полный контроль памяти. Многие HFT-компании переходят с C++ на Rust.
C++ — классика HFT. Максимальная скорость, но сложнее в разработке.
Go — хорошая средняя позиция. Значительно быстрее Python, проще C++. GC-паузы есть, но Go 1.21+ сделал их предсказуемее. До 1 мс требований — нормально.
Python — для прототипирования. GIL ограничивает параллелизм, для экстремального HFT не подходит.
Что важно в коде:
- Избегайте аллокаций памяти в hot path — используйте object pools
- Минимизируйте системные вызовы
- Lock-free структуры данных там, где нужен параллельный доступ
- Предварительно аллоцируйте буферы нужного размера
Ориентиры latency
| Сценарий | End-to-end latency |
|---|---|
| Co-location в дата-центре биржи | < 1 мс |
| Облачный сервер в регионе биржи | 2–10 мс |
| Удалённый сервер (другой регион) | 20–100 мс |
Сколько всего этого нужно
Зависит от стратегии. Для арбитража на секундных таймфреймах — WebSocket в нужном регионе и хорошо написанный Python/Go. Серьёзная оптимизация не нужна.
Для маркетмейкинга или HFT-арбитража на миллисекундных таймфреймах — co-location, FIX API, оптимизированный Rust/C++.
Инфраструктура для серьёзного HFT — инвестиция от десятков тысяч долларов в год. Имеет смысл только если стратегия генерирует достаточно прибыли.