本文使用 Zhihu On VSCode 创作并发布
- 关键词:深度强化学习(DRL);股票交易;Python; OpenAI Gym
本文原文地址:https://towardsdatascience.com/deep-reinforcement-learning-for-automated-stock-trading-f1dad0126a02
作者:Bruce Yang
概述
能盈利的自动化股票交易策略对投资公司和对冲基金至关重要。它可以用于优化资本配置和最大化投资绩效-例如预期回报。预期回报最大化可以基于对潜在回报和风险的估计获得。但在复杂多变的股票市场中,设计盈利策略具有挑战性。人人都想要一个制胜策略,但这并不容易。本文揭示一种深度强化学习方案,该方案通过最大化投资回报来自动学习股票交易策略。
- 解决方案:用多种深度强化学习方法集成来做交易策略
- 策略包括三种基于 actor-critic 的算法:近端策略优化 (PPO)、Advantage Actor Critic (A2C) 和深度确定性策略梯度 (DDPG)
- 策略结合三种算法的最佳特性,从而根据不同的市场条件进行调整。使用夏普比率评估具有不同强化学习算法的交易代理的性能,并与道琼斯工业平均指数和传统的最小方差投资组合分配策略进行比较。
夏普比率:投资者每多承担一份风险可以收获的报酬数,数值越高越好
模型示意图,Source:AI4Finance-Foundation
一、为什么使用深度强化学习做股票交易?
- 不同于监督学习,DRL不需要事先大型标记训练数据集;
- 股票交易希望最大化回报的同时避免风险,DRL通过最大化未来一段时间所执行动作的预期总回报来解决这个问题;
- 股票交易需要不断测试新想法,并从市场获得反馈来动态地优化交易策略,该过程可以建模为马儿可夫决策过程(MDP),而MDP是强化学习的基础;
- 股市提供序列反馈,这种数据类型正是深度强化学习所需要的
二、什么是强化学习?什么是深度强化学习?使用强化学习进行股票交易有哪些相关工作?
(注:后续有时间慢慢详细介绍所用到的算法及算法的演变,深挖使用这些算法的原因)
强化学习是机器学习技术的三种方法之一,它通过从环境中顺序接收状态和奖励并采取行动来获得更好的奖励来训练智能体与环境进行交互。深度强化学习使用神经网络近似强化学习中的Q值。使用神经网络作为函数逼近器可以将强化学习推广到大规模数据的学习。
- 相关工作最近在金融市场中深度强化学习的应用考虑了离散或连续的状态和动作空间,并采用以下学习方法之一:Critic-only方法、Actor-only方法或Actor-Critic方法(AC):
- Critic-only方法:Critic-only学习方法是最常见的方法,它使用例如 Q-learning、Deep Q-learning (DQN) 及其改进来解决离散动作空间问题,并训练智能体单一股票或资产。仅评论家方法的想法是使用Q 值函数来学习最佳动作选择策略,该策略可最大化给定当前状态的预期未来奖励。DQN不是计算状态-动作值表,而是最小化目标 Q 值之间的均方误差,并使用神经网络执行函数逼近。仅评论家方法的主要限制是它仅适用于离散且有限的状态和动作空间,这对于大型股票投资组合不切实际,因为股票价格是连续的;
- Actor-only方法:这里的想法是Agent直接学习一个策略。策略是一个概率分布,本质上是给定状态的策略,即采取允许的动作的可能性。Actor-only 方法可以处理连续动作空间环境。
- Actor-Critic方法:演员-评论家方法最近已应用于金融领域。这个想法是同时更新代表策略的actor网络和代表价值函数的critic网络。评论家估计价值函数,而演员用政策梯度更新评论家指导的政策概率分布。随着时间的推移,演员学会采取更好的行动,评论家会更好地评估这些行动。演员-评论家方法已被证明能够学习和适应大型复杂的环境。因此,演员-评论家方法非常适合与大型股票投资组合进行交易。
本文主要用到了如下三种AC算法:
- A2C:使用并行的相同Agent的副本来更新不同数据样本的梯度。每个Agent独立工作,与相同环境交互;
- PPO:引入PPO来控制策略梯度更新,确保新策略不会与之前的策略相差太大;
- DDPG:DDPG 结合了Q-learning和策略梯度的框架,并使用神经网络作为函数逼近器。
三、如何使用深度强化进行股票交易?
3.1. 数据
模型训练所用的数据来自30支道琼斯股票,使用01/01/2009至05/08/2020每日历史数据来训练Agent并测试其性能。数据集地址:沃顿研究数据服务(WRDS)
数据集拆分:
- 训练集: 01/01/2009 - 12/31/2014期间数据
- 验证集: 10/01/2015 - 12/31/2015 期间数据用于验证和调整参数
- 测试集: 01/01/2016 - 05/08/2020 期间数据用于测试Agent的表现,这部分数据Agent在训练和验证阶段没见过; 同时,为了更好地利用交易数据,我们在测试阶段会继续训练Agent,使其更好地适应市场动态。
数据集划分
3.2. 股票交易模型描述
股票交易可用马尔可夫决策过程(MDP)来建模。各部分如下:
- 状态 : 向量包含各支股票价格; 是各支股票的份额; ,代表余额; 是非负实数, 是非负整数,D表示股票数量
- 行动: 股票操作包括卖出,买入和继续持有
- 奖励
- 策略: 计算在状态s下输出动作的概率
- Q值:策略为时, 状态s下采取动作a的预期回报
股票交易过程中的状态转移表述(在每个状态下,对投资组合中每支股票d的操作从卖出、买入和持有三个动作中取一个 ):
3.3. 约束条件
- 市场流动性:订单可以在收盘价快速执行,假设股票市场不会受到我们的强化交易Agent的影响;
- 非负余额:允许的操作不应导致出现负余额。
- 交易成本:每笔交易都会产生交易成本。交易费用有多种类型,例如交易所费用、执行费用和 SEC 费用。但我们假设交易成本是每笔交易(买入或卖出)价值的 1/1000。
- 市场崩盘风险规避:存在有可能导致股市崩盘的突发事件,如战争、股市泡沫破灭、主权债务违约、金融危机等。为控制 2008 年全球金融危机等最坏情况下的风险,我们采用金融湍流指数衡量极端的资产价格变动。
3.4. 学习目标:最大化回报
- 定义奖励函数r为投资组合在状态 采取行动 并到达新状态 +1时的价值变化;
- 模型学习的目标是设计出一种交易策略,能够在动态环境下最大化投资组合价值变化
3.5. 投资组合环境描述
- 状态空间:用一个181维向量(30只股票*6+1)来表示多只股票交易环境的状态空间,包括:
- 余额 - 1维
- 价格:每支股票调整后的收盘价 - 30维(后续参数都是30维)
- 份额:每支股票拥有份额
- MACD:移动平均收敛散度 (MACD),用收盘价计算
- RSI:相对强弱指数 (RSI),使用收盘价计算
- CGI:商品通道指数 (CCI),使用高、低和收盘价计算
- ADX: 平均方向指数 (ADX), 使用最高价、最低价和收盘价计算
- 动作空间:对于30支股票的投资组合,动作空间大小为
- k: k是可以买卖股票的数量,每支股票的动作空间是{-k,...,-1,0,1,...,k}, ,是预先定义的参数,限制每次交易行为的份额
- 动作空间归一化:因为A2C和PPO直接在高斯分布上定义策略,因此需要将动作空间归一化到[-1,1]
如果交易份额上限是100份的话那么动作空间有201^30大小,如何缩小这一空间范围值得考虑
3.6. 基于深度强化学习的交易Agent
为了使得交易策略高度稳健,采用集成方法,根据夏普比率自动从A2C,PPO和DDPG三个Agent中选择表现最佳的Agent进行交易,集成过程如下:
- 使用累计窗口来训练三个Agent。在本文中,每三个月,数据会进行一轮增补,增补后的所有数据用于重新训练三个Agent
- 模型通过3个月的滚动窗口(1中增补数据之后的三个月)来验证,然后选择有最高夏普比率的那个Agent;同时在验证阶段使用湍流指数来规避风险
- 验证后,在下个季度,只用夏普比率最高的单个Agent来预测和进行交易
3.7. 模型表现评估使用 Quantopian 的pyfolio可以很容易的进行回测
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)
部分结果如下:
模型表现比较
可以看到,集成模型虽然累计回报小于PPO模型,但是其具有最大的夏普比率,回撤小,风险低于PPO模型,因此综合表现最佳
各模型累计回报趋势图
参考文献和主要算法原论文
[1] Hongyang Yang, Xiao-Yang Liu, Shan Zhong, and Anwar Walid. 2020. Deep Reinforcement Learning for Automated Stock Trading: An Ensemble Strategy. In ICAIF ’20: ACM International Conference on AI in Finance, Oct. 15–16, 2020, Manhattan, NY. ACM, New York, NY, USA.
[2] A2C: Volodymyr Mnih, Adria Badia, Mehdi Mirza, Alex Graves, Timothy Lillicrap, Tim Harley, David Silver, and Koray Kavukcuoglu. 2016. Asynchronous methods for deep reinforcement learning. The 33rd International Conference on Machine Learning (02 2016). https://arxiv.org/abs/1602.01783
[3] DDPG:Timothy Lillicrap, Jonathan Hunt, Alexander Pritzel, Nicolas Heess, Tom Erez, Yuval Tassa, David Silver, and Daan Wierstra. 2015. Continuous control with deep reinforcement learning. International Conference on Learning Representations (ICLR) 2016 (09 2015). https://arxiv.org/abs/1509.02971
[4] PPO: John Schulman, Sergey Levine, Philipp Moritz, Michael Jordan, and Pieter Abbeel. 2015. Trust region policy optimization. In The 31st International Conference on Machine Learning. https://arxiv.org/abs/1502.05477John Schulman, Filip Wolski, Prafulla Dhariwal, Alec Radford, and Oleg Klimov. 2017. Proximal policy optimization algorithms. arXiv:1707.06347 (07 2017). https://arxiv.org/abs/1707.06347 |
|