Я руковожу курсом Обучение с подкреплением в школе онлайн образования OTUS. И работая со студентами я обнаружил, что очень немногие из них что-либо слышали о библиотеке глубокого обучения с подкреплением FinRL. К сожалению русскоязычных материалов по этой библиотеки крайне мало и мне хотелось бы восполнить этот пробел и познакомить наших слушателей с этим замечательным инструментом.

Этой статьей я открываю цикл, посвященный обзору возможностей и практике работы с библиотекой FinRL.

Введение

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

До DRL обычное обучение с подкреплением (Reinforcement Learning - RL) применялось для решения сложных финансовых задач, включая ценообразование опционов, оптимизацию портфеля и управление рисками. Муди и Саффелл [John Moody and Matthew Saffell: Learning to trade via direct reinforcement., IEEE Transactions on Neural Networks, 12(4), 2001, 875-889] в своей работе использовали поиск политики и прямое RL для торговли акциями. Денг со своей командой [Yue Deng and F. Bao and Youyong Kong and Zhiquan Ren and Q. Dai: Deep direct reinforcement learning for financial signal representation and trading., IEEE Transactions on Neural Networks and Learning Systems, 28, 2017, 653-664] показали, что применение глубоких нейронных сетей является более эффективным и приносит больше прибыли. Некоторые специалисты-практики изучают торговые стратегии основанные на DRL, поскольку глубокие нейронные сети значительно лучше аппроксимируют ожидаемую прибыль в состоянии с определенным действием. С развитием более надежных моделей и стратегий общие подходы к машинному обучению, и методы DRL в частности, становятся все более надежными. Например, DRL был реализован при сентиментном анализе портфеля и анализе стратегии ликвидации, демонстрируя потенциал DRL в различных финансовых задачах.

Однако реализовать торговую стратегию, основанную на DRL или RL, не так-то просто. Процессы разработки и отладки сложны и чреваты ошибками. Обучающие среды, управление промежуточными состояниями торговли, организация данных, связанных с обучением, и стандартизация результатов для оценки метрик - эти шаги стандартны в реализации, но отнимают много времени, особенно у новичков. Поэтому мы создали удобную для новичков библиотеку с отлаженными стандартными алгоритмами DRL. Она была разработана на основе трех основных принципов:

  • Полнота. Библиотека должна полностью покрывать основные алгоритмы DRL, что является фундаментальным требованием;

  • Практические учебники. Команда FinRL стремимся создать библиотеку, удобную для новичков. Учебники с подробным описанием помогут пользователям изучить функциональные возможности библиотеки;

  • Воспроизводимость. Наша библиотека должна гарантировать воспроизводимость, чтобы обеспечить прозрачность, а также дать пользователям уверенность в том, что они сделали.

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

На самом нижнем уровне находится модель среды, которая описывает финансовую рыночную среду, используя фактические исторические данные шести основных индексов с различными атрибутами, такими как название позиции, цена открытия/закрытия, объем торгов, технические индикаторы и т. д.

На среднем уровне находится слой агента, который обеспечивает тонкую настройку стандартных алгоритмов DRL (DQN, DDPG, Adaptive DDPG, Multi-Agent DDPG, PPO, SAC, A2C и TD3), широко используемые функции вознаграждения и стандартные инструменты оценки для облегчения отладки и повышения воспроизводимости. Агент взаимодействует с окружающей средой с помощью функций вознаграждения в пространстве состояний и пространстве действий.

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

В этой статье представлены следующие основные положения:

  • FinRL — это библиотека с открытым исходным кодом, специально разработанная и реализованная для количественных финансов. Предоставляет торговые среды, включающие основные рыночные ограничения.

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

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

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

Состояние современных алгоритмов

Последние работы можно разделить на три подхода: алгоритмы основанные на функции ценности, алгоритмы основанные на политике, и алгоритмы архитектуры актор-критик. В FinRL эти алгоритмы объединены под одним интерфейсом для более легкого построения финансовых моделей.

