• FinRL - это глубокая библиотека RL, цель которой - предоставить основу для реализации количественного финансирования с помощью RL. Итак, в этом руководстве для начинающих мы начнем с компонентов обучения с подкреплением, структуры каталогов библиотеки, затем рассмотрим код, чтобы понять реализацию, и, наконец, обсудим другие учебные пособия, которые вы можете изучить с учетом вашего варианта использования. В этом сообщении в блоге предполагается, что вы знакомы с основами Обучение с подкреплением, Градиент политики и такие методы критики как DDPG, PPO, SAC, TD3 и A2C. Также посмотрите этот пост в блоге.

ОБУЧЕНИЕ ПО УСИЛЕНИЮ ДЛЯ ФИНАНСОВОГО ОБОРУДОВАНИЯ

  • В обучении с подкреплением есть три основных компонента: (i) состояние, (ii) действие и (iii) вознаграждение. Агент RL наблюдает за пространством состояний, а затем придумывает действие, чтобы максимизировать общее вознаграждение в будущем.

ГОСУДАРСТВО-ПРОСТРАНСТВО

  • Пространство состояний соответствует пространству наблюдения и внутреннему состоянию агента. Область наблюдения состоит из рыночной информации, такой как цены открытия, закрытия, максимума и минимума. Он может состоять из другой информации, например, технических индикаторов: MACD (расхождение сходимости скользящих средних), RSI (индекс относительной силы), CCI (индекс товарного канала) и DMI (индекс направленного движения) [по умолчанию в FinRL]. Внутреннее пространство состояний состоит из оставшейся денежной стоимости и количества акций, принадлежащих конкретному активу.
  • Вы можете расширить пространство состояний, включив в него информацию о финансовых настроениях, макроэкономических показателях, обменных курсах и т. Д. Ее можно передать в параметр daily_information_cols при объявлении окружающей среды.
  • Общая стоимость портфеля (стоимость активов) выражается как сумма оставшихся денежных средств и стоимости акций (количество принадлежащих акций × цена закрытия в день транзакции)

ДЕЙСТВИЕ-ПРОСТРАНСТВО

  • Здесь пространство действий находится в диапазоне {-k,…, 0,…. + K}, где k ϵ N.
  • -k и + k означают продажу и покупку k акций для данного актива. 0 означает ничего не делать или удерживать. Таким образом, общее пространство действий составляет (2k + 1), и оно растет экспоненциально по мере того, как мы включаем больше активов в наш портфель. (2k + 1) ^ M, где M - количество акций в вашем портфеле.
  • Здесь мы используем сеть «субъект-критик», где сеть-субъект выводит действие в нормальном распределении, то есть [-1,1]. Отрицательное значение означает продажу, а положительное значение - покупку. У нас есть гиперпараметр hₘₐₓ, который умножается на действия и преобразует его в целое число (чтобы избежать дробных долей). Предположим, hₘₐₓ = 10, тогда действие варьируется от {-10, -9,… 0,… + 9, + 10}. Таким образом, вы можете купить или продать не более 10 акций.
  • Большее пространство для действий дает больше возможностей для исследования.

НАГРАДА

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

