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

Глава 309: Формирование вознаграждения для трейдинга

Введение

Обучение с подкреплением (RL) стало мощной парадигмой для создания автономных торговых агентов. Однако одной из наиболее важных и часто упускаемых из виду задач при применении RL к финансовым рынкам является проектирование функции вознаграждения. Наивный сигнал вознаграждения — такой как чистая прибыль и убыток (PnL) — может привести к тому, что агенты будут переобучаться на конкретные рыночные условия, принимать чрезмерные риски или не смогут обучить осмысленные политики из-за разреженной и задержанной обратной связи.

Формирование вознаграждения (reward shaping) решает эту проблему путём дополнения базового сигнала вознаграждения дополнительными слагаемыми, которые направляют агента к желаемому поведению, не изменяя оптимальную политику. Ключевое открытие из основополагающей работы Ng, Harada и Russell (1999) заключается в том, что формирование вознаграждения на основе потенциалов сохраняет инвариантность политики: оптимальная политика при сформированном вознаграждении идентична оптимальной политике при исходном вознаграждении, но обучение может быть значительно быстрее.

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

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

Фреймворк формирования вознаграждения

Рассмотрим марковский процесс принятия решений (MDP), определяемый кортежем (S, A, T, R, gamma), где S — пространство состояний, A — пространство действий, T — функция перехода, R — функция вознаграждения, а gamma — коэффициент дисконтирования.

Сформированная функция вознаграждения R’ определяется как:

R'(s, a, s') = R(s, a, s') + F(s, a, s')

где F — функция формирования, предоставляющая агенту дополнительную обратную связь.

Формирование на основе потенциалов

Критический теоретический результат состоит в том, что формирование на основе потенциалов гарантирует инвариантность политики. Функция формирования принимает вид:

F(s, a, s') = gamma * Phi(s') - Phi(s)

где Phi: S -> R — вещественнозначная функция потенциала, определённая на состояниях. Эта формулировка обеспечивает:

  1. Теорема об инвариантности политики: Для любого MDP M и любой функции потенциала Phi оптимальная политика при сформированном вознаграждении R’ = R + F идентична оптимальной политике при исходном вознаграждении R. Это справедливо, поскольку потенциальные слагаемые телескопируются по траекториям, внося лишь граничные члены, не влияющие на относительный порядок политик.

  2. Гарантия сходимости: Q-обучение и SARSA с формированием на основе потенциалов сходятся к тем же оптимальным Q-значениям (с точностью до постоянного смещения), что и без формирования. А именно, Q’(s, a) = Q(s, a) - Phi(s).

  3. Ускорение обучения: Хотя оптимальная политика сохраняется, сформированное вознаграждение может значительно сократить количество эпизодов, необходимых для сходимости, обеспечивая более плотную обратную связь и снижая дисперсию оценок вознаграждения.

Набросок доказательства инвариантности политики

Для любой траектории tau = (s_0, a_0, s_1, a_1, …, s_T) кумулятивное сформированное вознаграждение отличается от кумулятивного исходного вознаграждения на:

Sum_{t=0}^{T-1} F(s_t, a_t, s_{t+1}) = Sum_{t=0}^{T-1} [gamma * Phi(s_{t+1}) - Phi(s_t)]

Эта телескопическая сумма равна:

gamma^T * Phi(s_T) - Phi(s_0) + Sum_{t=1}^{T-1} (gamma - 1) * Phi(s_t) * [поправочные члены]

В дисконтированном случае с бесконечным горизонтом это сводится к постоянному смещению, зависящему только от начального состояния, а не от политики. Следовательно, argmax по политикам сохраняется.

Формирование не на основе потенциалов и риски

Если функция формирования F не выведена из потенциала, инвариантность политики не гарантирована. Типичные ловушки включают:

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

На практике многие полезные модификации вознаграждения для трейдинга (такие как штрафы за просадку) не являются строго потенциальными. Мы рассматриваем компромиссы и предоставляем рекомендации, когда формирование не на основе потенциалов допустимо.

Конструкции вознаграждения для трейдинга

1. Базовое вознаграждение: Чистый PnL

Простейшее вознаграждение — изменение стоимости портфеля:

R_pnl(t) = V(t) - V(t-1)

где V(t) — стоимость портфеля в момент времени t. Хотя это интуитивно, такое вознаграждение:

  • Не учитывает риск
  • Может приводить к политикам с высокой дисперсией
  • Не штрафует за просадки или чрезмерную торговлю

2. Формирование на основе коэффициента Шарпа

Коэффициент Шарпа измеряет доходность с учётом риска. Мы включаем его через функцию потенциала:

Phi_sharpe(s) = k * rolling_sharpe(s, window)

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

F_sharpe(s, s') = gamma * k * sharpe(s') - k * sharpe(s)

Это побуждает агента переходить в состояния с более высокой доходностью с учётом риска.

Особенности проектирования:

  • Размер окна влияет на чувствительность: короткие окна (20-50 шагов) более отзывчивы, но шумнее
  • Масштабирующий коэффициент k должен быть откалиброван относительно величины вознаграждений PnL
  • Коэффициент аннуализации: умножить на sqrt(252) для дневных данных

3. Формирование со штрафом за просадку

Максимальная просадка — критически важная метрика риска для трейдеров. Определим потенциал штрафа за просадку:

Phi_dd(s) = -lambda * max(0, peak_value(s) - current_value(s)) / peak_value(s)

