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

Глава 279: Генеративные модели для торговли на основе книги заявок (LOB)

1. Введение

Книга лимитных заявок (Limit Order Book, LOB) — это фундаментальная структура данных современных электронных рынков. Она записывает все активные заявки на покупку и продажу на каждом ценовом уровне, предоставляя снимок спроса и предложения в реальном времени. Понимание динамики LOB критически важно для маркет-мейкинга, оптимального исполнения и управления рисками. Однако исторические данные LOB дороги, разрежены и часто недостаточны для обучения надёжных торговых моделей или стресс-тестирования стратегий в разнообразных рыночных условиях.

Генеративные модели предлагают убедительное решение: изучить статистические свойства реальных данных книги заявок и синтезировать реалистичные последовательности LOB по требованию. В этой главе рассматриваются три семейства генеративных моделей — вариационные автоэнкодеры (VAE), генеративно-состязательные сети (GAN) и диффузионные модели — применённые к симуляции LOB. Мы реализуем полный конвейер на Rust: от получения данных книги заявок Bybit до кодирования состояний LOB с помощью VAE и генерации синтетического потока заявок.

Почему генеративные модели LOB важны

  1. Аугментация данных: Реальные данные LOB ограничены; генеративные модели могут производить неограниченное количество реалистичных обучающих примеров.
  2. Симуляция рынка: Тестирование торговых стратегий на синтетических, но статистически достоверных рыночных сценариях.
  3. Стресс-тестирование: Генерация экстремальных рыночных условий (мгновенные обвалы, иссушение ликвидности), которые редко встречаются в исторических данных.
  4. Имитация потока заявок: Изучение поведения опытных участников рынка и симуляция их воздействия.
  5. Конфиденциальность и соответствие: Обмен синтетическими данными без раскрытия проприетарной торговой информации.

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

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

Снимок LOB в момент времени $t$ представляется матрицей $\mathbf{L}_t \in \mathbb{R}^{K \times 4}$, где $K$ — количество ценовых уровней на каждой стороне. Для каждого уровня $k$:

$$\mathbf{L}_t[k] = (p_k^{bid}, q_k^{bid}, p_k^{ask}, q_k^{ask})$$

где $p_k$ обозначает цену, $q_k$ — объём. Стандартная нормализация преобразует цены относительно средней цены:

$$\tilde{p}_k = \frac{p_k - m_t}{m_t}, \quad m_t = \frac{p_1^{bid} + p_1^{ask}}{2}$$

Объёмы преобразуются логарифмически: $\tilde{q}_k = \log(1 + q_k)$.

Развёрнутый вектор LOB $\mathbf{x}_t \in \mathbb{R}^{4K}$ служит входом для генеративных моделей.

2.2 Вариационный автоэнкодер (VAE) для LOB

VAE обучает латентное представление $\mathbf{z} \in \mathbb{R}^d$ состояний LOB:

Энкодер $q_\phi(\mathbf{z}|\mathbf{x})$: $$\mu = f_\mu(\mathbf{x}; \phi), \quad \log\sigma^2 = f_\sigma(\mathbf{x}; \phi)$$ $$\mathbf{z} = \mu + \sigma \odot \epsilon, \quad \epsilon \sim \mathcal{N}(0, I)$$

Декодер $p_\theta(\mathbf{x}|\mathbf{z})$: $$\hat{\mathbf{x}} = g(\mathbf{z}; \theta)$$

Функция потерь (ELBO): $$\mathcal{L}(\theta, \phi; \mathbf{x}) = \mathbb{E}{q\phi(\mathbf{z}|\mathbf{x})}[\log p_\theta(\mathbf{x}|\mathbf{z})] - D_{KL}(q_\phi(\mathbf{z}|\mathbf{x}) | p(\mathbf{z}))$$

Член реконструкции обеспечивает точность; член KL регуляризует латентное пространство к $\mathcal{N}(0, I)$, обеспечивая плавную интерполяцию и сэмплирование.

2.3 GAN для генерации LOB

GAN состоит из:

Генератор $G_\theta$: Отображает шум $\mathbf{z} \sim \mathcal{N}(0, I)$ в синтетические состояния LOB.

