Руководство по интеграции
### Введение
В высокочастотной торговле (HFT) традиционный сериализатор JSON или протокол FIX Tag-Value создают недопустимые задержки (latency) и джиттер (jitter) из-за динамического выделения памяти в куче (heap allocation) и посимвольного парсинга полей. **Simple Binary Encoding (SBE)** решает эту проблему за счет фиксированного расположения полей в памяти (fixed offsets), что позволяет HFT-системам читать и записывать данные напрямую в/из сетевого буфера без парсинга.
### Архитектура Bybit SBE
Интерфейс прямого доступа к рынку (DMA) на Bybit использует SBE v5 на выделенном websocket-эндпоинте `wss://{MMWS url}/v5/trade-sbe` для спотовых инструментов и деривативов в рамках одной TCP-сессии.
SBE-сообщение состоит из фиксированного заголовка (Header) и тела сообщения:
* **Schema ID**: 5
* **Template ID**: Уникальный идентификатор типа сообщения (например, NewOrder, CancelOrder).
* **Block Length**: Фиксированная длина тела сообщения.
Вся структура выравнивается по границе 64 байт (alignas(64)) для оптимального кеширования процессором (L1/L2 Cache Line).
### In-Memory Orderbook Engine (L3 ITCH Feed Parser)
Для поддержания точного состояния стакана HFT-движок считывает бинарный поток событий и обновляет локальную двухуровневую древовидную структуру стакана в оперативной памяти:
1. **PriceLevel**: Хранит цену, суммарный объем на уровне, количество ордеров и ссылки на начало и конец двусвязного списка ордеров.
2. **OrderNode**: Представляет конкретную заявку с её ID, объёмом и временной меткой входа ($ts_{ns}$).
Чтобы полностью исключить системные вызовы `malloc` / `new` во время обработки событий стакана, используется статическая арена памяти (`FixedArena`). Все узлы ордеров и уровней цен аллоцируются в массивах фиксированного размера на этапе инициализации системы.
В высокочастотной торговле (HFT) традиционный сериализатор JSON или протокол FIX Tag-Value создают недопустимые задержки (latency) и джиттер (jitter) из-за динамического выделения памяти в куче (heap allocation) и посимвольного парсинга полей. **Simple Binary Encoding (SBE)** решает эту проблему за счет фиксированного расположения полей в памяти (fixed offsets), что позволяет HFT-системам читать и записывать данные напрямую в/из сетевого буфера без парсинга.
### Архитектура Bybit SBE
Интерфейс прямого доступа к рынку (DMA) на Bybit использует SBE v5 на выделенном websocket-эндпоинте `wss://{MMWS url}/v5/trade-sbe` для спотовых инструментов и деривативов в рамках одной TCP-сессии.
SBE-сообщение состоит из фиксированного заголовка (Header) и тела сообщения:
* **Schema ID**: 5
* **Template ID**: Уникальный идентификатор типа сообщения (например, NewOrder, CancelOrder).
* **Block Length**: Фиксированная длина тела сообщения.
Вся структура выравнивается по границе 64 байт (alignas(64)) для оптимального кеширования процессором (L1/L2 Cache Line).
### In-Memory Orderbook Engine (L3 ITCH Feed Parser)
Для поддержания точного состояния стакана HFT-движок считывает бинарный поток событий и обновляет локальную двухуровневую древовидную структуру стакана в оперативной памяти:
1. **PriceLevel**: Хранит цену, суммарный объем на уровне, количество ордеров и ссылки на начало и конец двусвязного списка ордеров.
2. **OrderNode**: Представляет конкретную заявку с её ID, объёмом и временной меткой входа ($ts_{ns}$).
Чтобы полностью исключить системные вызовы `malloc` / `new` во время обработки событий стакана, используется статическая арена памяти (`FixedArena`). Все узлы ордеров и уровней цен аллоцируются в массивах фиксированного размера на этапе инициализации системы.