где lambda управляет серьёзностью штрафа, а peak_value(s) — историческая пиковая стоимость портфеля.

Свойства:

  • Штраф растёт по мере удаления портфеля от пика
  • Восстановление к пику генерирует положительное вознаграждение формирования
  • Параметр lambda позволяет тонко настраивать компромисс между риском и доходностью

4. Штраф за транзакционные издержки

Чрезмерная торговля уменьшает доходность из-за комиссий и проскальзывания:

F_tc(s, a, s') = -c * |position_change(a)|

где c — стоимость за единицу торговли. Это не основано на потенциале (зависит от действия), но напрямую моделирует реальную структуру издержек.

Расширения:

  • Пропорциональные издержки: c * |position_change| * price
  • Ярусные комиссии: разные ставки для мейкеров и тейкеров
  • Моделирование проскальзывания: издержки, растущие с размером ордера

5. Формирование с учётом режима

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

Phi_regime(s) = w_regime(s) * base_potential(s)

где w_regime(s) — вес, зависящий от режима.

6. Композитная функция вознаграждения

На практике мы комбинируем несколько слагаемых формирования:

R_total(s, a, s') = R_pnl(s, a, s') + alpha * F_sharpe(s, s') + beta * F_dd(s, s') + delta * F_tc(s, a, s')

где alpha, beta и delta — гиперпараметры, контролирующие относительную важность каждого компонента.

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

Реализация в rust/src/lib.rs включает:

  1. Трейт RewardShaper: Общий интерфейс для всех стратегий формирования вознаграждения.

  2. PnlReward: Базовое вознаграждение PnL на основе изменений цены и позиций.

  3. SharpeShapingReward: Формирование на основе потенциалов с использованием скользящего коэффициента Шарпа.

  4. DrawdownPenaltyReward: Формирование на основе просадки с отслеживанием пиковой стоимости портфеля.

  5. TransactionCostPenalty: Моделирование издержек, зависящих от действия.

  6. CompositeReward: Комбинирование нескольких компонентов вознаграждения с взвешенной агрегацией.

  7. QLearningAgent: Табличный агент Q-обучения с поддержкой сформированных вознаграждений.

  8. BybitClient: HTTP-клиент для получения исторических данных kline из API Bybit.

Интеграция данных Bybit

Система получает исторические данные OHLCV из публичного API Bybit:

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

Конвейер данных:

  1. Получение данных kline с настраиваемыми символом, интервалом и лимитом
  2. Разбор JSON-ответа в типизированные структуры Rust
  3. Вычисление производных признаков (доходности, волатильность, скользящие средние)
  4. Подача в среду симуляции торговли
  5. Запуск эпизодов Q-обучения с различными конфигурациями формирования вознаграждения

Экспериментальное сравнение

Торговый пример (rust/examples/trading_example.rs) демонстрирует влияние формирования вознаграждения путём обучения трёх агентов:

  1. Агент с чистым PnL: Использует только вознаграждение по изменению цены. Склонен к агрессивным позициям, высокая дисперсия результатов.

  2. Агент с формированием Шарпа: Добавляет потенциал скользящего коэффициента Шарпа. Обучается более гладким кривым эквити, лучшей доходности с учётом риска.

  3. Агент со штрафом за просадку: Добавляет штраф за просадку. Более консервативный, меньшая максимальная просадка.

Метрики сравнения:

  • Общая доходность
  • Коэффициент Шарпа
  • Максимальная просадка
  • Коэффициент Сортино
  • Количество сделок (оборот)
  • Доля выигрышных сделок

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

  1. Формирование вознаграждения необходимо для практических RL-систем трейдинга. Чистый PnL сам по себе даёт недостаточное руководство для обучения политик с учётом риска.

  2. Формирование на основе потенциалов сохраняет оптимальность. Теорема об инвариантности политики гарантирует, что потенциальные функции формирования не изменяют оптимальную политику, одновременно ускоряя обучение.

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

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

  5. Формирование не на основе потенциалов требует осторожности. Штрафы за транзакционные издержки и некоторые корректировки риска не являются строго потенциальными. Необходимо контролировать искажение политики.

  6. Чувствительность к гиперпараметрам. Веса слагаемых формирования (alpha, beta, delta) существенно влияют на выученное поведение. Используйте систематическую настройку с валидацией на данных вне выборки.

  7. Учёт режима улучшает адаптивность. Корректировка формирования вознаграждения на основе обнаруженных рыночных режимов помогает агентам адаптироваться к меняющимся условиям.

  8. Rust обеспечивает преимущества производительности. Вычислительные требования обучения RL — множество эпизодов, множество шагов — выигрывают от абстракций нулевой стоимости и эффективного управления памятью Rust.

Ссылки

  • Ng, A. Y., Harada, D., & Russell, S. J. (1999). Policy invariance under reward transformations: Theory and application to reward shaping. ICML.
  • Devlin, S., & Kudenko, D. (2012). Dynamic potential-based reward shaping. AAMAS.
  • Moody, J., & Saffell, M. (2001). Learning to trade via direct reinforcement. IEEE Transactions on Neural Networks.
  • Almahdi, S., & Yang, S. Y. (2017). An adaptive portfolio trading system. Expert Systems with Applications.
  • Spooner, T., Fearnley, J., Savani, R., & Kouroupi, A. (2018). Market making via reinforcement learning. AAMAS.