Дискриминатор $D_\phi$: Классифицирует состояния LOB как реальные или синтетические.

$$\min_\theta \max_\phi ; \mathbb{E}{\mathbf{x} \sim p{data}}[\log D_\phi(\mathbf{x})] + \mathbb{E}{\mathbf{z} \sim p_z}[\log(1 - D\phi(G_\theta(\mathbf{z})))]$$

Для данных LOB Wasserstein GAN с штрафом за градиент (WGAN-GP) улучшает стабильность обучения:

$$\mathcal{L}D = \mathbb{E}{\tilde{\mathbf{x}}}[D(\tilde{\mathbf{x}})] - \mathbb{E}{\mathbf{x}}[D(\mathbf{x})] + \lambda \mathbb{E}{\hat{\mathbf{x}}}[(|\nabla_{\hat{\mathbf{x}}} D(\hat{\mathbf{x}})|_2 - 1)^2]$$

2.4 Диффузионные модели для LOB

Диффузионные модели на основе оценки скора определяют прямой процесс зашумления:

$$q(\mathbf{x}_t | \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t} \mathbf{x}_0, (1-\bar{\alpha}_t)I)$$

и обучают обратный процесс шумоподавления:

$$p_\theta(\mathbf{x}{t-1}|\mathbf{x}t) = \mathcal{N}(\mathbf{x}{t-1}; \mu\theta(\mathbf{x}_t, t), \sigma_t^2 I)$$

Сеть предсказания шума $\epsilon_\theta(\mathbf{x}_t, t)$ обучается с:

$$\mathcal{L} = \mathbb{E}_{t, \mathbf{x}0, \epsilon}\left[|\epsilon - \epsilon\theta(\sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\epsilon, t)|^2\right]$$

Диффузионные модели превосходно справляются с мультимодальными распределениями с тяжёлыми хвостами, характерными для данных LOB.

2.5 Метрики статистической валидации

Качество сгенерированных данных LOB оценивается по:

  1. Распределение средней цены: $\hat{m}_t = \frac{\hat{p}_1^{bid} + \hat{p}_1^{ask}}{2}$ должно соответствовать реальному распределению.
  2. Распределение спреда: $s_t = p_1^{ask} - p_1^{bid}$ — статистики (среднее, дисперсия, квантили).
  3. Профиль объёма: Распределение объёмов по ценовым уровням.
  4. Структура автокорреляции: Временные зависимости в доходностях средней цены.
  5. Стилизованные факты: Тяжёлые хвосты, кластеризация волатильности, возврат к среднему спреда.

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

3.1 Симуляция рынка

Генеративные модели LOB создают полностью синтетические рынки для бэктестинга. В отличие от симуляции на основе воспроизведения (которая не может реагировать на действия агента), генеративный симулятор может создавать правдоподобные рыночные реакции на гипотетические заявки. Это позволяет:

  • Реалистичную оценку проскальзывания для крупных заявок
  • Тестирование стратегий маркет-мейкинга в разнообразных условиях
  • Оценку рыночного воздействия различных алгоритмов исполнения

3.2 Стресс-тестирование

Обусловливая генеративные модели экстремальными латентными кодами или интерполируя к историческим сценариям обвала, можно синтезировать:

  • Динамику мгновенных обвалов с быстрым испарением ликвидности
  • События резкого расширения спреда
  • Сценарии каскадных ликвидаций
  • Режимы низкой ликвидности для неликвидных активов

Риск-менеджеры могут затем оценить поведение портфеля при этих синтетических, но реалистичных стрессовых сценариях.

3.3 Имитация потока заявок

Генеративные модели могут изучить “стиль” конкретных участников рынка:

  • Маркет-мейкеры: Симметричное размещение заявок вокруг средней цены, быстрая отмена
  • Моментум-трейдеры: Агрессивный поток заявок вслед за ценовыми трендами
  • Институциональное исполнение: Айсберг-заявки, паттерны TWAP/VWAP

Обусловливая генератор типом участника, мы создаём агентные симуляции с гетерогенными, реалистичными участниками.

3.4 Аугментация данных для последующих моделей