СТРУКТУРА КАТАЛОГА

  • В каталоге finrl есть 3 важных каталога.

  • Первая - это папка приложений. Она содержит файл config.py. Он имеет все конфигурации по умолчанию, необходимые для торговли. Подобно config.TECHNICAL_INDICATORS_LIST, вы получите список всех технических индикаторов по умолчанию, config.DOW_30_TICKER предоставит список тикеров акций в DOW Jones. Он также имеет все гиперпараметры модели по умолчанию.
  • В остальных папках есть обученные веса для модели A2C для различных случаев, таких как торговля криптовалютой, HFT, торговля акциями и распределение портфелей. Вы можете скачать zip-файлы и использовать их для вывода выводов, и вам не нужно обучать его с нуля.
  • Во-вторых, у нас есть папка drl_agents. В ней есть три подкаталога: elegancerl, rllib и stable_baselines3. Elegantrl - еще одна библиотека от Ai4Finance-LLC. Вы можете импортировать различные модели, такие как PPO, TD3, DDPG и SAC, из этой библиотеки, чтобы обучать и прогнозировать действия для различных активов.
  • Rllib - это масштабируемая среда обучения с подкреплением, которая помогает в распределенных вычислениях. Здесь вы можете импортировать модели и обучать их. Наконец, стабильные базовые планы 3 являются преемниками стабильных базовых показателей OpenAI, которые основаны на PyTorch, в отличие от последних, которые находятся на Tensorflow. Итак, у вас есть три способа импортировать модели и обучать их.
  • Наконец, у нас есть папка finrl_meta. В ней есть вся среда фондового рынка для различных сценариев, таких как торговля криптовалютой, распределение портфелей и торговля акциями. Среда - это симуляция, в которой наш агент будет предпринимать действия, а затем наблюдать за последующими состояниями на основе этих действий. Это приблизительный пример реальной торговой среды.
  • Вы можете создать экземпляр торговой среды и передать аргументы среды. У него есть функция reset (), которая отбрасывает вашего агента в начале эпизода, пополняет ваши деньги до первоначальной суммы и обнуляет все ваши запасы. Функция step () определяет следующее состояние на основе вашего действия и обновляет ваше внутреннее состояние, такое как денежные средства и авуары.
  • Папка препроцессора поможет вам загрузить данные OHCLV для различных активов с помощью Yahoo Finance. Есть и другие способы загрузки, которые вы можете найти в файле data_processor.py. Для получения данных о криптовалюте вы можете обратиться к разделу обучающие программы в FinRL, чтобы загрузить данные с Binance.
  • Preprocessor.py в папке препроцессора добавляет технические индикаторы и турбулентность в наш фрейм данных OHCLV с помощью библиотеки stockstats.

ПОНИМАНИЕ КОДА

ПОДГОТОВКА ДАННЫХ

  • Мы рассмотрим базовое руководство, чтобы понять реализацию. Мы начнем со стандартного импорта и загрузки фрейма данных для DOW Jones из Yahoo Finance с помощью YahooDownloader. В портфеле Dow Jones 30 акций.
  • Затем этап предварительной обработки. Здесь мы включаем столбцы технических индикаторов. Vix - это индекс волатильности, который количественно оценивает волатильность рынков и, в частности, степень страха среди участников рынка. Используя VIX в качестве столбца индикатора риска, мы измеряем турбулентность рынка, и если турбулентность пересекает пороговое значение, мы продаем наши активы. Это ограничит наши потери на нашем турбулентном рынке, и как только волатильность улучшится ( ниже порога), возобновляем торговлю.

  • Затем мы генерируем фрейм данных loaded_full, в котором сортируем значения на основе даты и тикера. Итак, в приведенном ниже фрейме данных есть все технические индикаторы и столбцы турбулентности. Обратите внимание, что столбец тикера («галочка») расположен в алфавитном порядке.

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

СОЗДАНИЕ ОКРУЖАЮЩЕЙ СРЕДЫ

  • Сначала мы определим размерность запасов и пространство состояний. Биржевой размер означает длину количества тикеров (здесь 30).

  • Таким образом, пространство состояний равно 1 (для текущей денежной стоимости) + stock_dimension (для цены закрытия акции) + stock_dimension (для текущих владений или количества акций) + технические индикаторы для каждой акции (следовательно, умноженные на stock_dimension).

  • Buy_cost_pct и sell_cost_pct - это издержки проскальзывания. Это разница между ценой, по которой была размещена и исполнена сделка. Имеется небольшая задержка в исполнении, поэтому цена исполнения изменяется относительно цены размещения. Это изменение несущественно на низковолатильном рынке, но на очень волатильном рынке. Итак, чтобы ограничить наши убытки, вы можете использовать StockTradingEnvStopLoss, который не выполнит ордер, если цена выйдет за пределы определенной пропорции относительно вашей размещенной стоимости.
  • Таким образом, суммы покупки и продажи рассчитываются следующим образом

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

  • Мы рассмотрим здесь только модель A2C, остальные реализации модели аналогичны.

  • Атрибут get_model создаст экземпляр нашей модели. tb_log_name означает имя каталога журнала тензорной платы, а общее время шагов представляет количество эпох. Это обучит нашу модель выводам.