Существует ряд библиотек машинного обучения, которые имеют схожие черты с библиотекой FinRL:

  • OpenAI Gym - популярная библиотека с открытым исходным кодом, предоставляющая стандартизированный набор окружений задач. OpenAI Baselines реализует высококачественные алгоритмы DRL, используя окружения gym. Stable Baselines - форк OpenAI Baselines с удобными примерами.

  • GoogleDopamine - это исследовательская платформа для создания прототипов алгоритмов глубокого обучения с подкреплением.

  • RLlib обеспечивает высокую масштабируемость алгоритмов обучения с подкреплением. Он имеет модульную структуру и очень хорошо поддерживается.

  • Horizon - это DL-ориентированный фреймворк, в котором доминирует PyTorch, а основным вариантом использования является обучение RL-моделей в пакетном режиме.

Традиционно DRL имеет множество применений в количественных финансах:

  • Торговля акциями обычно считается одним из самых сложных приложений из-за ее шумных и волатильных характеристик. Для повышения качества моделей для торговли фьючерсными контрактами в DRL может быть добавлено масштабирование волатильности. Добавив в функции вознаграждения член рыночной волатильности, мы можем увеличить торговые доли с низкой волатильностью, и наоборот.

  • Настроения в заголовках новостей и графы знаний также могут быть объединены с данными по временным рядам акций для обучения оптимальной политики с помощью DRL.

  • Высокочастотная торговля с использованием DRL также является актуальной темой широко применяемая на практике.

  • Deep Hedging представляет стратегии хеджирования с помощью нейронных сетей, обученных с помощью современного поиска политики DRL. Она использует DRL для управления рисками ликвидных деривативов.

Все эти стратегии могут быть реализованы с использованием библиотеки FinRL.

Архитектура библиотеки FinR

Библиотека FinRL состоит из трех слоев: окружения, агентов и приложений.

Общая схема библиотеки FinRL. Она состоит из трех слоев: слой приложений, слой агентов DRL и слой среды финансового рынка
Общая схема библиотеки FinRL. Она состоит из трех слоев: слой приложений, слой агентов DRL и слой среды финансового рынка

Окружение: Симулятор торговли с учетом времени

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

Наши торговые среды, основанные на фреймворке OpenAI Gym, моделируют живые фондовые рынки с реальными рыночными данными в соответствии с принципом моделирования, ориентированного на время. Библиотека FinRL стремится предоставить торговые среды, созданные на основе шести наборов данных по пяти основным биржам.

Пространство состояний, пространство действий и функция вознаграждения

Пространство состояний \mathcal{S}. Пространство состояний описывает наблюдения, которые агент получает из окружающей среды. Как человеку-трейдеру необходимо проанализировать различную информацию, прежде чем совершить сделку, так и наш торговый агент наблюдает множество различных характеристик, чтобы лучше обучаться в интерактивной среде. Мы предоставляем пользователям различные возможности:

  • Баланс b_t \in \mathbb{R}_+: количество денег, оставшихся на счете на текущем временном шаге t;

  • Собственные акции h_t \in \mathbb{Z}_+^n текущие позиции для каждой акции, n - количество акций;

  • Цена закрытия p_t \in \mathbb{R}_+^n: одна из наиболее часто используемых характеристик.

  • Цена открытия, максимальная и минимальная цена за период (минута/час/день) o_t, h_t, l_t \in \mathbb{R}_+^n используются для отслеживания изменений цены;

  • Объем торгов v_t \in \mathbb{R}_+^n общее количество акций, проданных в течение торгового интервала;

  • Технические индикаторы: Moving Average Convergence Divergence (MACD) M_t \in \mathbb{R}^n и Relative Strength Index (RSI) R_t \in \mathbb{R}^n_+ и др.;

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