Обучение альфа-моделей, алгоритмов исполнения или моделей риска на смеси реальных и синтетических данных LOB:

  • Преодоление дисбаланса классов (редкие события становятся более частыми в синтетических данных)
  • Улучшение обобщения за счёт разнообразных рыночных условий
  • Бутстрап доверительных интервалов для производительности стратегий

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

Наша реализация на Rust предоставляет:

  • LobSnapshot: Основная структура данных для состояний LOB с нормализацией
  • LobVae: Вариационный автоэнкодер для кодирования и генерации LOB
  • LobGenerator: Высокоуровневый интерфейс для генерации синтетических состояний LOB
  • LobValidator: Статистическое сравнение реальных и синтетических данных
  • BybitClient: API-клиент для получения данных книги заявок в реальном времени

Ключевые проектные решения:

  • Использование ndarray для эффективных матричных операций
  • Реализация трюка репараметризации для сэмплирования VAE
  • Синхронный и асинхронный доступ к API Bybit
  • Комплексные утилиты статистической валидации

Подробности см. в rust/src/lib.rs и rust/examples/trading_example.rs.

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

Мы получаем данные книги заявок в реальном времени через API Bybit V5, эндпоинт /v5/market/orderbook:

GET https://api.bybit.com/v5/market/orderbook?category=spot&symbol=BTCUSDT&limit=50

Ответ содержит массивы bid и ask с парами [цена, объём]. Наш BybitClient обеспечивает:

  • Формирование HTTP-запросов с корректными параметрами
  • JSON-десериализацию в формат LobSnapshot
  • Автоматическую нормализацию (относительные цены, логарифмические объёмы)
  • Обработку ошибок сети и ограничений API

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

  1. Получение: Сбор снимков LOB через регулярные интервалы (например, каждые 100мс)
  2. Нормализация: Преобразование в относительные цены и логарифмические объёмы
  3. Обучение: Подгонка VAE на собранных снимках
  4. Генерация: Сэмплирование синтетических состояний LOB из обученного латентного пространства
  5. Валидация: Сравнение статистических свойств реальных и синтетических данных

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

  1. LOB как богатый источник данных: Книга заявок отражает микроструктуру рынка далеко за пределами простых ценовых данных, предоставляя информацию о ликвидности, дисбалансе и намерениях трейдеров.

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

  3. GAN для высокоточной симуляции: WGAN-GP создаёт более чёткие, реалистичные снимки LOB, но требует тщательной настройки гиперпараметров.

  4. Диффузионные модели захватывают тяжёлые хвосты: Итеративный процесс шумоподавления естественно обрабатывает мультимодальные распределения с тяжёлыми хвостами в данных LOB.

  5. Статистическая валидация необходима: Сгенерированные данные LOB должны сохранять ключевые стилизованные факты для полезности в последующих приложениях.

  6. Практические применения обширны: От стресс-тестирования до аугментации данных и симуляции рынка — генеративные модели LOB имеют непосредственную практическую ценность.

  7. Rust для производительности: Обработка LOB требует работы с миллионами событий в секунду; абстракции Rust с нулевой стоимостью делают его идеальным для промышленных генеративных систем LOB.

  8. Интеграция с реальными данными: Подключение к API бирж (таких как Bybit) обеспечивает непрерывное обновление модели и генерацию синтетических данных в реальном времени.

Литература

  • Cont, R. (2001). “Empirical properties of asset returns: stylized facts and statistical issues.” Quantitative Finance.
  • Kingma, D.P., & Welling, M. (2014). “Auto-Encoding Variational Bayes.” ICLR.
  • Arjovsky, M., Chintala, S., & Bottou, L. (2017). “Wasserstein GAN.” ICML.
  • Ho, J., Jain, A., & Abbeel, P. (2020). “Denoising Diffusion Probabilistic Models.” NeurIPS.
  • Coletta, A., et al. (2023). “On the Constrained Time-Series Generation Problem.” NeurIPS.
  • Li, J., et al. (2020). “Generating Realistic Stock Market Order Streams.” AAAI.
  • Cont, R., Stoikov, S., & Talreja, R. (2010). “A Stochastic Model for Order Book Dynamics.” Operations Research.