Использование обучения с подкреплением для торговли несколькими акциями через Python и OpenAI Gym | Представлено на ICAIF 2020

Примечание редакторам Data Science. Хотя мы разрешаем независимым авторам публиковать статьи в соответствии с нашими правилами и рекомендациями, мы не поддерживаем вклад каждого автора. Не следует полагаться на работы автора без консультации с профессионалами. См. Подробности в наших Условиях для читателей.

Этот блог основан на нашей статье: Глубокое обучение с подкреплением для автоматизированной торговли акциями: комплексная стратегия, представленной на ICAIF 2020: ACM International Конференция по ИИ в финансах.

Наши коды доступны на Github.



Наша статья доступна на ССРН.



Если вы хотите процитировать нашу статью, формат ссылки следующий:

Хунъян Ян, Сяо-Ян Лю, Шань Чжун и Анвар Валид. 2020. Глубокое обучение с подкреплением для автоматизированной торговли акциями: комплексная стратегия. В ICAIF ’20: Международная конференция ACM по искусственному интеллекту в финансах, 15–16 октября 2020 г., Манхэттен, штат Нью-Йорк. ACM, Нью-Йорк, Нью-Йорк, США.

Самую последнюю библиотеку DRL для автоматизированной торговли - FinRL можно найти здесь:



FinRL для количественного финансирования: Учебное пособие по торговле отдельными акциями

FinRL для количественного финансирования: Учебное пособие по торговле несколькими акциями

FinRL для количественного финансирования: Учебное пособие по распределению портфеля

ElegantRL поддерживает современные алгоритмы DRL и предоставляет удобные учебные пособия в записных книжках Jupyter. Ядро кодирует


Обзор

Трудно переоценить решающую роль стратегий торговли акциями в инвестициях.

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

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

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

Наше решение: торговая стратегия Ensemble Deep Reinforcement Learning
Эта стратегия включает в себя три алгоритма, основанных на критике субъектов: Proximal Policy Optimization (PPO), Advantage Actor Critic (A2C) , и глубокий детерминированный градиент политики (DDPG).
Он сочетает лучшие свойства трех алгоритмов, тем самым надежно приспосабливаясь к различным рыночным условиям.

Эффективность торгового агента с различными алгоритмами обучения с подкреплением оценивается с использованием коэффициента Шарпа и сравнивается как с индексом Dow Jones Industrial Average, так и с традиционной стратегией распределения портфеля с минимальной дисперсией.

Часть 1. Почему вы хотите использовать глубокое обучение с подкреплением (DRL) для торговли акциями?

Существующие работы не вызывают нареканий. Подход глубокого обучения с подкреплением имеет много преимуществ.

1.1 DRL и современная теория портфелей (MPT)

  1. MPT не так хорошо работает с данными вне выборки.
  2. MPT очень чувствителен к выбросам.
  3. MPT рассчитывается только на основе доходности акций, если мы хотим принять во внимание другие соответствующие факторы, например некоторые технические индикаторы, такие как Дивергенция схождения скользящих средних ( MACD) и Индекс относительной силы (RSI), MPT, возможно, не сможет хорошо объединить эти данные вместе.

1.2 Модели прогнозирования DRL и машинного обучения с учителем

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

1.3 Идея использования DRL для торговли акциями

  1. Цель торговли акциями - максимизировать прибыль, избегая при этом рисков. DRL решает эту проблему оптимизации, максимизируя ожидаемое общее вознаграждение от будущих действий в течение определенного периода времени.
  2. Торговля акциями - это непрерывный процесс тестирования новых идей, получения отзывов от рынка и попыток с течением времени оптимизировать торговые стратегии. Мы можем смоделировать процесс торговли акциями как процесс принятия решений Маркова, который является самой основой обучения с подкреплением.

