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

Глава 289: Curriculum Learning для трейдинга

Введение

Curriculum learning (обучение по учебной программе) — это стратегия тренировки, вдохновлённая человеческим образованием: мы изучаем арифметику перед матанализом, простые мелодии перед симфониями. В контексте машинного обучения для трейдинга curriculum learning означает представление модели последовательно усложняющихся рыночных условий вместо того, чтобы с самого начала подвергать её полной сложности финансовых рынков.

Финансовые рынки демонстрируют широкий спектр режимов — от спокойных, низковолатильных трендовых периодов до хаотичных, высоковолатильных кризисных эпизодов. Наивный подход тренирует модели на случайно перемешанных исторических данных, заставляя обучающуюся модель одновременно справляться с мягкими трендами и резкими сменами режимов. Curriculum learning вместо этого организует тренировочные данные по сложности: агент сначала осваивает низковолатильные трендовые рынки, затем переходит к умеренной волатильности и боковым условиям, и наконец берётся за экстремальные события, такие как флеш-крэши и кризисы ликвидности.

Bengio et al. (2009) формализовали curriculum learning, показав, что сети, обученные на последовательностях от простого к сложному, сходятся быстрее и часто достигают лучших оптимумов. В трейдинге преимущества тройные: (1) более быстрая сходимость, потому что агент строит базовые стратегии на простых данных, (2) улучшенная обобщающая способность, потому что агент постепенно сталкивается с более сложными пограничными случаями, и (3) лучшее управление рисками, потому что агент изучает стабильное поведение до столкновения с хвостовыми событиями.

В этой главе разрабатывается математический фреймворк для curriculum learning в трейдинге, реализуется полный конвейер обучения по учебной программе на Rust и демонстрируется интеграция с данными рынка Bybit в реальном времени.


Математический фреймворк

1. Упорядочение задач по сложности

Пусть $\mathcal{D} = {d_1, d_2, \ldots, d_N}$ — множество рыночных периодов (например, дневных или недельных окон). Определим функцию оценки сложности:

$$s: \mathcal{D} \rightarrow \mathbb{R}^+$$

Естественный выбор для трейдинга — сложность на основе волатильности:

$$s(d_i) = \sigma(d_i) = \sqrt{\frac{1}{T-1} \sum_{t=1}^{T} (r_t - \bar{r})^2}$$

где $r_t$ — логарифмические доходности в периоде $d_i$, а $\bar{r}$ — средняя доходность.

Мы можем обогатить это дополнительными факторами:

$$s(d_i) = w_1 \cdot \hat{\sigma}(d_i) + w_2 \cdot \text{DrawdownMax}(d_i) + w_3 \cdot \text{GapFreq}(d_i) + w_4 \cdot \text{SpreadMean}(d_i)$$

где каждый компонент отражает разное измерение рыночной сложности: волатильность, глубину просадки, частоту ценовых разрывов и средний спред.

2. Планировщик учебной программы

Имея оценённые периоды, мы сортируем их по сложности и разделяем на $K$ корзин сложности:

$$\mathcal{B}k = {d_i \mid q{k-1} \leq s(d_i) < q_k}, \quad k = 1, \ldots, K$$

где $q_k$ — квантильные пороги. Стандартная программа с $K = 3$ даёт:

  • Лёгкие ($\mathcal{B}_1$): Низковолатильные трендовые периоды
  • Средние ($\mathcal{B}_2$): Умеренная волатильность, смешанные тренды
  • Сложные ($\mathcal{B}_3$): Высокая волатильность, кризисы, пилообразные движения

Планировщик определяет тренировочную последовательность $\mathcal{C} = (\mathcal{B}_1^{(e_1)}, \mathcal{B}_2^{(e_2)}, \mathcal{B}_3^{(e_3)})$, где $e_k$ обозначает количество эпох на корзину $k$.

Линейная программа планирует переход в эпоху $t$:

$$p_k(t) = \begin{cases} 1 & \text{если } t < t_1 \text{ и } k = 1 \ 1 & \text{если } t_1 \leq t < t_2 \text{ и } k \leq 2 \ 1 & \text{если } t \geq t_2 \end{cases}$$

где $t_1, t_2$ — эпохи перехода, а $p_k(t)$ указывает, какие корзины доступны в момент $t$.

3. Самостоятельное обучение (Self-Paced Learning)

Самостоятельное обучение (SPL) расширяет curriculum learning, позволяя модели самой решать, когда переходить к следующему уровню. Мы вводим функцию компетенции:

$$c(t) = \min\left(1, \sqrt{\frac{t}{T} \cdot \left(1 + \frac{\text{PnL}(t)}{\text{PnL}_{\text{target}}}\right)}\right)$$

где $\text{PnL}(t)$ — кумулятивная прибыль агента в эпоху $t$, а $\text{PnL}_{\text{target}}$ — порог производительности. Оценка компетенции определяет максимальный уровень сложности:

$$\mathcal{D}_{\text{available}}(t) = {d_i \in \mathcal{D} \mid s(d_i) \leq Q(c(t))}$$

