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

Глава 293: PPO для торговли портфелем

1. Введение

Проксимальная оптимизация политики (PPO) стала одним из наиболее надёжных алгоритмов обучения с подкреплением для задач непрерывного управления, и управление портфелем представляет собой естественную область применения. В отличие от методов обучения с учителем, которые сначала прогнозируют доходности, а затем оптимизируют распределение отдельно, PPO напрямую обучает политику, которая отображает состояния рынка в распределение весов портфеля, оптимизируя показатели с учётом риска от начала до конца.

Управление портфелем — это фундаментально задача последовательного принятия решений в условиях неопределённости. На каждом временном шаге агент наблюдает рыночные признаки (цены, объёмы, технические индикаторы) по нескольким активам и должен решить, как распределить капитал между ними. Сложность заключается в непрерывном пространстве действий (веса портфеля должны суммироваться до единицы), нестационарной природе финансовых данных и необходимости балансировать между исследованием новых стратегий и использованием известных прибыльных паттернов.

PPO, представленный Шульманом и др. (2017), решает критическую проблему методов градиента политики: чрезмерно большие обновления политики, которые могут катастрофически ухудшить производительность. В финансовых приложениях это свойство стабильности имеет первостепенное значение. Одно катастрофическое обновление политики во время обучения может привести к тому, что агент примет губительную стратегию распределения, уничтожив портфель. Обрезанная суррогатная целевая функция PPO ограничивает каждое обновление в пределах доверительной области, обеспечивая плавную и предсказуемую эволюцию политики.

В этой главе разрабатываются математические основы PPO, объясняется, почему его свойства стабильности делают его особенно подходящим для оптимизации финансовых портфелей, реализуется полная система торговли портфелем на PPO на языке Rust и демонстрируется её применение к мультиактивной торговле криптовалютами с использованием рыночных данных Bybit.

2. Математические основы

Методы градиента политики

В обучении с подкреплением политика $\pi_\theta(a|s)$, параметризованная $\theta$, отображает состояния $s$ в распределения вероятностей по действиям $a$. Цель — максимизировать ожидаемое кумулятивное дисконтированное вознаграждение:

$$J(\theta) = \mathbb{E}{\tau \sim \pi\theta} \left[ \sum_{t=0}^{T} \gamma^t r_t \right]$$

где $\gamma \in [0, 1)$ — коэффициент дисконтирования, а $r_t$ — вознаграждение в момент времени $t$. Теорема о градиенте политики даёт нам градиент этой целевой функции:

$$\nabla_\theta J(\theta) = \mathbb{E}{\tau \sim \pi\theta} \left[ \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot A^{\pi_\theta}(s_t, a_t) \right]$$

где $A^{\pi_\theta}(s_t, a_t)$ — функция преимущества, измеряющая, насколько действие $a_t$ лучше среднего действия при текущей политике.

Проблема доверительной области

Ванильные методы градиента политики страдают от фундаментального противоречия. Малые скорости обучения приводят к медленной сходимости, а большие скорости обучения могут вызвать катастрофический коллапс политики. TRPO решил это добавлением ограничения на KL-дивергенцию:

$$\max_\theta \quad \mathbb{E}\left[\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_\text{old}}(a_t|s_t)} A_t\right] \quad \text{s.t.} \quad \mathbb{E}\left[D_{KL}(\pi_{\theta_\text{old}} | \pi_\theta)\right] \leq \delta$$

Однако TRPO требует вычисления производных второго порядка (матрица информации Фишера) и решения задачи условной оптимизации, что делает его вычислительно дорогим и сложным в реализации.

Обрезанная суррогатная целевая функция PPO

PPO элегантно упрощает подход доверительной области. Определим отношение вероятностей:

$$r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_\text{old}}(a_t|s_t)}$$

Обрезанная суррогатная целевая функция PPO:

$$L^{CLIP}(\theta) = \mathbb{E}_t \left[ \min\left( r_t(\theta) A_t, ; \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t \right) \right]$$

