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

Глава 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}$.

Архитектура: Сеть прогнозирования тиков

Слой извлечения признаков

Необработанная последовательность тиков обрабатывается через несколько параллельных экстракторов:

  1. Временная свёртка по изменениям цены с разными размерами ядра (3, 5, 10 тиков)
  2. Экспоненциальная скользящая статистика (среднее, дисперсия, асимметрия) межсобытийных интервалов
  3. Признаки потока ордеров, включая подписанный объём, дисбаланс сделок и интенсивность

Кодировщик последовательности

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 предоставляет полную систему прогнозирования тиковых данных:

Основные компоненты

  1. Структура TickData: Представляет отдельные тики с временной меткой, ценой, объёмом и стороной сделки
  2. TickFeatureExtractor: Вычисляет скользящие признаки из потока тиков, включая дисбаланс сделок, отклонение от VWAP, интенсивность и волатильность
  3. HawkesProcess: Моделирует самовозбуждающуюся интенсивность поступления тиков с оценкой параметров методом максимального правдоподобия
  4. TickForecaster: Нейронная сеть, предсказывающая направление тика по извлечённым признакам
  5. 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:

  1. Прокси через свечи: Поскольку публичный REST API предоставляет OHLCV минимум за 1 минуту, мы используем минутные бары и синтезируем тикоподобные данные, разбивая каждый бар на симулированные тики на основе распределения объёма
  2. Реальные тиковые данные: Для настоящих тиковых данных WebSocket API (wss://stream.bybit.com/v5/public/linear) предоставляет поток сделок в реальном времени
  3. Вычисление признаков: Признаки вычисляются инкрементально по мере поступления новых тиков, что подходит для живой торговли

Соображения по производительности

Оптимизация задержки

Прогнозирование на уровне тиков требует чрезвычайно низкой задержки:

  • Вычисление признаков должно быть O(1) амортизированно (с использованием скользящих аккумуляторов)
  • Инференс модели должен завершаться за микросекунды
  • Абстракции с нулевой стоимостью в Rust делают его идеальным для этой нагрузки

Объём данных

Ликвидная криптовалютная пара генерирует 10 000—100 000 тиков в день. Ключевые стратегии:

  • Использование кольцевых буферов для скользящих окон
  • Предварительное выделение памяти для векторов признаков
  • Избежание ненужных аллокаций в горячем пути

Устаревание модели

Модели на уровне тиков деградируют быстро при смене рыночных условий:

  • Переобучение моделей каждые 1-4 часа
  • Мониторинг точности предсказаний в реальном времени
  • Переключение на более простые модели при падении точности ниже порога

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

  1. Тиковые данные — это маркированный точечный процесс — и время, и метки (цена, объём) несут прогнозную информацию. Процесс Хоукса фиксирует самовозбуждающуюся природу поступления тиков.

  2. Конструирование признаков важнее выбора модели — дисбаланс сделок, отклонение от VWAP и интенсивность тиков — наиболее предсказательные признаки. Даже простые линейные модели с хорошими признаками превосходят сложные модели с плохими признаками.

  3. Точность направления 52-55% значима — из-за высокой частоты торговых возможностей даже небольшое преимущество быстро накапливается. Точность направления 53% на 10 000 тиков/день может быть высокоприбыльной после транзакционных издержек.

  4. Задержка критична — стратегии на уровне тиков конкурируют по скорости. Характеристики производительности Rust (отсутствие сборки мусора, абстракции с нулевой стоимостью, предсказуемое расположение памяти) делают его естественным выбором для продуктивных систем прогнозирования тиков.

  5. Деградация модели быстрая — паттерны на уровне тиков имеют период полураспада, измеряемый в часах, а не днях. Непрерывный мониторинг и частое переобучение необходимы.

  6. Управление рисками на уровне тиков требует распределительных прогнозов — точечных предсказаний недостаточно. Квантильная регрессия и распределительное прогнозирование помогают управлять хвостовыми рисками высокочастотной торговли.

  7. Экосистема 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.