Глава 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 предоставляет:
DifficultyScorer— Оценка рыночных периодов по волатильности и другим метрикамCurriculumScheduler— Управление прогрессией через лёгкие/средние/сложные корзиныSelfPacedLearner— Корректировка программы на основе производительности агентаTradingAgent— Простой моментум-агент, обученный по учебной программе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 — достаточно для вычисления волатильности, просадок и других метрик сложности.
Ключевые выводы
-
Curriculum learning организует тренировочные данные по сложности, представляя сначала лёгкие рыночные условия и постепенно усложняя, аналогично тому, как учатся трейдеры-люди.
-
Волатильность — естественная метрика сложности для финансовых рынков. Низковолатильные трендовые периоды — лёгкие; высоковолатильные кризисные периоды — сложные.
-
Самостоятельное обучение позволяет агенту контролировать собственную программу, продвигаясь только при демонстрации компетенции на текущем уровне сложности.
-
Шлюз компетенций предотвращает катастрофические провалы, гарантируя освоение агентом более простых условий перед столкновением с экстремальными рыночными событиями.
-
Агенты, обученные по программе, стабильно превосходят случайно обученных агентов по коэффициенту Шарпа, максимальной просадке и итоговой прибыли, особенно в периоды кризисов вне выборки.
-
Подход обобщается на активы и таймфреймы, позволяя создавать многомерные программы, постепенно увеличивающие сложность по нескольким осям.
-
Реализация на Rust обеспечивает производительность, необходимую для масштабного бэктестинга по множеству исторических периодов и конфигураций программ.
-
Интеграция с Bybit позволяет оценивать сложность в реальном времени и строить программы на живых данных крипторынка, связывая исследования и продуктовые торговые системы.