Глава 279: Генеративные модели для торговли на основе книги заявок (LOB)
1. Введение
Книга лимитных заявок (Limit Order Book, LOB) — это фундаментальная структура данных современных электронных рынков. Она записывает все активные заявки на покупку и продажу на каждом ценовом уровне, предоставляя снимок спроса и предложения в реальном времени. Понимание динамики LOB критически важно для маркет-мейкинга, оптимального исполнения и управления рисками. Однако исторические данные LOB дороги, разрежены и часто недостаточны для обучения надёжных торговых моделей или стресс-тестирования стратегий в разнообразных рыночных условиях.
Генеративные модели предлагают убедительное решение: изучить статистические свойства реальных данных книги заявок и синтезировать реалистичные последовательности LOB по требованию. В этой главе рассматриваются три семейства генеративных моделей — вариационные автоэнкодеры (VAE), генеративно-состязательные сети (GAN) и диффузионные модели — применённые к симуляции LOB. Мы реализуем полный конвейер на Rust: от получения данных книги заявок Bybit до кодирования состояний LOB с помощью VAE и генерации синтетического потока заявок.
Почему генеративные модели LOB важны
- Аугментация данных: Реальные данные LOB ограничены; генеративные модели могут производить неограниченное количество реалистичных обучающих примеров.
- Симуляция рынка: Тестирование торговых стратегий на синтетических, но статистически достоверных рыночных сценариях.
- Стресс-тестирование: Генерация экстремальных рыночных условий (мгновенные обвалы, иссушение ликвидности), которые редко встречаются в исторических данных.
- Имитация потока заявок: Изучение поведения опытных участников рынка и симуляция их воздействия.
- Конфиденциальность и соответствие: Обмен синтетическими данными без раскрытия проприетарной торговой информации.
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 оценивается по:
- Распределение средней цены: $\hat{m}_t = \frac{\hat{p}_1^{bid} + \hat{p}_1^{ask}}{2}$ должно соответствовать реальному распределению.
- Распределение спреда: $s_t = p_1^{ask} - p_1^{bid}$ — статистики (среднее, дисперсия, квантили).
- Профиль объёма: Распределение объёмов по ценовым уровням.
- Структура автокорреляции: Временные зависимости в доходностях средней цены.
- Стилизованные факты: Тяжёлые хвосты, кластеризация волатильности, возврат к среднему спреда.
3. Применения
3.1 Симуляция рынка
Генеративные модели LOB создают полностью синтетические рынки для бэктестинга. В отличие от симуляции на основе воспроизведения (которая не может реагировать на действия агента), генеративный симулятор может создавать правдоподобные рыночные реакции на гипотетические заявки. Это позволяет:
- Реалистичную оценку проскальзывания для крупных заявок
- Тестирование стратегий маркет-мейкинга в разнообразных условиях
- Оценку рыночного воздействия различных алгоритмов исполнения
3.2 Стресс-тестирование
Обусловливая генеративные модели экстремальными латентными кодами или интерполируя к историческим сценариям обвала, можно синтезировать:
- Динамику мгновенных обвалов с быстрым испарением ликвидности
- События резкого расширения спреда
- Сценарии каскадных ликвидаций
- Режимы низкой ликвидности для неликвидных активов
Риск-менеджеры могут затем оценить поведение портфеля при этих синтетических, но реалистичных стрессовых сценариях.
3.3 Имитация потока заявок
Генеративные модели могут изучить “стиль” конкретных участников рынка:
- Маркет-мейкеры: Симметричное размещение заявок вокруг средней цены, быстрая отмена
- Моментум-трейдеры: Агрессивный поток заявок вслед за ценовыми трендами
- Институциональное исполнение: Айсберг-заявки, паттерны TWAP/VWAP
Обусловливая генератор типом участника, мы создаём агентные симуляции с гетерогенными, реалистичными участниками.
3.4 Аугментация данных для последующих моделей
Обучение альфа-моделей, алгоритмов исполнения или моделей риска на смеси реальных и синтетических данных LOB:
- Преодоление дисбаланса классов (редкие события становятся более частыми в синтетических данных)
- Улучшение обобщения за счёт разнообразных рыночных условий
- Бутстрап доверительных интервалов для производительности стратегий
4. Реализация на Rust
Наша реализация на Rust предоставляет:
LobSnapshot: Основная структура данных для состояний LOB с нормализациейLobVae: Вариационный автоэнкодер для кодирования и генерации LOBLobGenerator: Высокоуровневый интерфейс для генерации синтетических состояний LOBLobValidator: Статистическое сравнение реальных и синтетических данных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
Конвейер данных
- Получение: Сбор снимков LOB через регулярные интервалы (например, каждые 100мс)
- Нормализация: Преобразование в относительные цены и логарифмические объёмы
- Обучение: Подгонка VAE на собранных снимках
- Генерация: Сэмплирование синтетических состояний LOB из обученного латентного пространства
- Валидация: Сравнение статистических свойств реальных и синтетических данных
6. Ключевые выводы
-
LOB как богатый источник данных: Книга заявок отражает микроструктуру рынка далеко за пределами простых ценовых данных, предоставляя информацию о ликвидности, дисбалансе и намерениях трейдеров.
-
VAE для структурированной генерации: VAE хорошо подходят для данных LOB, поскольку обучают гладкое латентное пространство, уважающее структурные ограничения книги заявок (монотонные цены, положительные объёмы).
-
GAN для высокоточной симуляции: WGAN-GP создаёт более чёткие, реалистичные снимки LOB, но требует тщательной настройки гиперпараметров.
-
Диффузионные модели захватывают тяжёлые хвосты: Итеративный процесс шумоподавления естественно обрабатывает мультимодальные распределения с тяжёлыми хвостами в данных LOB.
-
Статистическая валидация необходима: Сгенерированные данные LOB должны сохранять ключевые стилизованные факты для полезности в последующих приложениях.
-
Практические применения обширны: От стресс-тестирования до аугментации данных и симуляции рынка — генеративные модели LOB имеют непосредственную практическую ценность.
-
Rust для производительности: Обработка LOB требует работы с миллионами событий в секунду; абстракции Rust с нулевой стоимостью делают его идеальным для промышленных генеративных систем LOB.
-
Интеграция с реальными данными: Подключение к 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.