1.4 Преимущества глубокого обучения с подкреплением

  1. Алгоритмы глубокого обучения с подкреплением могут превзойти игроков во многих сложных играх. Например, в марте 2016 года программа DeepMind’s AlphaGo, алгоритм глубокого обучения с подкреплением, победила чемпиона мира Ли Седола в игре го.
  2. Максимизация прибыли как торговая цель: определяя функцию вознаграждения как изменение стоимости портфеля, Deep Reinforcement Learning максимизирует стоимость портфеля с течением времени.
  3. Фондовый рынок обеспечивает последовательную обратную связь. DRL может последовательно повышать производительность модели в процессе обучения.
  4. Техника исследования и эксплуатации уравновешивает пробу разных новых вещей и использование того, что уже выяснилось. В этом отличие от других алгоритмов обучения. Кроме того, от квалифицированного человека не требуется предоставлять обучающие примеры или маркированные образцы. Кроме того, в процессе исследования агенту предлагается исследовать неизведанное специалистами-людьми.
  5. Воспроизведение опыта: позволяет решить проблему коррелированных выборок, поскольку при обучении на основе серии последовательных выборок могут возникать большие расхождения, поэтому это неэффективно. Воспроизведение опыта эффективно решает эту проблему путем случайной выборки мини-пакетов переходов из предварительно сохраненной памяти воспроизведения.
  6. Многомерные данные: используя непрерывное пространство действий, DRL может обрабатывать данные большого размера.
  7. Вычислительная мощность: Q-обучение - очень важный алгоритм RL, однако он не справляется с большим пространством. DRL, наделенный нейронными сетями в качестве эффективного аппроксиматора функций, мощен для обработки чрезвычайно большого пространства состояний и пространства действий.

Часть 2. Что такое обучение с подкреплением? Что такое глубокое обучение с подкреплением? Какие работы связаны с использованием обучения с подкреплением для торговли акциями?

2.1 Концепции

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

Глубокое обучение с подкреплением приближает значение Q с помощью нейронной сети. Использование нейронной сети в качестве аппроксиматора функций позволит применять обучение с подкреплением к большим данным.

Уравнение Беллмана является руководящим принципом при разработке алгоритмов обучения с подкреплением.

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

2.2 Похожие работы

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

1. Подход только для критиков: подход к обучению только для критиков, который является наиболее распространенным, решает проблему дискретного пространства действий, используя, например, Q-обучение, глубокое Q-обучение (DQN) и его улучшения, а также обучает агент, работающий с одной акцией или активом. Идея подхода, основанного только на критике, заключается в использовании функции Q-значения для изучения оптимальной политики выбора действий, которая максимизирует ожидаемое будущее вознаграждение с учетом текущего состояния. Вместо вычисления таблицы значений состояния и действия DQN минимизирует среднеквадратичную ошибку между целевыми Q-значениями и использует нейронную сеть для выполнения аппроксимации функции. Основным ограничением подхода, основанного только на критике, является то, что он работает только с дискретными и конечными пространствами состояний и действий, что непрактично для большого портфеля акций, поскольку цены, конечно, непрерывны.

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

2. Подход только для участников: Идея здесь в том, что агент непосредственно изучает оптимальную политику сам. Вместо того, чтобы иметь нейронную сеть для изучения значения Q, нейронная сеть изучает политику. Политика - это распределение вероятностей, которое, по сути, является стратегией для данного состояния, а именно вероятностью выполнения разрешенного действия. Подход, в котором задействован только актер, может справиться с пространством непрерывного действия.

  • Градиент политики: направлен на максимальное увеличение ожидаемого общего вознаграждения за счет непосредственного изучения самой оптимальной политики.

3. Подход «актер-критик». Подход «актер-критик» недавно был применен в финансах. Идея состоит в том, чтобы одновременно обновить сеть субъектов, представляющую политику, и сеть критиков, которая представляет функцию ценности. Критик оценивает функцию ценности, в то время как субъект обновляет распределение вероятностей политики, руководствуясь критиком, с помощью градиентов политики. Со временем актер учится действовать лучше, а критик лучше оценивает эти действия. Подход «актер-критик» доказал свою способность учиться и адаптироваться к большим и сложным средам и использовался для игры в популярные видеоигры, такие как Doom. Таким образом, подход «актер-критик» хорошо подходит для торговли с большим портфелем акций.

  • A2C: A2C - это типичный алгоритм «субъект-критик». A2C использует копии одного и того же агента, работающие параллельно, для обновления градиентов с разными выборками данных. Каждый агент работает независимо, чтобы взаимодействовать с одной и той же средой.
  • PPO: PPO вводится для управления обновлением градиента политики и обеспечения того, чтобы новая политика не слишком отличалась от предыдущей.
  • DDPG: DDPG сочетает в себе основы Q-обучения и градиента политики и использует нейронные сети в качестве аппроксиматоров функций.

Часть 3. Как использовать DRL для торговли акциями?

3.1 Данные

Мы отслеживаем и выбираем акции Dow Jones 30 (на 01.01.2016) и используем ежедневные исторические данные с 01.01.2009 по 05.08.2020 для обучения. агент и проверьте работоспособность. Набор данных загружается из базы данных Compustat, доступ к которой осуществляется через Wharton Research Data Services (WRDS).