где $\epsilon$ — гиперпараметр (обычно от 0.1 до 0.3), контролирующий размер доверительной области. Механизм обрезки работает следующим образом:

  • Когда $A_t > 0$ (действие было хорошим), $r_t(\theta)$ обрезается на уровне $1+\epsilon$, предотвращая слишком агрессивное смещение политики к этому действию
  • Когда $A_t < 0$ (действие было плохим), $r_t(\theta)$ обрезается на уровне $1-\epsilon$, предотвращая слишком агрессивное удаление этого действия

Эта простая обрезка достигает стабильности, аналогичной ограничению KL в TRPO, но гораздо проще в реализации и вычислительно дешевле.

Обобщённая оценка преимущества (GAE)

Точная оценка преимущества критически важна для стабильного обучения. GAE предоставляет семейство оценщиков преимущества, параметризованных $\lambda \in [0, 1]$:

$$\hat{A}t^{GAE(\gamma, \lambda)} = \sum{l=0}^{T-t} (\gamma \lambda)^l \delta_{t+l}$$

где $\delta_t$ — остаток временной разности (TD):

$$\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)$$

Параметр $\lambda$ контролирует компромисс между смещением и дисперсией:

  • $\lambda = 0$ даёт одношаговую TD-оценку: низкая дисперсия, но высокое смещение
  • $\lambda = 1$ даёт оценку Монте-Карло: низкое смещение, но высокая дисперсия
  • Промежуточные значения (обычно $\lambda = 0.95$) обеспечивают практический баланс

В торговле портфелем мы обычно используем $\lambda = 0.95$ и $\gamma = 0.99$, так как финансовые доходности имеют временные зависимости, которые выигрывают от просмотра нескольких шагов вперёд.

Мониторинг KL-дивергенции

Хотя обрезанная целевая функция PPO заменяет явное ограничение KL из TRPO, мониторинг KL-дивергенции между старой и новой политиками остаётся ценным:

$$D_{KL}(\pi_{\theta_\text{old}} | \pi_\theta) = \mathbb{E}{a \sim \pi{\theta_\text{old}}} \left[ \log \frac{\pi_{\theta_\text{old}}(a|s)}{\pi_\theta(a|s)} \right]$$

Если KL-дивергенция превышает целевой порог (например, 0.01-0.02), это сигнализирует о том, что политика меняется слишком быстро, несмотря на обрезку, что может запустить раннюю остановку эпохи оптимизации или снижение скорости обучения.

Комбинированная функция потерь

Полная целевая функция PPO объединяет обрезанные потери политики, потери функции ценности и бонус энтропии:

$$L(\theta) = L^{CLIP}(\theta) - c_1 L^{VF}(\theta) + c_2 H\pi_\theta$$

где:

  • $L^{VF}(\theta) = (V_\theta(s_t) - V_t^{target})^2$ — потери функции ценности
  • $H\pi_\theta$ — энтропия политики, поощряющая исследование
  • $c_1$ и $c_2$ — коэффициенты (обычно $c_1 = 0.5, c_2 = 0.01$)

Бонус энтропии особенно важен в управлении портфелем, так как он предотвращает преждевременную сходимость к детерминированному распределению, которое игнорирует преимущества диверсификации.

3. Почему PPO стабилен для финансовых приложений

Финансовое обучение с подкреплением создаёт уникальные проблемы, которые делают свойства стабильности PPO особенно ценными.

Отсутствие катастрофических обновлений политики

В управлении портфелем катастрофическое обновление политики может означать разницу между прибыльной стратегией и полной потерей. Рассмотрим агента, который выучил разумную диверсифицированную стратегию. Без обрезки одна партия необычных рыночных данных (например, мгновенный крах) может вызвать резкое смещение политики к экстремальному распределению. Обрезка PPO гарантирует, что даже при неблагоприятных данных политика меняется постепенно.

Эффективность использования выборок через множественные эпохи

