Перейти к содержимому

Глава 278: Вариационная торговля на основе книги ордеров (LOB)

1. Введение

Книга ордеров (Limit Order Book, LOB) — центральная структура данных современных электронных бирж. В каждый момент времени она фиксирует все активные заявки на покупку (bid) и продажу (ask) на всех ценовых уровнях, предоставляя многомерный снимок рыночного спроса и предложения. Для алгоритмических трейдеров LOB является наиболее информативным источником данных о микроструктуре рынка — она кодирует ликвидность, дисбаланс ордеров, динамику спреда и намерения конкурирующих участников.

Однако работа с сырыми данными LOB затруднительна. Типичный снимок с 20 уровнями на каждой стороне создаёт 80-мерный вектор (цена и объём для каждого уровня с обеих сторон). Последовательности таких снимков зашумлены, сильно коррелированы, а их хранение и обработка обходятся дорого. Стандартное обучение с учителем на сырых признаках LOB часто приводит к переобучению на случайных паттернах или не может уловить латентную структуру, определяющую движение цен.

Вариационные автоэнкодеры (VAE) предлагают элегантное решение. Обучая вероятностное отображение из многомерных снимков LOB в компактное латентное пространство, VAE одновременно решают задачи снижения размерности, генеративного моделирования и оценки неопределённости. Латентное представление захватывает существенное «состояние рынка» в нескольких переменных, а декодер может восстанавливать или генерировать реалистичные конфигурации LOB по запросу.

В этой главе представлен детальный анализ вариационной торговли на LOB: применение VAE к данным книги ордеров для сжатия, генерации, обнаружения аномалий и анализа режимов. Мы развиваем математические основы, реализуем полную систему на Rust с интеграцией Bybit API и демонстрируем практические торговые приложения.

Почему вариационный подход к LOB?

  1. Компактное представление: Сжатие 80+ мерных снимков LOB до 8-16 латентных переменных, захватывающих существенное состояние рынка.
  2. Обнаружение аномалий: Ошибка реконструкции естественным образом выявляет необычные конфигурации LOB — спуфинг, флеш-краши или вакуум ликвидности.
  3. Интерполяция LOB: Генерация правдоподобных промежуточных состояний LOB между наблюдаемыми снимками путём интерполяции в латентном пространстве.
  4. Генерация, обусловленная режимом: Обусловливание VAE на рыночных режимах (трендовый, возвратный к среднему, волатильный) для генерации режимо-специфичных синтетических данных LOB.
  5. Оценка неопределённости: Вероятностный фреймворк обеспечивает калиброванные доверительные интервалы для предсказаний LOB.
  6. Аугментация данных: Генерация неограниченного количества синтетических данных LOB для обучения последующих моделей.

2. Математические основы

2.1 Представление состояния LOB

Снимок LOB в момент времени $t$ представляется как вектор признаков. Для $K$ ценовых уровней на каждой стороне сырой снимок:

$$\mathbf{L}t = {(p_k^{bid}, q_k^{bid}, p_k^{ask}, q_k^{ask})}{k=1}^{K}$$

Применяем стандартные нормализации для инвариантности к абсолютным уровням цен:

Нормализация цен (относительно средней цены): $$\tilde{p}_k^{bid} = \frac{p_k^{bid} - m_t}{m_t}, \quad \tilde{p}_k^{ask} = \frac{p_k^{ask} - m_t}{m_t}$$

где $m_t = \frac{p_1^{bid} + p_1^{ask}}{2}$ — средняя цена (mid-price).

Нормализация объёмов (логарифмическое преобразование): $$\tilde{q}_k = \log(1 + q_k)$$