Весь набор данных разделен на следующем рисунке. Данные с 01.01.2009 по 31.12.2014 используются для обучения, а данные с 01.10.2015 по 31.12.2015 используются для проверки и настройка параметров. Наконец, мы проверяем производительность нашего агента на данных торговли, которые являются невидимыми данными вне выборки с 01.01.2016 по 05.08.2020. Чтобы лучше использовать торговые данные, мы продолжаем обучение нашего агента на этапе торговли, поскольку это поможет ему лучше адаптироваться к динамике рынка.

3.2 Модель MDP для биржевой торговли:

Состояние 𝒔 = [𝒑, 𝒉, 𝑏]: вектор, который включает в себя цены акций 𝒑 ∈ R + ^ D, акции 𝒉 ∈ Z + ^ D и оставшийся баланс 𝑏 ∈ R +, где 𝐷 обозначает количество акций, а Z + обозначает неотрицательные целые числа.

Действие 𝒂: вектор действий над 𝐷 акциями. Разрешенные действия с каждой акцией включают продажу, покупку или удержание, что приводит к уменьшению, увеличению или отсутствию изменения акций 𝒉 соответственно.

Награда 𝑟 (𝑠, 𝑎, 𝑠 ′): прямая награда за выполнение действия 𝑎 в состоянии 𝑠 и достижение нового состояния ′.

Политика 𝜋 (𝑠): торговая стратегия в состоянии 𝑠, которая представляет собой распределение вероятностей действий в состоянии.

Q-значение 𝑄𝜋 (𝑠, 𝑎): ожидаемое вознаграждение за выполнение действия 𝑎 в состоянии 𝑠 в соответствии с политикой 𝜋.

Переход между состояниями нашего процесса торговли акциями показан на следующем рисунке. В каждом состоянии выполняется одно из трех возможных действий с акцией 𝑑 (𝑑 = 1,…, 𝐷) в портфеле.

  • Продажа 𝒌 [𝑑] ∈ [1, 𝒉 [𝑑]] приводит к получению 𝒉𝒕 + 1 [𝑑] = 𝒉𝒕 [𝑑] - 𝒌 [𝑑], где [𝑑] ∈Z + и = 1 ,…, 𝐷.
  • Удерживая, 𝒉𝒕 + 1 [𝑑] = 𝒉𝒕 [𝑑].
  • Покупка 𝒌 [𝑑] акций дает 𝒉𝒕 + 1 [𝑑] = 𝒉𝒕 [𝑑] + 𝒌 [𝑑].

В момент времени 𝑡 предпринимается действие, и цены на акции обновляются до 𝑡 + 1, соответственно, значения портфеля могут измениться с «значения портфеля 0» на «значение портфеля 1», «значение портфеля 2» или «значение портфеля 3», соответственно. , как показано на рисунке 2. Обратите внимание, что стоимость портфеля составляет 𝒉 + 𝑏.

3.3 Ограничения:

  • Рыночная ликвидность: заказы могут быть быстро выполнены по цене закрытия. Мы предполагаем, что наш агент по торговле подкреплениями не повлияет на фондовый рынок.
  • Неотрицательный баланс: разрешенные действия не должны приводить к отрицательному балансу.
  • Стоимость транзакции: транзакционные издержки возникают при каждой сделке. Есть много типов транзакционных издержек, таких как биржевые сборы, комиссии за исполнение и комиссии SEC. У разных брокеров разные комиссии. Несмотря на эти различия в комиссиях, мы предполагаем, что наши транзакционные издержки будут составлять 1/1000 от стоимости каждой сделки (покупки или продажи).
  • Неприятие риска в случае краха рынка: есть внезапные события, которые могут вызвать крах фондового рынка, такие как войны, крах пузырей на фондовом рынке, дефолт по суверенному долгу и финансовый кризис. Чтобы контролировать риск в наихудшем сценарии, таком как мировой финансовый кризис 2008 года, мы используем финансовый индекс турбулентности, который измеряет экстремальные колебания цен на активы.

3.4 Максимизация прибыли как торговая цель

Мы определяем нашу функцию вознаграждения как изменение стоимости портфеля, когда действие 𝑎 предпринимается в состоянии 𝑠 и достигает нового состояния 𝑠 + 1.

Цель состоит в том, чтобы разработать торговую стратегию, которая максимизирует изменение стоимости портфеля 𝑟 (𝑠𝑡, 𝑎𝑡, 𝑠𝑡 + 1) в динамической среде, и мы используем метод глубокого обучения с подкреплением для решения этой проблемы. .