где $Q(c)$ — квантильная функция распределения сложности на уровне компетенции $c$.

Вес самостоятельного обучения для каждого образца:

$$v_i^* = \begin{cases} 1 & \text{если } \ell_i < \lambda(t) \ 0 & \text{иначе} \end{cases}$$

где $\ell_i$ — потеря на образце $i$, а $\lambda(t)$ — порог, увеличивающийся в процессе обучения.

4. Curriculum на основе компетенций

Curriculum на основе компетенций объединяет планировщик с мониторингом производительности:

$$\lambda(t+1) = \lambda(t) + \alpha \cdot \mathbb{1}[\text{Sharpe}(t) > \text{Sharpe}_{\min}]$$

Параметр темпа $\lambda$ увеличивается только тогда, когда агент демонстрирует достаточную производительность (измеряемую коэффициентом Шарпа) на текущем уровне сложности. Это предотвращает преждевременное продвижение и обеспечивает освоение каждого этапа.


Применение в трейдинге

Прогрессивная сложность рынка

Типичная учебная программа для торгового агента проходит через три стадии:

Стадия 1 — Низковолатильные трендовые рынки: Агент изучает базовое следование за трендом на спокойных, направленных рынках. Годовая волатильность ниже 33-го перцентиля. Агент формирует базовую логику размера позиций и входа/выхода.

Стадия 2 — Умеренно волатильные смешанные рынки: Агент сталкивается с боковыми и умеренно волатильными условиями. Он учится переключаться между трендовыми и возвратными к среднему режимами, обрабатывать ложные пробои и управлять большими просадками.

Стадия 3 — Высоковолатильные кризисные периоды: Агент встречается с флеш-крэшами, разрывами ликвидности и экстремальными хвостовыми событиями. Он должен изучить защитные стратегии, быстрое снижение плеча и поведение, приоритетное для выживания.

Мультиактивный Curriculum

Curriculum learning также можно применять к различным активам. Начать обучение на наиболее ликвидных, хорошо себя ведущих активах (например, BTC/USDT на крупных биржах) и постепенно вводить менее ликвидные альткоины с более широкими спредами и более хаотичным поведением.

Перенос между таймфреймами

Ещё одно измерение сложности — таймфрейм. Дневные бары более гладкие и проще для обучения; минутные бары содержат больше шума. Curriculum может сначала обучать на дневных данных, затем на 4-часовых, затем на часовых и наконец на минутных данных.


Реализация на Rust

Реализация в rust/src/lib.rs предоставляет:

  1. DifficultyScorer — Оценка рыночных периодов по волатильности и другим метрикам
  2. CurriculumScheduler — Управление прогрессией через лёгкие/средние/сложные корзины
  3. SelfPacedLearner — Корректировка программы на основе производительности агента
  4. TradingAgent — Простой моментум-агент, обученный по учебной программе
  5. BybitClient — Получение исторических данных свечей с Bybit API

Ключевые решения проектирования

  • Волатильность как основная метрика сложности: Реализованная волатильность — наиболее интуитивная и надёжная мера сложности рынка для торгового агента.
  • Три корзины в программе: Обеспечивают достаточную детализацию без чрезмерного усложнения планировщика.
  • Шлюз компетенций: Агент должен достичь минимального коэффициента Шарпа перед продвижением, предотвращая катастрофическое воздействие сложных рынков.

Интеграция с Bybit

Реализация получает данные OHLCV из публичного API Bybit (/v5/market/kline). Исторические данные свечей разбиваются на периоды, каждый из которых оценивается по сложности. Планировщик учебной программы затем организует эти периоды для прогрессивного обучения.

GET https://api.bybit.com/v5/market/kline?category=linear&symbol=BTCUSDT&interval=60&limit=200

Каждая свеча предоставляет open, high, low, close и volume — достаточно для вычисления волатильности, просадок и других метрик сложности.


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

  1. Curriculum learning организует тренировочные данные по сложности, представляя сначала лёгкие рыночные условия и постепенно усложняя, аналогично тому, как учатся трейдеры-люди.

  2. Волатильность — естественная метрика сложности для финансовых рынков. Низковолатильные трендовые периоды — лёгкие; высоковолатильные кризисные периоды — сложные.

  3. Самостоятельное обучение позволяет агенту контролировать собственную программу, продвигаясь только при демонстрации компетенции на текущем уровне сложности.

  4. Шлюз компетенций предотвращает катастрофические провалы, гарантируя освоение агентом более простых условий перед столкновением с экстремальными рыночными событиями.

  5. Агенты, обученные по программе, стабильно превосходят случайно обученных агентов по коэффициенту Шарпа, максимальной просадке и итоговой прибыли, особенно в периоды кризисов вне выборки.

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

  7. Реализация на Rust обеспечивает производительность, необходимую для масштабного бэктестинга по множеству исторических периодов и конфигураций программ.

  8. Интеграция с Bybit позволяет оценивать сложность в реальном времени и строить программы на живых данных крипторынка, связывая исследования и продуктовые торговые системы.