Глава 300: Иерархическое обучение с подкреплением для трейдинга
Введение
Традиционные агенты обучения с подкреплением (RL) для трейдинга работают на одном уровне временной абстракции: на каждом шаге они выбирают действие (покупка, продажа, удержание) на основе текущего состояния. Хотя этот плоский подход может работать для простых сценариев, он с трудом справляется с многомасштабной природой реальных финансовых рынков. Торговые решения естественным образом декомпозируются в иерархию: стратегическое распределение активов происходит в течение недель или месяцев, тактическая ребалансировка — в течение дней, а исполнение ордеров — в течение минут или секунд.
Иерархическое обучение с подкреплением (HRL) решает эту задачу, вводя несколько уровней абстракции в процесс принятия решений. Политика высокого уровня (“менеджер”) устанавливает цели или выбирает режимы на более длительных временных масштабах, в то время как политика низкого уровня (“работник”) выполняет конкретные торговые действия для достижения этих целей на более коротких временных масштабах. Эта декомпозиция отражает то, как работают профессиональные торговые фирмы: портфельные менеджеры устанавливают стратегические направления и бюджеты риска, а трейдеры-исполнители занимаются механикой входа и выхода из позиций.
Ключевые преимущества HRL для трейдинга включают:
- Временная абстракция: Различные политики работают с разной частотой, естественно соответствуя многомасштабной структуре рынков.
- Перенос и повторное использование: Навыки исполнения низкого уровня переносятся между различными стратегическими целями.
- Эффективность исследования: Менеджер исследует в сокращённом пространстве целей, а не в полном пространстве действий.
- Интерпретируемость: Иерархия порождает человекочитаемые промежуточные цели (например, “перейти к защитному позиционированию”).
Эта глава охватывает математические основы HRL — фреймворк опций, феодальные сети и иерархический Actor-Critic (HAC) — и демонстрирует полную реализацию на Rust, интегрированную с рыночными данными Bybit.
Математические основы
Фреймворк опций
Фреймворк опций (Sutton, Precup & Singh, 1999) расширяет стандартный MDP временно расширенными действиями, называемыми опциями. Опция $\omega \in \Omega$ определяется как тройка:
$$\omega = (I_\omega, \pi_\omega, \beta_\omega)$$
где:
- $I_\omega \subseteq S$ — множество инициации (состояния, в которых опция может начаться)
- $\pi_\omega: S \times A \rightarrow [0,1]$ — внутриопционная политика (как действовать во время выполнения)
- $\beta_\omega: S \rightarrow [0,1]$ — функция завершения (вероятность остановки в каждом состоянии)
В торговом контексте опция может представлять “накопить длинную позицию в BTC в течение следующего часа”. Множество инициации включает состояния, в которых портфель имеет место для большей экспозиции BTC, внутриопционная политика определяет стратегию размещения лимитных ордеров, а функция завершения срабатывает при достижении целевой позиции или изменении рыночных условий.
Функция ценности по опциям следует структуре полу-MDP:
$$Q_\Omega(s, \omega) = \sum_a \pi_\omega(a|s) \left[ r(s,a) + \gamma \sum_{s’} P(s’|s,a) \left[ \beta_\omega(s’) \max_{\omega’} Q_\Omega(s’, \omega’) + (1 - \beta_\omega(s’)) Q_\Omega(s’, \omega) \right] \right]$$
Феодальные сети
Феодальное обучение с подкреплением (Dayan & Hinton, 1993; Vezhnevets et al., 2017) вводит архитектуру менеджер-работник:
Менеджер работает с более низким временным разрешением. Каждые $c$ шагов он генерирует вектор цели $g_t$:
$$g_t = f_{\text{manager}}(s_t; \theta_M)$$
Цель менеджера — максимизировать внешнее (средовое) вознаграждение, накопленное за интервал принятия решений.
Работник действует на каждом временном шаге и выбирает примитивные действия для достижения цели менеджера:
$$a_t = f_{\text{worker}}(s_t, g_t; \theta_W)$$
Работник получает внутреннее вознаграждение, измеряющее прогресс к цели менеджера:
$$r_t^{\text{intrinsic}} = \frac{1}{c} \cos(s_{t+c} - s_t, g_t) = \frac{1}{c} \frac{(s_{t+c} - s_t) \cdot g_t}{|s_{t+c} - s_t| \cdot |g_t|}$$
Это вознаграждение на основе косинусного сходства побуждает работника перемещать состояние в направлении, указанном менеджером, без требования точного достижения цели.
Иерархический Actor-Critic (HAC)
HAC (Levy et al., 2019) расширяет методы actor-critic на несколько уровней иерархии. Каждый уровень $k$ имеет:
- Actor $\mu_k(s; \theta_k^{\mu})$: генерирует подцель для уровня $k-1$ (или примитивное действие на уровне 0)
- Critic $Q_k(s, g; \theta_k^{Q})$: оценивает пару состояние-цель
Обучение использует три типа переходов опыта:
- Переходы с ретроспективным действием: Заменяют подцель, предложенную уровнем $k$, состоянием, фактически достигнутым уровнем $k-1$, корректируя субоптимальное исполнение нижнего уровня.
- Переходы с ретроспективной целью: Заменяют исходную цель достигнутым состоянием, позволяя учиться на любой траектории.
- Тестовые переходы подцелей: Периодически проверяют, может ли уровень $k-1$ достичь предложенной подцели, штрафуя недостижимые цели.
Обновление HAC для уровня $k$:
$$\mathcal{L}_k = \mathbb{E}\left[(Q_k(s, g) - y_k)^2\right], \quad y_k = r + \gamma Q_k(s’, g’)$$
$$\nabla_{\theta_k^\mu} J = \mathbb{E}\left[\nabla_g Q_k(s, g)\big|{g=\mu_k(s)} \cdot \nabla{\theta_k^\mu} \mu_k(s)\right]$$
Применения в трейдинге
Выбор режима высокого уровня + исполнение низкого уровня
Наиболее естественное применение HRL в трейдинге декомпозирует задачу на:
Менеджер (политика высокого уровня):
- Наблюдает: макроэкономические индикаторы, режимы волатильности, межактивные корреляции, дисбалансы потока ордеров
- Принимает решения каждые $N$ свечей (например, ежедневно): текущий рыночный режим (бычий, медвежий, боковой) и целевое распределение портфеля
- Вознаграждение: коэффициент Шарпа за горизонт принятия решений
Работник (политика низкого уровня):
- Наблюдает: данные на уровне тиков или минут, состояние книги ордеров, текущую позицию
- Принимает решения на каждом шаге: конкретное размещение ордеров (рыночный/лимитный, объём, цена)
- Внутреннее вознаграждение: прогресс к цели менеджера по распределению
- Внешнее вознаграждение: качество исполнения (проскальзывание, тайминг)
Эта декомпозиция позволяет менеджеру неявно обучаться обнаружению режимов через максимизацию вознаграждения, в то время как работник специализируется на эффективном исполнении независимо от стратегического направления.
Многомасштабное управление портфелем
Трёхуровневая иерархия для управления портфелем:
- Стратегический уровень (ежемесячно): Веса распределения по классам активов — акции, криптовалюты, фиксированный доход
- Тактический уровень (ежедневно): Внутри каждого класса активов — выбор конкретных инструментов и размеров позиций
- Уровень исполнения (внутридневной): Исполнение необходимых сделок с минимальным воздействием на рынок
Каждый уровень получает цели сверху и транслирует их в подцели для уровня ниже. Стратегический уровень может выдать “увеличить долю криптовалют с 10% до 20%”; тактический уровень транслирует это в “купить 5 BTC, 50 ETH за следующие 3 дня”; уровень исполнения обрабатывает фактический поток ордеров.
Иерархическое управление рисками
HRL также может разделить управление рисками и генерацию альфы:
- Риск-менеджер (высокий уровень): Устанавливает лимиты позиций, пороги максимальной просадки и требования к хеджированию
- Альфа-трейдер (низкий уровень): Генерирует сделки в рамках ограничений, установленных риск-менеджером
Внутреннее вознаграждение риск-менеджера определяется удержанием метрик риска портфеля в допустимых границах, в то время как альфа-трейдер оптимизирует доходность в рамках этих ограничений.
Реализация на Rust
Реализация в rust/src/lib.rs предоставляет:
MarketRegimeenum: Представляет обнаруженные состояния рынка (Bull, Bear, Sideways)HighLevelPolicy(Менеджер): Политика, подобная нейронной сети, которая отображает рыночные признаки в классификации режимов и цели распределения. Работает на более грубом временном масштабе, принимая решения каждыеdecision_intervalшагов.LowLevelPolicy(Работник): Отображает текущее состояние плюс цель менеджера в конкретные торговые действия (размер и направление позиции). Получает внутренние вознаграждения за прогресс к цели.FeudalNetwork: Объединяет менеджера и работника в согласованную феодальную архитектуру. Менеджер задаёт векторы направления в обученном пространстве целей; работник следует им.HierarchicalAgent: Агент верхнего уровня, который оркестрирует обучение и вывод на обоих уровнях.BybitClient: Получает данные OHLCV свечей из публичного API Bybit v5 для бэктестинга.
Ключевые проектные решения:
- Цель менеджера — 4-мерный вектор, представляющий целевые характеристики портфеля (направление, величина, допуск волатильности, временной горизонт).
- Внутреннее вознаграждение использует косинусное сходство между переходом состояния и вектором цели.
- Обе политики используют простые линейные слои с активацией ReLU для переносимости и скорости.
См. rust/examples/trading_example.rs для полной демонстрации, которая получает данные BTCUSDT с Bybit, обучает иерархического агента и сравнивает его с плоским (одноуровневым) базовым RL-агентом.
Интеграция с данными Bybit
Реализация подключается к публичному API Bybit v5:
GET https://api.bybit.com/v5/market/kline?category=linear&symbol=BTCUSDT&interval=60&limit=200Ответ предоставляет OHLCV свечи, которые преобразуются в векторы признаков:
- Доходности (логарифмические доходности close-to-close)
- Волатильность (скользящее стандартное отклонение доходностей)
- Моментум (сигнал пересечения скользящих средних)
- Коэффициент объёма (текущий vs. средний объём)
Эти признаки питают как менеджера (агрегированные по более длинным окнам), так и работника (на каждом шаге). Для публичных эндпоинтов рыночных данных аутентификация не требуется.
Ключевые выводы
-
Иерархическое RL естественно соответствует многомасштабной структуре финансовых рынков. Стратегические решения (режим, распределение) работают на других частотах, чем решения по исполнению (размещение ордеров, определение размера).
-
Фреймворк опций обеспечивает формальную основу. Опции расширяют MDP временно расширенными действиями, позволяя принципиальное обучение тому, когда инициировать и завершать торговые стратегии.
-
Феодальные сети разделяют постановку целей и их достижение. Менеджер задаёт направленные цели; работник учится их достигать. Это разделение позволяет независимо улучшать каждый компонент.
-
Внутренние вознаграждения решают проблему разреженных вознаграждений. Вместо ожидания P&L в конце эпизода работники получают непрерывную обратную связь о прогрессе к цели через косинусное сходство.
-
HAC с ретроспективным обучением ускоряет тренировку. Переходы с ретроспективным действием и целью позволяют каждой траектории давать полезный тренировочный сигнал, даже когда нижние уровни исполняют субоптимально.
-
Иерархия улучшает интерпретируемость. Решения менеджера (“переключиться на медвежий режим”) читаемы человеком, что делает систему проще для мониторинга и отладки в продакшене.
-
Реализация на Rust обеспечивает развёртывание с низкой задержкой. Абстракции с нулевой стоимостью и отсутствие сборщика мусора делают Rust идеальным для иерархического принятия решений в реальном времени в торговых системах.
Ссылки
- Sutton, R.S., Precup, D., & Singh, S. (1999). Between MDPs and semi-MDPs: A framework for temporal abstraction in reinforcement learning.
- Dayan, P., & Hinton, G.E. (1993). Feudal reinforcement learning.
- Vezhnevets, A.S. et al. (2017). FeUdal Networks for Hierarchical Reinforcement Learning.
- Levy, A., Konidaris, G., Platt, R., & Saenko, K. (2019). Learning Multi-Level Hierarchies with Hindsight.
- Nachum, O. et al. (2018). Data-Efficient Hierarchical Reinforcement Learning.
- Kulkarni, T.D. et al. (2016). Hierarchical Deep Reinforcement Learning: Integrating Temporal Abstraction and Intrinsic Motivation.