Производные признаки дополняют сырые уровни:

  • Спред bid-ask: $s_t = p_1^{ask} - p_1^{bid}$
  • Дисбаланс ордеров на уровне $k$: $\text{OI}_k = \frac{q_k^{bid} - q_k^{ask}}{q_k^{bid} + q_k^{ask}}$
  • Кумулятивная глубина: $D_k^{bid} = \sum_{j=1}^{k} q_j^{bid}$
  • Взвешенная средняя цена: $w_t = \frac{p_1^{bid} \cdot q_1^{ask} + p_1^{ask} \cdot q_1^{bid}}{q_1^{bid} + q_1^{ask}}$

Полный вектор признаков $\mathbf{x}_t \in \mathbb{R}^{n}$ объединяет все нормализованные цены, объёмы и производные признаки.

2.2 Архитектура вариационного автоэнкодера

VAE состоит из сети-энкодера $q_\phi(\mathbf{z}|\mathbf{x})$ и сети-декодера $p_\theta(\mathbf{x}|\mathbf{z})$, связанных через стохастическую латентную переменную $\mathbf{z} \in \mathbb{R}^d$.

Энкодер: Отображает вектор признаков LOB в параметры гауссовского апостериорного распределения: $$\boldsymbol{\mu} = f_\mu(\mathbf{x}; \phi), \quad \log \boldsymbol{\sigma}^2 = f_\sigma(\mathbf{x}; \phi)$$

Трюк репараметризации: Позволяет выполнять обратное распространение ошибки через стохастическую выборку: $$\mathbf{z} = \boldsymbol{\mu} + \boldsymbol{\sigma} \odot \boldsymbol{\epsilon}, \quad \boldsymbol{\epsilon} \sim \mathcal{N}(\mathbf{0}, \mathbf{I})$$

Это разделяет стохастичность ($\boldsymbol{\epsilon}$) и обучаемые параметры ($\boldsymbol{\mu}, \boldsymbol{\sigma}$), делая градиент $\nabla_\phi \mathbf{z}$ корректно определённым.

Декодер: Восстанавливает признаки LOB из латентного кода: $$\hat{\mathbf{x}} = g(\mathbf{z}; \theta)$$

2.3 Функция потерь ELBO

VAE обучается путём максимизации нижней границы свидетельства (ELBO):

$$\mathcal{L}(\theta, \phi; \mathbf{x}) = \underbrace{\mathbb{E}{q\phi(\mathbf{z}|\mathbf{x})}[\log p_\theta(\mathbf{x}|\mathbf{z})]}{\text{Член реконструкции}} - \underbrace{D{KL}(q_\phi(\mathbf{z}|\mathbf{x}) | p(\mathbf{z}))}_{\text{Член KL-дивергенции}}$$

Член реконструкции: Для гауссовских выходов сводится к отрицательной среднеквадратичной ошибке: $$\mathbb{E}{q\phi}[\log p_\theta(\mathbf{x}|\mathbf{z})] \approx -\frac{1}{2}|\mathbf{x} - \hat{\mathbf{x}}|^2$$

Член KL-дивергенции: При стандартном нормальном приоре $p(\mathbf{z}) = \mathcal{N}(\mathbf{0}, \mathbf{I})$ KL-дивергенция имеет замкнутую форму: $$D_{KL} = -\frac{1}{2}\sum_{j=1}^{d}(1 + \log\sigma_j^2 - \mu_j^2 - \sigma_j^2)$$

Взвешивание Beta-VAE: Вводим гиперпараметр $\beta$ для управления компромиссом: $$\mathcal{L}\beta = \text{Recon} - \beta \cdot D{KL}$$

  • $\beta < 1$: Лучшая реконструкция, менее структурированное латентное пространство
  • $\beta = 1$: Стандартный VAE
  • $\beta > 1$: Более разделённые латентные факторы, потенциально худшая реконструкция

Для данных LOB оптимально $\beta \in [0.5, 2.0]$: меньшие значения предпочтительны для обнаружения аномалий, большие — для обнаружения режимов.

2.4 Обнаружение аномалий через ошибку реконструкции

Ошибка реконструкции естественным образом определяет показатель аномальности:

$$A(\mathbf{x}) = |\mathbf{x} - \hat{\mathbf{x}}|^2 = |\mathbf{x} - g(\text{encode}(\mathbf{x}); \theta)|^2$$

В нормальных условиях VAE хорошо восстанавливает снимки LOB. Когда LOB переходит в необычную конфигурацию, ошибка реконструкции резко возрастает.

Порог аномальности определяется по эмпирическому распределению: $$\text{Аномалия, если } A(\mathbf{x}) > \mu_A + k \cdot \sigma_A$$

где $\mu_A$ и $\sigma_A$ — среднее и стандартное отклонение показателей аномальности на обучающей выборке, а $k$ обычно равно 2-3.

2.5 Интерполяция в латентном пространстве

Для двух снимков LOB $\mathbf{x}_a$ и $\mathbf{x}_b$ можно сгенерировать плавные промежуточные состояния путём интерполяции в латентном пространстве:

$$\mathbf{z}_\alpha = (1 - \alpha)\mathbf{z}_a + \alpha \mathbf{z}_b, \quad \alpha \in [0, 1]$$

$$\hat{\mathbf{x}}\alpha = g(\mathbf{z}\alpha; \theta)$$

Поскольку латентное пространство регуляризовано до приблизительно гауссовского, линейная интерполяция порождает правдоподобные промежуточные состояния LOB.

2.6 Условный VAE на основе режимов

Расширяем стандартный VAE до условного VAE (CVAE), предоставляя метку режима $c$:

$$q_\phi(\mathbf{z}|\mathbf{x}, c), \quad p_\theta(\mathbf{x}|\mathbf{z}, c)$$

Режим $c$ может кодировать:

  • Режим волатильности: Низкая, средняя, высокая
  • Режим тренда: Восходящий, нисходящий, боковой
  • Режим ликвидности: Глубокий, нормальный, тонкий

3. Применения

3.1 Сжатие состояния LOB для торговли в реальном времени

В высокочастотной торговле обработка полных снимков LOB на микросекундной шкале вычислительно затратна. Энкодер VAE сжимает каждый снимок в латентный вектор фиксированного размера (например, 10 измерений), который подаётся на последующие торговые модели. Это обеспечивает:

  • Уменьшение размерности в 8-10 раз
  • Шумоподавление
  • Представление фиксированного размера независимо от числа уровней книги

3.2 Обнаружение аномалий и управление рисками

Детектор аномалий на основе реконструкции может работать в реальном времени для:

  • Выявления потенциального спуфинга
  • Обнаружения флеш-крашей на ранней стадии
  • Идентификации вакуума ликвидности
  • Запуска действий по управлению рисками

3.3 Генерация синтетических LOB для бэктестинга

Путём выборки из латентного пространства генерируем неограниченные синтетические данные LOB:

  • Случайная выборка: $\mathbf{z} \sim \mathcal{N}(\mathbf{0}, \mathbf{I})$, декодируем для получения случайного состояния LOB
  • Условная выборка: Фиксируем метку режима, выбираем $\mathbf{z}$, декодируем
  • Генерация траектории: Выбираем последовательность латентных кодов с временной корреляцией

3.4 Обнаружение рыночных режимов

Кластеризуя латентные представления $\mathbf{z}_t$ (например, K-means или смеси гауссианов), можно обнаруживать естественные рыночные режимы без ручной разметки. Переходы между кластерами соответствуют смене режимов, что может предсказывать будущее поведение цен.

4. Реализация на Rust

Наша реализация на Rust предоставляет полную систему вариационной торговли на LOB:

Обзор архитектуры

