Глава 265: Прогнозирование тиковых данных с помощью машинного обучения
Введение
Тиковые данные представляют собой наиболее детальный уровень рыночной информации — каждая отдельная сделка и обновление котировки в реальном времени. В отличие от OHLCV-баров, агрегирующих ценовое движение за фиксированные интервалы, тиковые данные сохраняют точную микроструктуру того, как цены эволюционируют от сделки к сделке. Прогнозирование следующего тика (или последовательности тиков) — одна из самых сложных задач в количественных финансах, находящаяся на пересечении анализа временных рядов, точечных процессов и глубокого обучения.
В этой главе исследуются подходы машинного обучения к прогнозированию на уровне тиков для криптовалютных рынков. Мы строим модели, предсказывающие направление, величину и время следующего изменения цены, используя признаки, извлечённые из потока тиковых данных. Способность прогнозировать даже на несколько тиков вперёд с точностью выше случайной может транслироваться в значительную альфу для высокочастотных торговых стратегий.
Математические основы
Тиковые данные как маркированный точечный процесс
Пусть ${(t_i, p_i, v_i)}_{i=1}^{N}$ обозначает последовательность тиков, где $t_i$ — временная метка, $p_i$ — цена и $v_i$ — объём. Это маркированный точечный процесс, где:
- Межсобытийные интервалы $\delta_i = t_i - t_{i-1}$ подчиняются распределению $f(\delta | \mathcal{H}{t{i-1}})$, обусловленному историей $\mathcal{H}_t$
- Метки $(p_i, v_i)$ извлекаются из условного распределения $g(p, v | t_i, \mathcal{H}_{t_i^{-}})$
Процесс Хоукса для поступления тиков
Функция интенсивности процесса Хоукса моделирует самовозбуждающееся поступление тиков:
$$\lambda(t) = \mu + \sum_{t_i < t} \alpha \cdot e^{-\beta(t - t_i)}$$
где $\mu$ — базовая интенсивность, $\alpha$ управляет величиной возбуждения, а $\beta$ — скорость затухания. Коэффициент ветвления $\alpha / \beta < 1$ обеспечивает стационарность.
Для многомерных процессов Хоукса, моделирующих покупки и продажи отдельно:
$$\lambda_k(t) = \mu_k + \sum_{j \in {b, s}} \sum_{t_i^{(j)} < t} \alpha_{kj} \cdot e^{-\beta_{kj}(t - t_i^{(j)})}$$
Конструирование признаков на уровне тиков
По последовательности тиков до момента $t$ строим признаки:
Дисбаланс сделок (TI): $$TI_n(t) = \frac{\sum_{i=1}^{n} v_i \cdot \text{sign}(\Delta p_i)}{\sum_{i=1}^{n} v_i}$$
где $\Delta p_i = p_i - p_{i-1}$, а классификация знака использует алгоритм Ли-Рэди или правило тика.
Взвешенная скорость средней цены: $$\text{WMPV}(t) = \frac{1}{n} \sum_{i=1}^{n} w_i \cdot \frac{\Delta p_i}{\delta_i}$$
с экспоненциальными весами $w_i = e^{-\lambda(t - t_i)} / \sum_j e^{-\lambda(t - t_j)}$.
Отклонение от VWAP: $$d_{\text{VWAP}}(t) = p(t) - \frac{\sum_{i=1}^{n} p_i \cdot v_i}{\sum_{i=1}^{n} v_i}$$
Признаки интенсивности тиков: $$\hat{\lambda}(t, \Delta) = \frac{N(t - \Delta, t)}{\Delta}$$
вычисляемые для нескольких окон $\Delta \in {1с, 5с, 30с, 60с}$.
Авторегрессионная тиковая модель
Моделируем направление следующего тика как задачу классификации:
$$P(y_{n+1} = +1 | \mathbf{x}_n) = \sigma(\mathbf{w}^T \mathbf{x}_n + b)$$
где $\mathbf{x}n$ — вектор признаков на тике $n$, а $y{n+1} \in {-1, 0, +1}$ обозначает тик вниз, без изменения или тик вверх.
Для многошагового прогноза используем подход sequence-to-sequence:
$$\hat{y}{n+1:n+h} = f\theta(\mathbf{x}_{n-L+1:n})$$
где $L$ — окно ретроспективы, а $h$ — горизонт прогноза.
Функции потерь для прогнозирования тиков
Потери по направлению: $$\mathcal{L}{\text{dir}} = -\frac{1}{N} \sum{i=1}^{N} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right]$$
Потери, взвешенные по величине: $$\mathcal{L}{\text{mag}} = \frac{1}{N} \sum{i=1}^{N} |\Delta p_i| \cdot (y_i - \hat{y}_i)^2$$
Это сильнее штрафует ошибки на крупных ценовых движениях, выравнивая потери с торговым PnL.
Потери квантильной регрессии для размера тика: $$\mathcal{L}{\tau}(u) = u \cdot (\tau - \mathbb{1}{u < 0})$$
где $\tau$ — целевой квантиль, а $u = y - \hat{y}$.
Архитектура: Сеть прогнозирования тиков
Слой извлечения признаков
Необработанная последовательность тиков обрабатывается через несколько параллельных экстракторов:
- Временная свёртка по изменениям цены с разными размерами ядра (3, 5, 10 тиков)
- Экспоненциальная скользящая статистика (среднее, дисперсия, асимметрия) межсобытийных интервалов
- Признаки потока ордеров, включая подписанный объём, дисбаланс сделок и интенсивность
Кодировщик последовательности
LSTM или Transformer-кодировщик обрабатывает последовательность признаков:
$$\mathbf{h}_t = \text{LSTM}(\mathbf{x}t, \mathbf{h}{t-1})$$
или с механизмом внимания:
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V$$
Головка предсказания
Финальное скрытое состояние подаётся на несколько голов:
- Голова направления: softmax по ${-1, 0, +1}$
- Голова величины: линейный выход для $|\Delta p|$
- Голова времени: экспоненциальный выход для $\delta_{n+1}$
Применения в трейдинге
Высокочастотное маркет-мейкинг
Прогнозы тиков определяют размещение котировок:
- Если модель предсказывает тик вверх с высокой уверенностью, маркет-мейкер может:
- Сузить аск (сдвинуть спред)
- Расширить бид для избежания негативного отбора
- Скорректировать целевой уровень позиции
Агрессивное исполнение ордеров
Для алгоритмов исполнения прогнозы тиков определяют:
- Когда отправлять лимитные ордера против рыночных
- Где размещать лимитные ордера относительно средней цены
- Сколько торговать при каждой возможности
Краткосрочные альфа-сигналы
Прогнозы на уровне тиков, агрегированные за короткие горизонты (100мс — 1с), генерируют альфа-сигналы: $$\alpha_t = \sum_{k=1}^{h} \hat{y}_{t+k} \cdot \gamma^k$$
где $\gamma < 1$ — фактор дисконтирования для отдалённых прогнозов.
Обнаружение аномалий
Отклонения между прогнозируемым и фактическим поведением тиков сигнализируют о необычных рыночных условиях: $$z_t = \frac{|p_t - \hat{p}_t|}{\hat{\sigma}_t}$$
Большие значения $z_t$ могут указывать на новостные события, манипуляции или кризисы ликвидности.
Реализация на Rust
Наша реализация на Rust предоставляет полную систему прогнозирования тиковых данных:
Основные компоненты
- Структура
TickData: Представляет отдельные тики с временной меткой, ценой, объёмом и стороной сделки TickFeatureExtractor: Вычисляет скользящие признаки из потока тиков, включая дисбаланс сделок, отклонение от VWAP, интенсивность и волатильностьHawkesProcess: Моделирует самовозбуждающуюся интенсивность поступления тиков с оценкой параметров методом максимального правдоподобияTickForecaster: Нейронная сеть, предсказывающая направление тика по извлечённым признакамTickForecastBacktester: Оценивает точность прогнозов и моделирует торговый PnL
Конвейер признаков
TickFeatureExtractor поддерживает скользящее окно последних тиков и вычисляет:
- Дисбаланс сделок за настраиваемые окна
- VWAP и отклонение от текущей цены
- Интенсивность поступления тиков на нескольких временных масштабах
- Реализованную волатильность по тиковым доходностям
Оценка процесса Хоукса
Структура HawkesProcess оценивает параметры $(\mu, \alpha, \beta)$ методом максимального правдоподобия:
log L = sum_i log(lambda(t_i)) - integral_0^T lambda(t) dtИнтеграл имеет аналитическое решение для экспоненциальных ядер, что делает оценку эффективной.
Нейросетевая модель прогнозирования
TickForecaster использует двухслойную полносвязную сеть с активацией ReLU:
- Вход: вектор признаков из
TickFeatureExtractor - Скрытые слои с настраиваемыми размерностями
- Выход: 3-классовый softmax (вниз, без изменения, вверх) для предсказания направления
Обучение использует кросс-энтропийные потери с аппроксимацией градиентного спуска.
Интеграция с Bybit
Реализация получает тиковые данные в реальном времени через API Bybit:
- Прокси через свечи: Поскольку публичный REST API предоставляет OHLCV минимум за 1 минуту, мы используем минутные бары и синтезируем тикоподобные данные, разбивая каждый бар на симулированные тики на основе распределения объёма
- Реальные тиковые данные: Для настоящих тиковых данных WebSocket API (
wss://stream.bybit.com/v5/public/linear) предоставляет поток сделок в реальном времени - Вычисление признаков: Признаки вычисляются инкрементально по мере поступления новых тиков, что подходит для живой торговли
Соображения по производительности
Оптимизация задержки
Прогнозирование на уровне тиков требует чрезвычайно низкой задержки:
- Вычисление признаков должно быть O(1) амортизированно (с использованием скользящих аккумуляторов)
- Инференс модели должен завершаться за микросекунды
- Абстракции с нулевой стоимостью в Rust делают его идеальным для этой нагрузки
Объём данных
Ликвидная криптовалютная пара генерирует 10 000—100 000 тиков в день. Ключевые стратегии:
- Использование кольцевых буферов для скользящих окон
- Предварительное выделение памяти для векторов признаков
- Избежание ненужных аллокаций в горячем пути
Устаревание модели
Модели на уровне тиков деградируют быстро при смене рыночных условий:
- Переобучение моделей каждые 1-4 часа
- Мониторинг точности предсказаний в реальном времени
- Переключение на более простые модели при падении точности ниже порога
Ключевые выводы
-
Тиковые данные — это маркированный точечный процесс — и время, и метки (цена, объём) несут прогнозную информацию. Процесс Хоукса фиксирует самовозбуждающуюся природу поступления тиков.
-
Конструирование признаков важнее выбора модели — дисбаланс сделок, отклонение от VWAP и интенсивность тиков — наиболее предсказательные признаки. Даже простые линейные модели с хорошими признаками превосходят сложные модели с плохими признаками.
-
Точность направления 52-55% значима — из-за высокой частоты торговых возможностей даже небольшое преимущество быстро накапливается. Точность направления 53% на 10 000 тиков/день может быть высокоприбыльной после транзакционных издержек.
-
Задержка критична — стратегии на уровне тиков конкурируют по скорости. Характеристики производительности Rust (отсутствие сборки мусора, абстракции с нулевой стоимостью, предсказуемое расположение памяти) делают его естественным выбором для продуктивных систем прогнозирования тиков.
-
Деградация модели быстрая — паттерны на уровне тиков имеют период полураспада, измеряемый в часах, а не днях. Непрерывный мониторинг и частое переобучение необходимы.
-
Управление рисками на уровне тиков требует распределительных прогнозов — точечных предсказаний недостаточно. Квантильная регрессия и распределительное прогнозирование помогают управлять хвостовыми рисками высокочастотной торговли.
-
Экосистема API Bybit поддерживает стратегии на уровне тиков — WebSocket-поток сделок предоставляет тиковые данные в реальном времени, а REST API позволяет проводить бэктестинг с историческими данными свечей, разложенными на синтетические тики.
Ссылки
- Bacry, E., Mastromatteo, I., & Muzy, J. F. (2015). Hawkes processes in finance. Market Microstructure and Liquidity.
- Zhang, Z., Zohren, S., & Roberts, S. (2019). DeepLOB: Deep convolutional neural networks for limit order books. IEEE Transactions on Signal Processing.
- Cont, R. (2011). Statistical modeling of high-frequency financial data. IEEE Signal Processing Magazine.
- Sirignano, J., & Cont, R. (2019). Universal features of price formation in financial markets. PLoS ONE.
- Dat, T. T., et al. (2023). Tick-level deep learning for high-frequency trading. Quantitative Finance.