ПОДГОТОВКА ТОРГОВЫХ ДАННЫХ ДЛЯ ОБРАТНОГО ТЕСТИРОВАНИЯ

  • Порог турбулентности установлен на 70, поэтому, если турбулентность превышает 70, продайте все свои активы и дождитесь, пока рынок вернется в нормальное состояние (т.е. опустится ниже 70).
  • Тестирование наших обученных данных на наших торговых данных. Он вернет два фрейма данных, df_account_value имеет значение портфеля с течением времени, а df_actions имеет разные действия, выполняемые нашей обученной моделью. Df_actions состоит из целых чисел (упомянутых выше в разделе о пространстве действий).

  • Теперь, чтобы сгенерировать статистику тестирования, такую ​​как коэффициент Шарпа, MDD и т. Д.

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

ЧТО ВЫ МОЖЕТЕ СДЕЛАТЬ БОЛЬШЕ?

  • МОДЕЛЬ АНСАМБЛЯ: если вы хотите использовать модель ансамбля, где вместо тестирования каждой модели вы хотите использовать несколько моделей и позволить данным выбрать подходящую модель. Вы можете следовать этому руководству и этой статье. Здесь у нас есть набор A2C, DDPG и PPO, где для каждого квартала торгового периода выбирается наиболее эффективная модель. Ключевое наблюдение: A2C подходит для волатильного рынка, PPO подходит для бычьего рынка, а DDPG служит дополнением к PPO на бычьем рынке.
  • РАСПРЕДЕЛЕНИЕ ПОРТФЕЛЯ: Если вы хотите выполнить распределение портфеля, вы можете следовать этому руководству. Здесь при анализе учитывается ковариация между акциями. Вы можете держать длинные и короткие позиции по акциям с отрицательной корреляцией, что может хеджировать ваши убытки и повысить прибыль.
  • ФУНДАМЕНТАЛЬНЫЙ АНАЛИЗ: Если вы хотите торговать, используя фундаментальный анализ, вы можете следовать этому руководству. Здесь вместо технических индикаторов мы используем фундаментальные индикаторы как пространство состояний для наших данных.
  • ДЕНЕЖНЫЙ ШТРАФ: если вы хотите включить денежный штраф в нашу функцию вознаграждения, вы можете следовать этому руководству. Денежный штраф взимается, когда у нашего агента заканчиваются деньги, у вас есть возможность добавить деньги в свой портфель или прекратить действие, наложив штраф на нашу модель. Активы - это общая сумма денежных средств и долевая стоимость вашего портфеля. Значение cash_penalty_proportion по умолчанию равно 0,1, поэтому, если общая стоимость вашего актива * 0,1 меньше денежной стоимости в любой момент времени, взимается соответствующий денежный штраф, что препятствует тому, чтобы в нашей модели закончились деньги.

  • ПОЛЬЗОВАТЕЛЬСКОЕ ПРОСТРАНСТВО СОСТОЯНИЯ: Если вы хотите иметь настраиваемое пространство состояний и денежный штраф в своей стандартной среде, вы можете следовать этому руководству.
  • RLLIB: если вы хотите использовать модели из Rllib или ElegantRL, вы можете следовать этому руководству. Он сравнивает Rllib, eleganceRL и stable baselines3 для импорта моделей и их обучения.

Вот и все, это все, что вам нужно для начала работы с этой библиотекой. Итак, мы начали с базового пространства состояний, пространства действий и структуры вознаграждения. Затем мы обсудили различные каталоги, содержащие исходный код, который поможет вам просматривать их. Затем мы обсудили базовое руководство, начиная с предварительной обработки → обучения → тестирования на истории. Наконец, мы обсудили другие руководства, которые вы можете использовать в зависимости от вашего варианта использования. Если вам нужна другая помощь, мы на расстоянии одного комментария.