Real-Time Backend
Financial Trading
Каждую микросекунду на NYSE и Binance десятки алгоритмов соревнуются за один и тот же ордер. Проигравший теряет деньги.
- **Binance** обрабатывает до 1.4 миллиона ордеров в секунду и поддерживает WebSocket streams с задержкой <10 мс для 2000+ торговых пар одновременно
- **NYSE** передаёт через XDP (eXtreme Data Platform) до 5 млрд сообщений в день; прямой data feed стоит $50 000+/мес для институциональных клиентов
- **Virtu Financial** - HFT-фирма, которая торговала прибыльно 1 237 из 1 238 дней подряд (2009-2014), используя co-location и FIX с латентностью 50-100 мкс
- **Jump Trading** проложила microwave-линию Chicago-NJ в 2010 году за $14 млн, сократив задержку с 13 до 8.1 мс; отбилась за несколько месяцев
Order Book
Order book - это двусторонняя очередь заявок на покупку (bids) и продажу (asks) финансового инструмента, отсортированных по цене. Binance обрабатывает до 100 000 обновлений order book в секунду на пару BTC/USDT в периоды волатильности. Каждое обновление содержит уровень цены и новый объём на этом уровне.
Order book существует в двух режимах: full snapshot (полное состояние, 5-20 MB JSON для топ-пар) и incremental updates (дельта-изменения, 50-200 bytes). При подключении клиент получает snapshot, затем подписывается на поток дельт. Пропуск хотя бы одной дельты делает локальную копию невалидной - нужно запросить новый snapshot.
- **Best bid** - наивысшая цена покупки; **best ask** - наименьшая цена продажи
- **Spread** = best ask - best bid; у BTC/USDT на Binance обычно $0.01-$0.10
- **Depth** - суммарный объём на N уровней; используется для оценки ликвидности
- Quantity=0 в дельте означает удаление уровня (не игнорировать!)
Клиент получил snapshot order book с lastUpdateId=500, затем дельту с lastUpdateId=498. Что делать?
Market Data
Market data feed - поток данных о торговой активности: сделки, цены, объёмы, индикаторы. NYSE генерирует до 5 миллиардов сообщений в день через протокол XDP (eXtreme Data Platform). Данные распределяются по UDP multicast - один поток на тысячи подписчиков одновременно без overhead TCP на каждое соединение.
Существует два класса market data: Level 1 (только best bid/ask и last trade) и Level 2 (полный order book на N уровней). Bloomberg Terminal передаёт Level 1 для 35 млн инструментов глобально. Level 2 для одной биржи - уже гигабайты в секунду в пиковые часы, требуют co-location серверов рядом с биржей.
- **Consolidated tape** - агрегированный поток от всех площадок (SIP в США); задержка до 500 мкс
- **Direct feed** - прямое подключение к бирже; задержка 50-200 мкс, дороже
- **Snapshot vs stream**: snapshot раз в N секунд проще, но пропускает внутрисекундные движения
- Временные метки нужно хранить в наносекундах - микросекунды иногда коллидируют на NYSE
Почему биржи используют UDP multicast вместо TCP для распространения market data?
FIX Protocol
FIX (Financial Information eXchange) - стандартный протокол для электронной торговли, разработанный в 1992 году Fidelity и Salomon Brothers. Сегодня 90%+ институциональных торговых инструкций передаются через FIX. Протокол текстовый: поля разделены символом SOH (0x01), что упрощает парсинг, но увеличивает размер сообщений по сравнению с бинарными форматами.
FIX/FAST (Fast Application-layer Encoding) - бинарное расширение FIX для market data с компрессией повторяющихся полей. CME Group использует FIX/FAST для MDP 3.0 (Market Data Platform), доставляя обновления с латентностью 3-8 микросекунд на co-located серверах. Для order routing (отправка заявок) используется классический текстовый FIX или проприетарные бинарные протоколы типа OUCH (NASDAQ).
- **Session layer**: Logon (A), Heartbeat (0), Logout (5) - поддержание соединения
- **Application layer**: NewOrderSingle (D), ExecutionReport (8), OrderCancelRequest (F)
- **Checksum**: последнее поле (tag 10) = сумма всех байт сообщения mod 256
- **CompIDs**: SenderCompID (49) и TargetCompID (56) идентифицируют стороны
- FIX/FAST сжимает типичное сообщение с 200 байт до 20-40 байт через delta encoding
Брокер получил FIX сообщение с тегом 35=8. Что это означает?
Trading Latency
В алгоритмической торговле латентность - конкурентное преимущество. HFT-фирма Virtu Financial зарабатывает на спреде, успевая среагировать на рыночные изменения быстрее других. Co-location в датацентре биржи даёт задержку 50-200 мкс от события до ответного ордера. Через обычный интернет - 5-50 мс, что на рынках делает конкуренцию с HFT невозможной.
- **Co-location**: сервер физически в датацентре биржи; аренда от $5 000/мес на NYSE
- **Kernel bypass**: DPDK, io_uring - обход OS для прямого доступа к NIC
- **FPGA**: Field-Programmable Gate Array для парсинга market data на аппаратном уровне; <1 мкс
- **Fiber vs microwave**: Chicago-NJ через microwave 8.1 мс, через оптику 13.1 мс - HFT используют microwave
- **Jitter** важнее среднего: P99 латентность, а не mean, определяет реальные потери
Чем выше частота тактирования CPU, тем ниже латентность в trading системах
Для latency-критичных систем важнее CPU с низким jitter, поддержкой NUMA и возможностью изоляции ядер, чем максимальная тактовая частота
Современные CPU с Turbo Boost непредсказуемо меняют частоту. HFT-фирмы часто фиксируют тактовую частоту ниже максимума ради стабильности. Intel Xeon с фиксированной частотой и поддержкой DDIO (Data Direct I/O) популярнее быстрых потребительских процессоров.
HFT-стратегия теряет прибыль из-за нестабильности латентности (jitter). Что наиболее эффективно снизит jitter?
Итоги
- **Order book** - основной источник истины о ликвидности; клиент поддерживает локальную копию через snapshot + delta updates с sequence numbers
- **FIX protocol** - индустриальный стандарт (1992) для обмена торговыми инструкциями; текстовый формат с SOH-разделителями; FIX/FAST - бинарное расширение для market data со сжатием до 5x
- **Latency в trading** измеряется в микросекундах; co-location, kernel bypass (DPDK), FPGA и CPU pinning - стандартный стек для HFT; jitter опаснее средней задержки
Связанные темы
Financial trading пересекается с несколькими областями realtime-систем:
- WebSocket Internals — Binance и Coinbase используют WebSocket для delivery market data клиентам; понимание framing и backpressure критично
- Rate Limiting Real-Time — Биржи лимитируют API запросы (Binance: 1200 weight/min); нарушение ведёт к IP ban на 24h
- WebSocket Security — Торговые API требуют HMAC-подписи каждого запроса; компрометация ключей ведёт к потере средств
Вопросы для размышления
- Order book на Binance обновляется 100 раз в секунду. Клиент с медленным интернетом пропускает часть дельт. Как детектировать пропуск и восстановить консистентность?
- FIX-протокол текстовый и занимает 200 байт на ордер. Binance использует свой бинарный WebSocket API. В каких сценариях FIX всё ещё выигрывает несмотря на неэффективность?
- HFT-фирма тратит $14 млн на microwave-линию, экономя 5 мс. Какой должен быть дневной объём торгов и спред, чтобы это окупилось за год?