PPO повторно использует собранный опыт для нескольких эпох оптимизации (обычно 3-10) с обновлениями мини-батчей. Это критично в финансовых приложениях, где сбор данных стоит дорого — каждая «выборка» представляет реальное рыночное время, которое нельзя воспроизвести. Извлекая больше обучения из каждой партии опыта, PPO достигает лучшей эффективности выборок, чем чистые методы на основе текущей политики, такие как REINFORCE.

Устойчивость к выбору гиперпараметров

По сравнению с другими алгоритмами RL (SAC, TD3, DDPG), PPO заметно устойчив к выбору гиперпараметров. Параметр обрезки $\epsilon$ обеспечивает естественный масштаб обновлений политики, который не зависит от настройки скорости обучения. Эта устойчивость ценна в финансовых приложениях, где распределение вознаграждений меняется со временем из-за смены режимов.

Непрерывные пространства действий

Распределение портфеля естественно отображается на непрерывное пространство действий: на каждом шаге агент выдаёт вектор весов $(w_1, w_2, \ldots, w_n)$, где $w_i \geq 0$ и $\sum_i w_i = 1$. PPO обрабатывает непрерывные действия через гауссовские политики, где сеть актёра выдаёт параметры среднего и стандартного отклонения для каждого измерения действия. Затем применяется преобразование softmax для обеспечения ограничения симплекса.

Обработка нестационарности

Финансовые рынки по своей природе нестационарны. Природа PPO на основе текущей политики (с ограниченным повторным использованием через множественные эпохи) означает, что политика всегда обучается на свежих данных, естественно адаптируясь к меняющимся рыночным условиям. Это контрастирует с методами на основе прошлого опыта, которые могут обучаться на устаревших данных из буферов воспроизведения.

4. Мультиактивное пространство состояний и действий портфеля

Проектирование пространства состояний

Состояние портфельной среды в момент времени $t$ включает:

Ценовые признаки (по каждому активу):

  • Нормализованные доходности за несколько окон ретроспективы (5, 10, 20, 60 периодов)
  • Оценки реализованной волатильности
  • Объём относительно скользящей средней

Межактивные признаки:

  • Элементы скользящей матрицы корреляции
  • Индикаторы относительной силы между активами

Портфельные признаки:

  • Текущие веса портфеля
  • Нереализованная прибыль/убыток по позициям
  • Время с последней ребалансировки

Вектор состояния нормализуется с использованием скользящей статистики (среднее и дисперсия), чтобы обеспечить стабильное обучение независимо от абсолютного масштаба цен или объёмов.

Проектирование пространства действий

Пространство действий — это $n$-мерный непрерывный вектор (где $n$ — количество активов), который преобразуется в веса портфеля через функцию softmax:

$$w_i = \frac{e^{a_i}}{\sum_{j=1}^{n} e^{a_j}}$$

Это преобразование гарантирует, что веса неотрицательны и суммируются до единицы. Агент также может включить «кассовую» позицию как дополнительный актив, позволяя ему уменьшить рыночную экспозицию в периоды неопределённости.

Проектирование вознаграждения

Функция вознаграждения критически важна для формирования поведения агента. Распространённый выбор — дифференциальный коэффициент Шарпа:

$$r_t = \frac{\Delta A_t}{B_t - A_t^2}$$

где $A_t$ и $B_t$ — экспоненциальные скользящие средние доходностей и квадратов доходностей соответственно. Это вознаграждение напрямую оптимизирует показатели с учётом риска, а не сырые доходности, предотвращая принятие агентом чрезмерно рискованных стратегий.

Транзакционные издержки включаются как штраф, пропорциональный обороту портфеля:

$$r_t^{net} = r_t - c \sum_i |w_{i,t} - w_{i,t-1}|$$

где $c$ — ставка транзакционных издержек. Это побуждает агента торговать только тогда, когда ожидаемое улучшение превышает стоимость ребалансировки.

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

Реализация следует модульной архитектуре с основными компонентами:

Сеть актёр-критик

Архитектура актёр-критик использует общую основу для извлечения признаков с отдельными головами для политики (актёр) и функции ценности (критик). Общая основа извлекает общие представления из состояния рынка, а отдельные головы специализируются на своих задачах. Этот дизайн уменьшает количество параметров и улучшает стабильность обучения через совместное обучение признаков.

Цикл обучения PPO

Цикл обучения следует стандартной процедуре PPO:

  1. Собрать партию траекторий с использованием текущей политики
  2. Вычислить преимущества с использованием GAE
  3. Для каждой эпохи оптимизации (обычно 4):
    • Перемешать партию и разделить на мини-батчи
    • Для каждого мини-батча вычислить обрезанные суррогатные потери и обновить параметры

Портфельная среда

Среда моделирует мультиактивное управление портфелем с реалистичными характеристиками:

  • Транзакционные издержки, пропорциональные обороту
  • Непрерывное наблюдение ценовых признаков
  • Мягкие ограничения весов портфеля через softmax

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

Реализация получает исторические данные свечей (kline) из API Bybit для нескольких активов одновременно, обрабатывает их в формат признаков, ожидаемый средой, и поддерживает как бэктестинг, так и потоки данных в реальном времени.

Смотрите rust/src/lib.rs для полной реализации со всеми компонентами и rust/examples/trading_example.rs для рабочей демонстрации.

6. Мультиактивные данные Bybit

API Bybit предоставляет исторические и данные рыночных данных в реальном времени для криптовалютных пар. Для мультиактивного управления портфелем мы получаем данные для нескольких торговых пар (BTC/USDT, ETH/USDT) и выравниваем их по временным меткам.

Ключевые соображения при работе с данными Bybit:

  • Ограничение частоты запросов: API имеет ограничения частоты, которые необходимо соблюдать. Наша реализация использует последовательные запросы с соответствующими задержками.
  • Выравнивание данных: Разные активы могут иметь немного разные доступные временные диапазоны. Мы используем внутренние соединения по временным меткам для обеспечения выравнивания.
  • Обработка пропущенных данных: Разрывы в данных заполняются предыдущими значениями для поддержания непрерывных временных рядов.
  • Нормализация: Сырые данные OHLCV преобразуются в доходности и нормализованные признаки перед подачей агенту.

Публичный API Bybit https://api.bybit.com/v5/market/kline предоставляет данные свечей с настраиваемыми интервалами (1m, 5m, 15m, 1h, 4h, 1d). Для управления портфелем мы обычно используем часовые или дневные интервалы для уменьшения шума и транзакционных издержек.

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

  1. Обрезанная целевая функция PPO предотвращает катастрофические обновления политики, что делает его уникально подходящим для управления финансовым портфелем, где стабильность имеет первостепенное значение. Простой механизм обрезки обеспечивает гарантии, аналогичные доверительной области, без вычислительных затрат TRPO.

  2. Обобщённая оценка преимущества (GAE) предоставляет принципиальный способ балансировки смещения и дисперсии в оценках преимущества. Параметр $\lambda$ позволяет настроить этот компромисс для конкретных характеристик финансовых данных о доходности.

  3. Мультиактивное управление портфелем естественно отображается на фреймворк PPO: состояние захватывает рыночные признаки по активам, действие — непрерывный вектор весов портфеля, а вознаграждение напрямую измеряет показатели с учётом риска.

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

  5. Штрафы за транзакционные издержки в функции вознаграждения предотвращают чрезмерную торговлю и побуждают агента ребалансировать только тогда, когда ожидаемая выгода превышает издержки. Это приводит к более реалистичным и практичным стратегиям.

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

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

  8. Характеристики производительности Rust делают его идеальным для реализации циклов обучения PPO, требующих миллионов шагов среды. Комбинация абстракций с нулевой стоимостью, безопасности памяти и отличной поддержки числовых вычислений позволяет создавать реализации промышленного уровня.