Глава 261: Глубокое обучение на данных книги заявок (LOB)
1. Введение
Книга лимитных заявок (Limit Order Book, LOB) — это фундаментальная структура данных, обеспечивающая ценообразование на современных электронных биржах. Она поддерживает запись всех активных заявок на покупку (bid) и продажу (ask) на различных ценовых уровнях в реальном времени. Понимание динамики LOB даёт значительное преимущество в прогнозировании краткосрочных ценовых движений, событий рыночной микроструктуры и условий ликвидности.
Глубокое обучение на LOB применяет архитектуры нейронных сетей к необработанным данным книги заявок — полной глубине бидов и асков на множестве ценовых уровней — для прогнозирования движения средней цены, обнаружения изменений ликвидности и информирования стратегий исполнения. В отличие от традиционных подходов, основанных на рукотворных признаках из данных OHLCV, глубокое обучение на LOB работает непосредственно с многомерной, изменяющейся во времени структурой самой книги заявок.
Ключевая идея заключается в том, что форма книги заявок — распределение объёма по ценовым уровням, дисбаланс между бидами и асками, и то, как эти величины эволюционируют во времени — содержит богатую предсказательную информацию о будущих ценовых движениях. Модели глубокого обучения способны извлекать и комбинировать эти сигналы способами, значительно превосходящими возможности ручной инженерии признаков.
В этой главе мы создаём полную систему глубокого обучения на LOB на Rust, демонстрируем её работу как с данными фондового рынка, так и криптовалютного (биржа Bybit), и исследуем, как различные архитектуры нейронных сетей захватывают динамику книги заявок для принятия торговых решений.
2. Математические основы
2.1 Представление книги заявок
В любой момент времени t LOB может быть представлена как вектор-снимок, содержащий L уровней с каждой стороны:
x(t) = [p_a^1, v_a^1, p_b^1, v_b^1, ..., p_a^L, v_a^L, p_b^L, v_b^L]где p_a^i и v_a^i — цена и объём на i-м уровне аска, а p_b^i и v_b^i — цена и объём на i-м уровне бида. Для L = 10 уровней это даёт 40-мерный вектор снимка.
2.2 Средняя цена и определение метки
Средняя цена определяется как:
p_mid(t) = (p_a^1(t) + p_b^1(t)) / 2Целевая переменная для предсказания — сглаженное будущее движение средней цены:
m(t) = (1/k) * sum_{i=1}^{k} p_mid(t+i) - p_mid(t)Это классифицируется в три категории с использованием порога theta:
- Рост (метка = 2):
m(t) > theta - Стационарно (метка = 1):
-theta <= m(t) <= theta - Падение (метка = 0):
m(t) < -theta
2.3 Дисбаланс потока заявок (OFI)
Ключевой производный признак — дисбаланс потока заявок:
OFI(t) = (v_b^1(t) - v_b^1(t-1)) * I(p_b^1(t) >= p_b^1(t-1)) - (v_a^1(t) - v_a^1(t-1)) * I(p_a^1(t) <= p_a^1(t-1))где I(·) — индикаторная функция. Положительный OFI указывает на давление покупателей; отрицательный — на давление продавцов.
2.4 Дисбаланс объёмов
Дисбаланс объёмов на каждом уровне отражает относительную силу бидов против асков:
VI^i(t) = (v_b^i(t) - v_a^i(t)) / (v_b^i(t) + v_a^i(t))Эта нормализованная мера варьируется от -1 (весь объём на стороне аска) до +1 (весь объём на стороне бида).
2.5 Архитектуры глубокого обучения для LOB
Свёрточный подход (стиль DeepLOB)
Свёрточный подход рассматривает последовательность снимков LOB как двумерную структуру:
Вход: [T, 4L] временной ряд снимков LOB -> Слои Conv1D (извлечение пространственных паттернов по уровням) -> Inception-модули (многомасштабное извлечение признаков) -> Слой LSTM (захват временных зависимостей) -> Полносвязный слой -> Softmax (3-классовое предсказание)Подход MLP
Более простой, но эффективный подход с использованием полносвязных слоёв:
Вход: [T * 4L] развёрнутые признаки LOB -> Dense(256, ReLU) -> Dropout -> Dense(128, ReLU) -> Dropout -> Dense(64, ReLU) -> Dense(3, Softmax) (Рост/Падение/Стационарно)2.6 Функция потерь перекрёстной энтропии
Модель обучается с категориальной перекрёстной энтропией:
L = -sum_{c=0}^{2} y_c * log(p_c)где y_c — one-hot кодированная истинная метка, а p_c — предсказанная вероятность для класса c.
3. Почему глубокое обучение на LOB работает для трейдинга
3.1 Информационное преимущество
LOB содержит информацию, невидимую на ценовых графиках. Крупные заявки на отдых, зоны тонкой ликвидности и паттерны потока заявок предоставляют сигналы о предстоящих ценовых движениях до того, как они появятся в данных OHLCV.
3.2 Нелинейные паттерны
Связь между признаками книги заявок и ценовыми движениями крайне нелинейна. Например, крупная заявка на покупку может поддерживать цену — или она может быть сигналом «спуфинга», который будет отозван. Модели глубокого обучения способны научиться различать эти контексты.
3.3 Многомасштабные зависимости
Ценовые движения подвержены влиянию динамики книги заявок на множестве временных масштабов: эффекты микроструктуры тик-за-тиком, краткосрочный моментум (секунды-минуты) и долгосрочные тренды потока заявок. Архитектуры, комбинирующие CNN и RNN, естественным образом захватывают эти многомасштабные паттерны.
3.4 Адаптивное обучение признаков
Вместо того чтобы полагаться на рукотворные признаки, такие как VWAP или коэффициенты дисбаланса книги, глубокое обучение автоматически обнаруживает релевантные признаки из сырых данных. Это особенно ценно, поскольку наиболее информативные признаки могут меняться между рыночными режимами.
3.5 Преимущество в высокочастотной торговле
Глубокое обучение на LOB особенно мощно в высокочастотной области, где:
- Традиционные индикаторы слишком медленны
- Соотношение сигнал/шум в необработанных данных книги заявок выше, чем в агрегированных данных
- Качество исполнения критически зависит от понимания динамики микроструктуры
4. Реализация на Rust
Наша реализация на Rust состоит из нескольких ключевых компонентов:
4.1 Архитектура сети
Нейронная сеть LOB обрабатывает снимки книги заявок для предсказания направления средней цены:
Вход: признаки LOB (40 признаков для 10 уровней × 4 значения) -> Скрытый слой 1 (256 нейронов, ReLU) -> Скрытый слой 2 (128 нейронов, ReLU) -> Скрытый слой 3 (64 нейрона, ReLU) -> Выход: 3 класса (Падение, Стационарно, Рост) через Softmax4.2 Основные компоненты
LOBNetwork: Многослойная нейронная сеть для предсказания направления средней цены на основе данных LOB.LOBSnapshot: Структурированное представление снимка книги заявок с ценами и объёмами бидов/асков.LOBEnvironment: Моделирует торговую среду, управляемую снимками LOB, с управлением позициями и транзакционными издержками.LOBAgent: Агент, использующий сеть LOB для epsilon-жадного выбора действий и обучения через воспроизведение опыта.BybitClient: Получает данные OHLCV из API Bybit и синтезирует LOB-подобные признаки.
4.3 Цикл обучения
для каждого эпизода: состояние = среда.сброс() пока не завершено: признаки = извлечь_признаки_lob(состояние) действие = epsilon_жадный(признаки) след_состояние, награда, завершено = среда.шаг(действие) буфер.добавить(состояние, действие, награда, след_состояние, завершено) если буфер.длина() >= размер_батча: батч = буфер.выборка(размер_батча) предсказания = сеть.вперёд(батч.состояния) потеря = перекрёстная_энтропия(предсказания, батч.цели) обновить_веса(потеря) периодически: копировать веса в целевую сеть4.4 Инженерия признаков
Вектор состояния включает признаки, извлечённые из снимков LOB:
- Цены бидов и асков на 10 уровнях глубины
- Объёмы бидов и асков на 10 уровнях глубины
- Дисбаланс объёмов на каждом уровне
- Спред бид-аск, нормализованный по средней цене
- Дисбаланс потока заявок (OFI)
- Кумулятивная дельта объёмов
5. Интеграция с Bybit
Реализация получает реальные рыночные данные из API биржи Bybit:
// Получение минутных свечей BTCUSDTlet client = BybitClient::new();let klines = client.fetch_klines_blocking("BTCUSDT", "1", 1000)?;5.1 Конечные точки API
Мы используем конечную точку Bybit V5 API для данных свечей (kline):
GET https://api.bybit.com/v5/market/kline?category=linear&symbol=BTCUSDT&interval=1&limit=10005.2 Реконструкция LOB из OHLCV
Поскольку полные данные LOB требуют прямого подключения к бирже, мы реконструируем LOB-подобные признаки из данных OHLCV:
- Получение: Сырые данные OHLCV из Bybit для нескольких символов (BTCUSDT, ETHUSDT)
- Синтез LOB: Генерация реалистичных уровней бидов/асков из цен high/low/close и объёма
- Вычисление признаков: Расчёт дисбаланса потока заявок, дисбаланса объёмов, динамики спреда
- Нормализация: Масштабирование признаков до подходящих диапазонов для входа нейронной сети
- Разметка: Вычисление сглаженных движений средней цены и классификация как Рост/Падение/Стационарно
5.3 Моделирование среды
Торговая среда моделирует исполнение ордеров на основе динамики LOB:
- Действия: Купить (0), Продать (1), Удерживать (2)
- Награда: Логарифмическая доходность позиции с учётом спреда и транзакционных издержек
- Отслеживание позиции: Поддержание текущего состояния позиции (-1 шорт, 0 вне позиции, 1 лонг)
- Транзакционные издержки: Настраиваемая модель комиссий (по умолчанию 0.075% для фьючерсов Bybit) плюс проскальзывание в полспреда
6. Ключевые выводы
-
Книга заявок — источник истины: В то время как данные OHLCV агрегируют рыночную активность в сводную статистику, LOB сохраняет полную картину спроса и предложения. Глубокое обучение на данных LOB получает доступ к информации, принципиально недоступной на свечных графиках.
-
Дисбаланс объёмов — сильнейший отдельный предиктор: В множестве исследований и наших экспериментах соотношение объёма бидов к аскам на лучших уровнях неизменно является наиболее информативным признаком для краткосрочного направления цены.
-
Многомасштабные архитектуры захватывают динамику микроструктуры: Комбинирование свёрточных слоёв (для межуровневых паттернов) с рекуррентными слоями (для временной динамики) отражает многомасштабную природу эволюции книги заявок.
-
Нормализация критически важна: Необработанные данные LOB сильно варьируются между инструментами и периодами. Правильная нормализация — с использованием логарифмических цен, соотношений объёмов и z-нормализации — необходима для стабильного обучения.
-
Метки важнее архитектуры: Выбор горизонта предсказания
kи порогаthetaоказывает большее влияние на практическую торговую эффективность, чем конкретная архитектура нейронной сети. -
Задержка — главное ограничение: В производственной торговле на основе LOB вывод модели должен завершаться за микросекунды. Абстракции с нулевой стоимостью Rust и отсутствие сборщика мусора делают его идеальным выбором для развёртывания моделей глубокого обучения на LOB.
-
Rust обеспечивает обработку LOB производственного уровня: Комбинация безопасности памяти, абстракций с нулевой стоимостью и библиотеки ndarray позволяет выполнять эффективные матричные операции на скорости, необходимой для анализа книги заявок в реальном времени.
-
Синтетические LOB-признаки из OHLCV — практичная отправная точка: Хотя полные данные LOB обеспечивают наиболее богатые сигналы, LOB-подобные признаки, извлечённые из данных OHLCV, всё же содержат значимую информацию о микроструктуре и могут применяться к любой бирже.
Ссылки
- Zhang, Z., Zohren, S., & Roberts, S. (2019). “DeepLOB: Deep Convolutional Neural Networks for Limit Order Books.” IEEE Transactions on Signal Processing.
- Sirignano, J. A. (2019). “Deep Learning for Limit Order Books.” Quantitative Finance.
- Briola, A., Turiel, J., Marcaccioli, R., & Aste, T. (2024). “Deep Limit Order Book Forecasting: A Microstructural Guide.” arXiv:2403.09267.
- Cont, R., Kukanov, A., & Stoikov, S. (2014). “The Price Impact of Order Book Events.” Journal of Financial Econometrics.
- Документация Bybit API: https://bybit-exchange.github.io/docs/v5/intro