Глава 274: Предсказание на основе CNN и книги заявок (LOB)
1. Введение — Свёрточные нейронные сети для данных книги заявок
Книга лимитных заявок (Limit Order Book, LOB) — это фундаментальная структура данных современных электронных рынков. В каждый момент времени LOB фиксирует все ожидающие ордера на покупку (bid) и продажу (ask) на дискретных ценовых уровнях. Если расположить последовательные снимки LOB вдоль временной оси, получится двумерная матрица, поразительно напоминающая изображение в оттенках серого: строки соответствуют ценовым уровням, а столбцы — временным шагам. Это наблюдение открывает путь к применению свёрточных нейронных сетей (CNN) — основного инструмента компьютерного зрения — к предсказанию микроструктуры финансовых рынков.
Почему CNN для LOB?
Традиционное конструирование признаков на данных LOB вручную создаёт такие статистики, как спред, дисбаланс ордеров или средневзвешенную цену. CNN заменяют этот ручной процесс обучаемыми пространственными фильтрами, которые автоматически извлекают информативные паттерны из сырого представления LOB:
- Локальные паттерны по ценовым уровням — одномерная свёртка, скользящая вертикально по уровням, обнаруживает дисбаланс спроса и предложения, стены ликвидности или тонкие зоны в книге.
- Временные паттерны по снимкам — одномерная свёртка вдоль временной оси обнаруживает моментум, микросигнатуры возврата к среднему или мерцающие котировки.
- Совместные пространственно-временные паттерны — двумерная свёртка одновременно захватывает эволюцию формы книги во времени, аналогично обнаружению краёв и текстур на изображениях.
Основополагающая архитектура DeepLOB (Zhang et al., 2019) продемонстрировала, что гибрид CNN–LSTM достигает наилучшей точности предсказания движения средней цены для различных классов активов.
LOB как изображение
Рассмотрим LOB с L ценовыми уровнями на каждой стороне (bid и ask) и T последовательными снимками. Мы строим матрицу формы (2L, T) или, эквивалентно, многоканальный тензор формы (C, L, T), где каналы кодируют цену, объём и производные признаки. Это «изображение LOB» является входом нашей CNN.
Время → t₁ t₂ t₃ ... tTУровень 1 (ask L) [ v v v ... v ]Уровень 2 [ v v v ... v ] ...Уровень L (ask 1) [ v v v ... v ]Уровень L+1 (bid 1) [ v v v ... v ] ...Уровень 2L (bid L) [ v v v ... v ]Каждая ячейка содержит объём (или нормализованный лог-объём) на данном ценовом уровне и временном шаге.
2. Математические основы
2.1 Одномерная свёртка по ценовым уровням
Пусть x ∈ ℝ^(2L) — один столбец изображения LOB (один снимок). Одномерная свёртка с ядром w ∈ ℝ^k даёт выход:
$$ y_i = \sigma!\left(\sum_{j=0}^{k-1} w_j \cdot x_{i+j} + b\right), \quad i = 0, 1, \ldots, 2L - k $$
где σ — нелинейная функция активации (например, ReLU), b — смещение, k — размер ядра. С шагом s мы выбираем каждую s-ю позицию:
$$ y_i = \sigma!\left(\sum_{j=0}^{k-1} w_j \cdot x_{i \cdot s + j} + b\right) $$
Паддинг: Для сохранения пространственных размерностей мы дополняем вход p нулями с каждой стороны, получая длину выхода ⌊(2L + 2p − k) / s⌋ + 1.
2.2 Двумерная свёртка по снимкам LOB
Для изображения LOB X ∈ ℝ^(2L × T), двумерное ядро W ∈ ℝ^(kh × kw) даёт:
$$ Y_{i,j} = \sigma!\left(\sum_{m=0}^{k_h-1}\sum_{n=0}^{k_w-1} W_{m,n} \cdot X_{i+m,, j+n} + b\right) $$
Это захватывает совместные паттерны по ценовым уровням и времени. На практике используется несколько фильтров (F выходных каналов), поэтому тензор ядра имеет форму (F, C_in, kh, kw), а выход — F каналов.
2.3 Слои пулинга
Макс-пулинг уменьшает пространственные размерности, выбирая максимум в локальном окне:
$$ Y_{i,j} = \max_{0 \le m < p_h,; 0 \le n < p_w} X_{i \cdot p_h + m,; j \cdot p_w + n} $$
Это обеспечивает трансляционную инвариантность и снижает вычислительные затраты. Для данных LOB пулинг вдоль временной оси более распространён, чем по ценовым уровням, чтобы сохранить упорядоченную структуру книги.
2.4 Классификационная головка
После свёрточных слоёв и пулинга карты признаков разворачиваются в вектор z ∈ ℝ^d и передаются через полносвязные слои:
$$ \hat{y} = \text{softmax}(W_2 \cdot \text{ReLU}(W_1 \cdot z + b_1) + b_2) $$
получая распределение вероятностей по трём классам: Вверх, Вниз и Без изменений (для предсказания движения средней цены).
Функция потерь — перекрёстная энтропия:
$$ \mathcal{L} = -\sum_{c=1}^{3} y_c \log \hat{y}_c $$
3. Архитектура в стиле DeepLOB
Архитектура DeepLOB состоит из трёх основных блоков:
Блок 1: Свёрточное извлечение признаков
- Conv2D (32 фильтра, ядро 1×2, шаг 1×2) — захватывает попарные отношения цена–объём
- Conv2D (32 фильтра, ядро 4×1) — захватывает паттерны между уровнями
- Conv2D (32 фильтра, ядро 4×1) — более глубокие паттерны между уровнями
За каждой свёрткой следуют батч-нормализация и активация LeakyReLU.
Блок 2: Inception-модуль
Inception-подобный модуль применяет несколько размеров ядер параллельно (1×1, 3×1, 5×1) и конкатенирует результаты, захватывая многомасштабные паттерны по ценовым уровням одновременно.
Блок 3: Временная агрегация
В оригинальном DeepLOB LSTM обрабатывает последовательность векторов признаков. В нашем упрощённом варианте только с CNN мы заменяем это на:
- Одномерные временные свёртки с расширенными ядрами
- Глобальный средний пулинг вдоль временной оси
- Полносвязную классификационную головку
Сводка архитектуры
Вход: (batch, 1, 2L, T) → Блок Conv2D (32 фильтра) → Блок Conv2D (32 фильтра) → Блок Conv2D (32 фильтра) → Inception-модуль (многомасштабный) → Временная свёртка (64 фильтра) → Глобальный средний пулинг → FC(128) → ReLU → Dropout → FC(3) → SoftmaxВыход: P(вверх), P(вниз), P(без изменений)4. Применения
4.1 Предсказание направления средней цены
Основное применение — предсказание направления движения средней цены на коротком горизонте (например, 10, 20 или 50 тиков вперёд):
- Метка +1 (Вверх): средняя цена увеличивается более чем на порог α
- Метка −1 (Вниз): средняя цена уменьшается более чем на порог α
- Метка 0 (Без изменений): средняя цена остаётся в пределах ±α
Типичные горизонты предсказания — от миллисекунд до секунд в высокочастотных сценариях.
4.2 Предсказание пересечения спреда
Предсказание того, пересечёт ли лучший bid текущий лучший ask (или наоборот), что сигнализирует о скором движении цены.
4.3 Обнаружение дисбаланса объёмов
CNN могут обучаться обнаруживать временные дисбалансы объёмов между уровнями, которые предшествуют крупным ценовым движениям, действуя как система раннего предупреждения для институционального потока ордеров.
4.4 Токсичность потока ордеров
Анализируя эволюцию формы LOB, CNN могут оценить вероятность информированной торговой активности (аналогично VPIN, но обученной сквозным методом).
5. Реализация на Rust
Наша реализация на Rust предоставляет движок вывода CNN для предсказания на основе LOB, построенный с нуля. Ключевые компоненты:
Построение изображения LOB
Структура LobImage хранит двумерную матрицу формы (2 * levels, time_steps), где каждая ячейка содержит нормализованный объём на данном ценовом уровне и временном шаге. Мы получаем снимки книги заявок Bybit и располагаем их вдоль временной оси.
Свёрточные слои
Мы реализуем как одномерные, так и двумерные свёрточные слои с настраиваемым размером ядра, шагом и паддингом. Веса хранятся как массивы ndarray, а прямой проход выполняет свёртку через вложенные циклы.
Пулинг и классификация
Макс-пулинг уменьшает пространственные размерности. Полносвязная головка отображает развёрнутый вектор признаков в три выходных класса через softmax.
Интеграция с Bybit
Мы используем REST API Bybit v5 для получения данных книги заявок в реальном времени для любой торговой пары, преобразуем их в формат изображения LOB и запускаем вывод.
Полную реализацию см. в rust/src/lib.rs, а демонстрацию живой торговли — в rust/examples/trading_example.rs.
6. Интеграция данных Bybit
Эндпоинт книги заявок
GET https://api.bybit.com/v5/market/orderbook?category=spot&symbol=BTCUSDT&limit=50Возвращает до 200 уровней bid и ask. Мы используем верхние L уровней (например, 20) с каждой стороны.
Нормализация данных
Сырые объёмы нормализуются по каждому снимку для устранения эффектов абсолютного масштаба:
- Логарифмическое преобразование: v’ = log(1 + v)
- Z-нормализация: v” = (v’ − μ) / σ (вычисляется по текущему окну)
Сбор снимков
Для построения изображения LOB шириной T мы собираем T последовательных снимков с фиксированным интервалом опроса (например, 100мс–1с). Каждый снимок — это столбец в нашей матрице изображения.
Конвейер реального времени
Опрос книги заявок → Нормализация → Добавление в кольцевой буфер → Извлечение окна → Вывод CNN → СигналКольцевой буфер обеспечивает работу с постоянным объёмом памяти, подходящую для живой торговли.
7. Ключевые выводы
-
LOB как изображение: Представление книги лимитных заявок в виде двумерной матрицы (уровни × время) позволяет напрямую применять архитектуры CNN из компьютерного зрения.
-
Пространственные фильтры обучают микроструктуру: Одномерные свёртки по ценовым уровням автоматически обучают признаки дисбаланса спроса и предложения; двумерные свёртки захватывают совместную эволюцию книги во времени.
-
DeepLOB — эталон: Архитектура DeepLOB (CNN + LSTM) достигает наилучших результатов в предсказании средней цены. Наш вариант только с CNN жертвует некоторой точностью ради простоты и меньшей задержки.
-
Трёхклассовая классификация — стандарт: Предсказание Вверх/Вниз/Без изменений с softmax-головкой и перекрёстной энтропией — наиболее распространённая формулировка для задач предсказания на LOB.
-
Нормализация критически важна: Логарифмическое преобразование и z-нормализация объёмов необходимы для стабильного обучения и обобщения между различными активами и рыночными условиями.
-
Пулинг сохраняет структуру порядка: Макс-пулинг вдоль временной оси (но не по ценовым уровням) сохраняет упорядоченную природу книги при уменьшении размерности.
-
Компромисс задержка vs точность: Для живого HFT чистая CNN предпочтительнее CNN+LSTM из-за меньшей задержки вывода. Наша реализация на Rust приоритизирует ясность, но может быть оптимизирована для промышленного использования.
-
Качество данных первостепенно: Данные LOB зашумлены, с частыми отменами и модификациями. Надёжная предобработка (обработка отсутствующих уровней, интерполяция) необходима перед подачей данных в CNN.
Ссылки
- Zhang, Z., Zohren, S., & Roberts, S. (2019). DeepLOB: Deep Convolutional Neural Networks for Limit Order Books. IEEE Transactions on Signal Processing.
- Sirignano, J. (2019). Deep Learning for Limit Order Books. Quantitative Finance.
- Tsantekidis, A., et al. (2017). Using Deep Learning to Detect Price Change Indications in Financial Markets. European Signal Processing Conference.
- Passalis, N., et al. (2020). Temporal Bag-of-Features Learning for Predicting Mid Price Movements Using High Frequency Limit Order Book Data. IEEE Transactions on Emerging Topics in Computational Intelligence.