Пространство действий \mathcal{A}. Пространство действий \mathcal{A} описывает допустимые действия, которыми агент взаимодействует с окружающей средой. Обычноa \in \mathcal{A} входят три действия: a \in \{-1, 0, 1\}, где \{-1, 0, 1\} означают продажу, удержание и покупку одной акции. Кроме того, действие может распространяться на несколько акций, т.е.: \{-k, ..., -1, 0, 1, ..., k\}, где k обозначает количество акций. Например, "Купить 10 акций AAPL" или "Продать 10 акций AAPL" - это 10 или -10, соответственно.

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

  • Изменение стоимости портфеля при выполнении действия a в состоянии s и перехода в новое состояние s', т.е. r(s, a, s') = v' - v, где v' и v представляют собой стоимости портфеля в состояниях s' и s, соответственно;

  • Логарифм отношения функции ценности состояния s' в которое система перешла выполнив действие a в состоянии к функции ценности исходного состояния s: r(s, a, s') = \log{\frac{v'}{v}};

  • Коэффициент Шарпа для данного периода t=\{1, ..., T\} в виде: S_T=\frac{mean(R_t)}{std(R_t)}, где R_t=v_t-v_{t-1};

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

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

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

Понимая, что создание обучающей среды требует много времени и усилий, FinRL предоставляет шесть сред, основанных на репрезентативных листингах, включая NASDAQ-100, DJIA, S&P 500, SSE 50, CSI 300 и HSI, а также возможность создания среды, определяемой пользователем. Благодаря этим усилиям данная библиотека освобождает пользователей от утомительной и трудоемкой работы по предварительной обработке данных.

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

Агенты

Библиотека FinRL включает в себя тонко настроенные стандартные алгоритмы DRL, а именно DQN, DDPG, Multi-Agent DDPG, PPO, SAC, A2C и TD3.

Мы также позволяем пользователям разрабатывать собственные алгоритмы DRL, адаптировать и встраивать их, например, адаптивный DDPG, или использовать ансамблевые методы.

Алгоритмы DRL, представленные в FinRL.
Алгоритмы DRL, представленные в FinRL.

Оценка эффективности работы

Для анализа эффективности торговли предусмотрены стандартные метрики и базовые торговые стратегии. Для разработки торговой стратегии библиотека FinRL использует последовательность "обучение - валидация - тестирование".

Показатели эффективности

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

Базовые торговые стратегии

Базовые торговые стратегии должны быть хорошо подобраны и соответствовать промышленным стандартам. Такие стратегии будут универсальными для измерения, стандартными для сравнения и простыми в реализации. В библиотеке FinRL традиционные торговые стратегии служат в качестве базы для сравнения со стратегиями DRL.

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

Сравнение площадок

Поскольку финансовые данные рынков представляют собой временные ряды, то для оценки эффуктивности торговой стратегии данные фондового рынка разделены на три этапа:

  • Обучающий набор данных - это выборка данных для подгонки модели DRL. Модель видит и обучается на обучающем наборе данных.

  • Валидационный набор данных используется для настройки параметров и предотвращения переобучения.

  • Набор данных для тестирования (торговли) - это выборка данных для беспристрастной оценки финальной модели.

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

Тестирование с ограничением

Чтобы лучше смоделировать практическую торговлю, мы включаем торговые ограничения, уход от риска и инструменты автоматического бэктестинга.

Автоматизированное бэктестирование

Бэктестирование играет ключевую роль в оценке эффективности. Автоматизированный инструмент бэктестинга предпочтительнее, так как он уменьшает количество человеческих ошибок. В библиотеке FinRL мы используем пакет Quantopian pyfolio для бэктестирования наших торговых стратегий. Этот пакет прост в использовании и предоставляет полную информацию об эффективности торговой стратегии.

Включение торговых ограничений

При совершении сделки возникают транзакционные издержки. Существует множество типов транзакционных издержек, таких как брокерские комиссии и сборы SEC. Мы позволяем пользователям рассматривать транзакционные издержки как параметр в наших средах:

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

  • Процент за сделку: ставка за каждую проданную акцию, например, 1/1000 или 2/1000 - наиболее часто используемые ставки стоимости сделки.

Кроме того, при торговле акциями необходимо учитывать рыночную ликвидность, такую как бид-аск спред. Бид-аск спрэд - это разница между ценами, указанными для немедленной продажи и немедленной покупки акций. В средах FinRL вы можете добавить бид-аск спред в качестве параметра к цене закрытия акций, чтобы имитировать реальный торговый опыт.

Неприятие риска

Неприятие риска отражает, насколько рискованную стратегию может принять инвестор при различном уровне волатильности рынка.

Для контроля риска в таком крайнем случае, как финансовый кризис 2007–2008 годов, FinRL использует финансовый индекс турбулентности turbulence_t, который измеряет экстремальные колебания цен на активы:

turbulence_t = (y_t - \mu) \Sigma^{-1}(y_t - \mu)' \in R

где y_t \in R_n обозначает доходность акций на текущий период t, \mu \in R^n обозначает среднее значение исторических доходностей, а \Sigma \in R^{n \times n} обозначает ковариацию исторических доходностей. Он используется в качестве параметра, который контролирует действия покупки или продажи. Например, если индекс турбулентности достигает заранее определенного порога, агент приостанавливает действия по покупке и начинает постепенно продавать имеющиеся акции.

Примеры использования

Мы демонстрируем три примера использования FinRL:

  • торговля одиночными акциями,

  • торговля несколькими акциями

  • распределение портфеля.

Библиотека FinRL предоставляет практические и воспроизводимые решения для каждого случая использования, с онлайн-руководством пошаговой работы с помощью блокнотов Jupyter (например, настройки рабочей среды и команды).

На рисунке показана оценка эффективности торговли одиночными акциями. Мы выбираем ETF крупных капитализаций, такие как SPDR S&P 500 ETF Trust (SPY) и Invesco QQQ Trust Series 1 (QQQ), а также акции, такие как Google (GOOGL), Amazon (AMZN), Apple (AAPL) и Microsoft (MSFT) и используем алгоритм PPO в FinRL для обучения торгового агента. Максимальное падение большое из-за рыночного краха во время пандемии Covid-19.

Оценка эффективности торговли одиночными акциями
Оценка эффективности торговли одиночными акциями

На рисунке показаны результаты торговли несколькими акциями и балансировки портфеля по акциям компаний Dow Jones 30. Мы используем алгоритмы DDPG и TD3 для торговли несколькими акциями и балансировки портфеля.

Оценка эффективности торговли несколькими акциями и балансировки портфеля
Оценка эффективности торговли несколькими акциями и балансировки портфеля

Заключение

В этой статье мы представили библиотеку FinRL, которая является библиотекой глубокого обучения с подкреплением (DRL), специально разработанной для автоматизированной торговли акциями с упором на образовательные и демонстрационные цели.

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

При проектировании торговой стратегии FinRL следует схеме обучения-валидации-тестирования и предоставляет автоматическое обратное тестирование, а также бенчмарк-тесты. В репозитории вы можете найти пошаговые руководства в формате блокнота Jupyter, которые демонстрируют легко воспроизводимые прибыльные стратегии в различных сценариях с использованием FinRL: (i) торговля одиночными акциями; (ii) торговля несколькими акциями; (iii) включение механизма балансировки портфеля.

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

В следующих статьях я представлю детальные руководства для новичков по применению FinRL.

Комментарии (17)


  1. kaplunov
    17.03.2024 21:01

    Спасибо за статью. Прочитал с большим интересом.

    MOEX напрямую в данной библиотеке не поддерживается, если я верно понял?


    1. arsenibatullin
      17.03.2024 21:01

      Вы знаете, какие библиотеки поддерживаются с MOEX? Или может быть можно как-то через API получать доступ к данным и уже потом по запросу совершать сделки с помощью данной библиотеки


      1. SGarik Автор
        17.03.2024 21:01

        На Habr'e обсуждали эту тему. Доступ к данным MOEX:
        https://habr.com/ru/articles/781006/

        https://habr.com/ru/articles/759922/


    1. SGarik Автор
      17.03.2024 21:01

      Нет не поддерживается. Вообще практически все библиотеки из этой области созданы вне России и из коробки данные российских площадок не поддерживают.
      НО есть возможность прикрутить кастомное окружение - пожалуйста, скачивайте данные MOEX и подключайте. Для торговли тоже есть API у MOEX для взаимодействия с площадкой, а FinRL вам предоставит алгоритмы обучения агента.


  1. dyadyaSerezha
    17.03.2024 21:01

    Если все используют крутые библиотеки для умных торгов и прибыли, то кто же тогда теряет деньги? Ведь торги - игра с нулевой суммой.


    1. Kwent
      17.03.2024 21:01
      +1

      Не с нулевой, с отрицательной (комиссии брокера, налоги на дивиденды и тд), с нулевой ещё нормально было бы)


    1. Nikolaev_Nikolay
      17.03.2024 21:01

      Не с нулевой. Биржа (казино) всегда в плюсе.


      1. matsukaze
        17.03.2024 21:01

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


    1. SGarik Автор
      17.03.2024 21:01

      Торги являются игрой с нулевой суммой только в случае, если все участники обладают полной информацией. А в реальной жизни это не так.
      Дискутировать можно долго, но если вам управляющий фонд готов платить 15-20% прибыли от управления вашими деньгами, то какова прибыль их алгоритмов? (Цссс... около 60%)


      1. dyadyaSerezha
        17.03.2024 21:01

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


    1. Refridgerator
      17.03.2024 21:01
      +1

      Если все эти умные библиотеки действительно зарабатывают - то какой смысл выкладывать их забесплатно в общий доступ? Современные ИИ до сих пор нотный текст не умеют распознавать, если тот сложнее упражнений из музыкальной школы, а тут невидимую руку рынка узреть хотят.


      1. dyadyaSerezha
        17.03.2024 21:01

        Невидимую волочатую руку закулисы Запада? А вот пишут, что ИИ уже вовсю используют)


  1. Nikolaev_Nikolay
    17.03.2024 21:01

    Как ММВБ подключить и обучить с ее исторических данных!? Есть ли туннель на Квик!? Иначе все это просто игры. Я пытался играть с нейросетью против крипто рынка. И это я скажу все ровно проигрыш. Что тут так хорошо, это настораживает.


    1. SGarik Автор
      17.03.2024 21:01

      На Habr'e обсуждали эту тему. Доступ к данным MOEX:
      https://habr.com/ru/articles/781006/

      https://habr.com/ru/articles/759922/

      Туннель на квик то вам зачем? Вам нужно API с биржей а не с квиком.

      но если очень надо - то вот обсуждение на Habr'e: https://habr.com/ru/articles/680872/


  1. Qazrobotics
    17.03.2024 21:01
    +1

    Давно уже занимаюсь этой темой, 4 года исследую всевозможные алгоритмы и нейронки. Скажу так за 4 года моих исследований Reinforcement Learning не особо себя зарекомендовал как основной, я его использовал как вспомогательный. Но тоже ничего особого не вышло. Спустя 4 года кодинга и поиска решения я его нашел. Скажу одно, не идите сложным путем и не делайте сложного в простом, все оказалось гораздо проще. Достаточно индикаторов (модифицированных соответственно)и простой нейронки. Одна подсказка Aroon


    1. excoder
      17.03.2024 21:01

      Супер! На каких инструментах/рынках получилось?


  1. excoder
    17.03.2024 21:01

    Итоговый график неплох. А что с робастностью по параметрам (любым)? Не будет такого, что мы сваливаемся в марте 2020 на одном наборе параметров, но не сваливаемся на близких других? Если нет "гладкости" модели по параметрам, то цена ей невелика.