┌─────────────────────────────────────────────────┐
│ Bybit WebSocket / REST API │
│ (Снимки LOB в реальном времени) │
└──────────────────┬──────────────────────────────┘
┌──────────────────▼──────────────────────────────┐
│ Экстрактор признаков LOB │
│ - Нормализация цен (относительно mid) │
│ - Логарифмирование объёмов │
│ - Вычисление производных признаков │
└──────────────────┬──────────────────────────────┘
┌──────────────────▼──────────────────────────────┐
│ Энкодер VAE │
│ - Входной → Скрытый слой (ReLU) │
│ - Скрытый → μ (среднее) │
│ - Скрытый → log σ² (лог-дисперсия) │
│ - Репараметризация: z = μ + σ·ε │
└──────────────────┬──────────────────────────────┘
┌──────────────────▼──────────────────────────────┐
│ Латентное пространство (z ∈ ℝ^d) │
│ - Оценка аномальности │
│ - Интерполяция │
│ - Кластеризация режимов │
└──────────────────┬──────────────────────────────┘
┌──────────────────▼──────────────────────────────┐
│ Декодер VAE │
│ - Латентный → Скрытый слой (ReLU) │
│ - Скрытый → Восстановленные признаки LOB │
└──────────────────┬──────────────────────────────┘
┌──────────────────▼──────────────────────────────┐
│ Торговые сигналы │
│ - Оповещения об аномалиях │
│ - Обнаружение смены режима │
│ - Оценка качества LOB │
└─────────────────────────────────────────────────┘

Основные компоненты

  • LobSnapshot: Сырой снимок книги ордеров с уровнями bid/ask
  • LobFeatureExtractor: Преобразование сырых снимков в нормализованные векторы признаков
  • VaeLob: Основная модель VAE с энкодером, декодером, репараметризацией и функцией потерь ELBO
  • AnomalyDetector: Вычисление показателей аномальности по ошибке реконструкции
  • BybitClient: Получение данных книги ордеров через Bybit REST API

5. Интеграция с Bybit

Реализация подключается к REST API Bybit V5 для получения данных книги ордеров в реальном времени:

  • Эндпоинт: GET /v5/market/orderbook
  • Параметры: category=linear, symbol=BTCUSDT, limit=50
  • Ответ: Массивы пар [цена, объём] для бидов и асков

BybitClient обеспечивает:

  • Формирование HTTP-запросов и обработку ошибок
  • Десериализацию JSON в типизированные структуры Rust
  • Соблюдение ограничений по частоте запросов
  • Преобразование во внутренний формат LobSnapshot

Конвейер данных

  1. Получение: Загрузка снимка книги ордеров через Bybit REST API
  2. Парсинг: Десериализация JSON в структуру LobSnapshot
  3. Нормализация: Применение нормализации цен/объёмов через LobFeatureExtractor
  4. Кодирование: Пропуск через энкодер VAE для получения латентного представления
  5. Анализ: Вычисление показателей аномальности, меток режимов или генерация синтетических данных
  6. Действие: Генерация торговых сигналов на основе анализа латентного пространства

6. Ключевые выводы

  1. VAE предоставляют принципиальный фреймворк для обучения компактных вероятностных представлений данных LOB. Цель ELBO балансирует точность реконструкции с регулярностью латентного пространства.

  2. Трюк репараметризации необходим для обучения — он разделяет стохастическую выборку и вычисление градиентов, позволяя сквозное обратное распространение.

  3. Обнаружение аномалий через ошибку реконструкции — мощный метод без учителя для выявления необычных рыночных условий. Размеченные данные аномалий не требуются.

  4. Интерполяция в латентном пространстве позволяет генерировать правдоподобные промежуточные состояния LOB для аугментации данных и рыночной симуляции.

  5. Взвешивание Beta-VAE контролирует компромисс между качеством реконструкции и структурой латентного пространства. Оптимальное $\beta$ зависит от задачи.

  6. Условная генерация на основе режимов с CVAE позволяет целенаправленно синтезировать данные LOB для конкретных рыночных условий.

  7. Реализация на Rust обеспечивает производительность для обработки LOB в реальном времени с гарантиями безопасности памяти.

  8. Само латентное пространство информативно — кластеризация латентных представлений выявляет естественные рыночные режимы, а отслеживание латентных траекторий захватывает рыночную динамику эффективнее сырых признаков.