3.5 Среда для нескольких акций:

Пространство состояний: мы используем 181-мерный вектор (30 акций * 6 + 1), состоящий из семи частей информации, чтобы представить пространство состояний среды торговли несколькими акциями

  1. Баланс: доступная сумма денег, оставшаяся на счете на текущем временном шаге.
  2. Цена: текущая скорректированная цена закрытия каждой акции.
  3. Акции: доли, принадлежащие каждой акции.
  4. MACD: расхождение сходимости скользящих средних (MACD) рассчитывается с использованием цены закрытия.
  5. RSI: индекс относительной силы (RSI) рассчитывается с использованием цены закрытия.
  6. CCI: индекс товарного канала (CCI) рассчитывается с использованием максимальной, минимальной и закрытой цены.
  7. ADX: индекс среднего направленности (ADX) рассчитывается с использованием максимальной, минимальной и закрытой цены.

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

  1. Для одной акции пространство действий определяется как {-k,…, -1, 0, 1,…, k}, где k и -k представляют количество акций, которые мы можем купить, и продать, а k ≤h_max, а h_max - предопределенный параметр, который задает максимальное количество акций для каждого действия покупки.
  2. Поэтому для нескольких акций размер всего поля действия равен (2k + 1) ^ 30.
  3. Затем пространство действий нормализуется до [-1, 1], поскольку алгоритмы A2C и PPO RL определяют политику непосредственно на гауссовском распределении, которое должно быть нормализовано и симметрично.
class StockEnvTrain(gym.Env):
“””A stock trading environment for OpenAI gym”””
 metadata = {‘render.modes’: [‘human’]}
def __init__(self, df, day = 0):
 self.day = day
 self.df = df
 # Action Space
 # action_space normalization and shape is STOCK_DIM
 self.action_space = spaces.Box(low = -1, high = 1,shape = (STOCK_DIM,)) 
 
 # State Space
 # Shape = 181: [Current Balance]+[prices 1–30]+[owned shares 1–30] 
 # +[macd 1–30]+ [rsi 1–30] + [cci 1–30] + [adx 1–30]
 self.observation_space = spaces.Box(low=0, high=np.inf, shape = (181,))
 # load data from a pandas dataframe
 self.data = self.df.loc[self.day,:]
 self.terminal = False 
 # initalize state
 self.state = [INITIAL_ACCOUNT_BALANCE] + \
 self.data.adjcp.values.tolist() + \
 [0]*STOCK_DIM + \
 self.data.macd.values.tolist() + \
 self.data.rsi.values.tolist() + \
 self.data.cci.values.tolist() + \
 self.data.adx.values.tolist()
 # initialize reward
 self.reward = 0
 self.cost = 0
 # memorize all the total balance change
 self.asset_memory = [INITIAL_ACCOUNT_BALANCE]
 self.rewards_memory = []
 self.trades = 0
 #self.reset()
 self._seed()

3.6 Торговый агент на основе глубокого обучения с подкреплением

A2C

A2C - это типичный алгоритм «субъект-критик», который мы используем в качестве компонента в методе ансамбля. A2C введен для улучшения обновлений градиента политики. A2C использует функцию преимущества, чтобы уменьшить дисперсию градиента политики. Вместо того, чтобы оценивать только функцию ценности, сеть критиков оценивает функцию преимущества. Таким образом, оценка действия не только зависит от того, насколько хорошо это действие, но и учитывает, насколько оно может быть лучше. Так что это снижает высокую дисперсию сетей политик и делает модель более устойчивой.

A2C использует копии одного и того же агента, работающие параллельно, для обновления градиентов с разными образцами данных. Каждый агент работает независимо, чтобы взаимодействовать с одной и той же средой. После того, как все параллельные агенты завершат вычисление своих градиентов, A2C использует координатор для передачи средних градиентов по всем агентам в глобальную сеть. Так что глобальная сеть может обновить актера и сеть критиков. Наличие глобальной сети увеличивает разнообразие обучающих данных. Синхронизированное обновление градиента более рентабельно, быстрее и лучше работает с большими партиями. A2C - отличная модель для торговли акциями из-за ее стабильности.

ДДПГ

DDPG - это алгоритм, основанный на действии и критике, который мы используем в качестве компонента в стратегии ансамбля, чтобы максимизировать отдачу от инвестиций. DDPG сочетает основы как Q-обучения, так и политики градиента и использует нейронные сети в качестве аппроксиматоров функций. В отличие от DQN, который учится косвенно через таблицы Q-значений и страдает проклятием проблемы размерности, DDPG учится непосредственно из наблюдений через градиент политики. Предлагается детерминированно отображать состояния в действия, чтобы лучше соответствовать среде непрерывного пространства действий.

ППО

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

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

Ансамблевая стратегия

Наша цель - создать очень надежную торговую стратегию. Поэтому мы используем метод ансамбля для автоматического выбора наиболее эффективного агента из PPO, A2C и DDPG для торговли на основе коэффициента Шарпа. Процесс ансамбля описывается следующим образом:

Шаг 1. Мы используем растущее окно в 𝑛 месяцев для одновременного переподготовки трех наших агентов. В этой статье мы переобучаем трех наших агентов каждые три месяца.

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

Шаг 3. После проверки мы используем только лучшую модель с наивысшим коэффициентом Шарпа для прогнозирования и торговли на следующий квартал.

from stable_baselines import SAC
from stable_baselines import PPO2
from stable_baselines import A2C
from stable_baselines import DDPG
from stable_baselines import TD3
from stable_baselines.ddpg.policies import DDPGPolicy
from stable_baselines.common.policies import MlpPolicy
from stable_baselines.common.vec_env import DummyVecEnv
def train_A2C(env_train, model_name, timesteps=10000):
 “””A2C model”””
 start = time.time()
 model = A2C(‘MlpPolicy’, env_train, verbose=0)
 model.learn(total_timesteps=timesteps)
 end = time.time()
 model.save(f”{config.TRAINED_MODEL_DIR}/{model_name}”)
 print(‘Training time (A2C): ‘, (end-start)/60,’ minutes’)
 return model
def train_DDPG(env_train, model_name, timesteps=10000):
 “””DDPG model”””
 start = time.time()
 model = DDPG(‘MlpPolicy’, env_train)
 model.learn(total_timesteps=timesteps)
 end = time.time()
 model.save(f”{config.TRAINED_MODEL_DIR}/{model_name}”)
 print(‘Training time (DDPG): ‘, (end-start)/60,’ minutes’)
 return model
def train_PPO(env_train, model_name, timesteps=50000):
 “””PPO model”””
 start = time.time()
 model = PPO2(‘MlpPolicy’, env_train)
 model.learn(total_timesteps=timesteps)
 end = time.time()
 model.save(f”{config.TRAINED_MODEL_DIR}/{model_name}”)
 print(‘Training time (PPO): ‘, (end-start)/60,’ minutes’)
 return model
def DRL_prediction(model, test_data, test_env, test_obs):
 “””make a prediction”””
 start = time.time()
 for i in range(len(test_data.index.unique())):
   action, _states = model.predict(test_obs)
   test_obs, rewards, dones, info = test_env.step(action)
   # env_test.render()
 end = time.time()

3.7 Оценка производительности

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

import pyfolio
with pyfolio.plotting.plotting_context(font_scale=1.1):
 pyfolio.create_full_tear_sheet(returns = ensemble_strat,
 benchmark_rets=dow_strat, set_context=False)

Ссылки:

A2C:
Владимир Мних, Адриа Бадиа, Мехди Мирза, Алекс Грейвс, Тимоти Лилликрап, Тим Харли, Дэвид Сильвер и Корай Кавукчуоглу. 2016. Асинхронные методы для глубокого обучения с подкреплением. 33-я Международная конференция по машинному обучению (02 2016). Https://arxiv.org/abs/1602.01783

DDPG:
Тимоти Лилликрап, Джонатан Хант, Александр Прицель, Николас Хесс, Том Эрез, Юваль Тасса, Дэвид Сильвер и Даан Виерстра. 2015. Непрерывный контроль с глубоким обучением с подкреплением. Международная конференция по обучающим представлениям (ICLR) 2016 (09 2015). Https://arxiv.org/abs/1509.02971

PPO:
Джон Шульман, Сергей Левин, Филипп Мориц, Майкл Джордан и Питер Аббель. 2015. Оптимизация политики доверительного региона. В 31-й Международной конференции по машинному обучению. Https://arxiv.org/abs/1502.05477

Джон Шульман, Филип Вольски, Прафулла Даривал, Алек Рэдфорд и Олег Климов. 2017. Алгоритмы оптимизации проксимальной политики. arXiv: 1707.06347 (07 2017). Https://arxiv.org/abs/1707.06347