Python深度强化学习智能体DDPG自适应股票交易策略优化道琼斯30股票数据可视化研究

股票交易策略在投资公司中起着至关重要的作用。然而,在复杂多变的股票市场中获取最优策略颇具挑战。

本文探索深度强化学习在优化股票交易策略以实现投资回报最大化方面的潜力。选取 30 只股票作为交易标的,其每日价格作为训练和交易的市场环境。

由Kaizong Ye,Liao Bao撰写

训练深度强化学习智能体以获得自适应交易策略,并将其性能与道琼斯工业平均指数和传统最小方差投资组合配置策略进行评估比较。

结果表明,所提出的深度强化学习方法在夏普比率和累计回报方面均优于这两个基准。

引言

盈利的股票交易策略对投资公司至关重要。它用于优化资本配置以实现绩效最大化,如预期回报。回报最大化基于对股票潜在回报和风险的估计。然而,在复杂的股票市场中,分析师难以考虑所有相关因素[1 – 3]。一种传统方法如[4]所述分两步进行。首先,计算股票的预期回报和股票价格的协方差矩阵。然后通过在固定投资组合风险下最大化回报或在一系列回报下最小化风险来找到最佳投资组合配置。最后根据最佳投资组合配置提取最佳交易策略。然而,如果管理者想要修改每个时间步的决策并考虑交易成本等因素,这种方法实施起来可能非常复杂。

另一种解决股票交易问题的方法是将其建模为马尔可夫决策过程(MDP)并使用动态规划求解最优策略。然而,由于处理股票市场时状态空间较大,该模型的可扩展性有限[5 – 8]。基于上述挑战,我们探索一种深度强化学习算法,即深度确定性策略梯度(DDPG)[9],以在复杂多变的股票市场中找到最佳交易策略。该算法由三个关键组件组成:(i)对大状态和动作空间进行建模的演员 – 评论家框架[10];(ii)稳定训练过程的目标网络[11];(iii)去除样本相关性并提高数据利用率的经验回放。DDPG 算法通过获得比传统最小方差投资组合配置方法和道琼斯工业平均指数 1(DJIA)更高的回报来证明其效率。本文结构如下。第 2 节阐述股票交易问题。第 3 节推导并指定主要的 DDPG 算法。第 4 节描述数据预处理和实验设置,并展示 DDPG 算法的性能。第 5 节给出结论。

问题陈述

我们将股票交易过程建模为马尔可夫决策过程(MDP)。然后将我们的交易目标表述为一个最大化问题。

(一)股票交易问题表述

考虑到交易市场的随机性和交互性,我们将股票交易过程建模为如图 所示的马尔可夫决策过程(MDP),具体如下:

  • 状态 (s = [p, h, b]):一个集合,包括股票价格信息 (p \in R^{D +}),股票持有量 (h \in Z^{D +}),以及剩余余额 (b \in R^{+}),其中 (D) 是我们在市场中考虑的股票数量,(Z^{+}) 表示非负整数。
  • 动作 (a):对所有 (D) 只股票的一组动作。每只股票的可用动作包括卖出、买入和持有,分别导致持有量 (h) 减少、增加和不变。
  • 奖励 (r(s, a, s^{0})):在状态 (s) 采取动作 (a) 并到达新状态 (s^{0}) 时投资组合价值的变化。投资组合价值是所有持有股票的权益 (p^{T}h) 与余额 (b) 之和。
  • 策略 (\pi(s)):状态 (s) 下的股票交易策略。本质上是状态 (s) 下动作 (a) 的概率分布。
  • 动作价值函数 (Q_{\pi}(s, a)):在状态 (s) 采取动作 (a) 并遵循策略 (\pi) 所获得的预期奖励。

视频

LSTM模型原理及其进行股票收盘价的时间序列预测讲解

探索见解

去bilibili观看

探索更多视频


视频

【视频讲解】神经网络、Lasso回归、线性回归、随机森林、ARIMA股票价格时间序列预测

探索见解

去bilibili观看

探索更多视频


视频

【视频讲解】Python深度学习股价预测、量化交易策略:LSTM、GRU深度门控循环神经网络附代码数据

探索见解

去bilibili观看

探索更多视频


视频

【视频讲解】Python用LSTM、Wavenet神经网络、LightGBM预测股价

探索见解

去bilibili观看

探索更多视频

股票市场的动态描述如下。我们用下标表示时间 (t),股票 (d) 的可用动作如下:

  • 卖出:可以从当前持有量中卖出 (k (k \in [1, h[d]], 其中 d = 1,…, D)) 股,(k) 必须是整数。在这种情况下,(h_{t + 1} = h_{t}-k)。
  • 持有:(k = 0),导致 (h_{t}) 不变。
  • 买入:可以买入 (k) 股,导致 (h_{t + 1} = h_{t}+k)。在这种情况下 (a_{t}[d] = -k) 是一个负整数。需要注意的是,所有买入的股票不应导致投资组合价值出现负余额。即,一般假设卖出订单在最初的 (d_{1}) 只股票上进行,买入订单在最后的 (d_{2}) 只股票上进行,并且 (a_{t}) 应满足 (p_{t}[1:d_{1}]^{T}a_{t}[1:d_{1}]+b_{t}+p_{t}[D – d_{2}:D]^{T}a_{t}[D – d_{2}:D] \geq 0)。剩余余额更新为 (b_{t + 1}=b_{t}+p_{t}^{T}a_{t})。图 说明了这个过程。

如上述定义,投资组合价值由余额和所有持有股票的权益之和组成。在时间 (t) 采取一个动作,基于执行的动作和股票价格的更新,投资组合价值在时间 (t + 1) 从“投资组合价值 0”变为“投资组合价值 1”、“投资组合价值 2”或“投资组合价值 3”。在暴露于环境之前,(p_{0}) 设置为时间 0 的股票价格,(b_{0}) 是可用于交易的初始资金。(h) 和 (Q_{\pi}(s, a)) 初始化为 0,(\pi(s)) 对于任何状态在所有动作中均匀分布。然后,(Q_{\pi}(s_{t}, a_{t})) 通过与外部环境交互来学习。

根据贝尔曼方程,采取动作 (a_{t}) 的预期奖励通过取奖励 (r(s_{t}, a_{t}, s_{t + 1})) 的期望,加上下一个状态 (s_{t + 1}) 的预期奖励来计算。基于回报以因子 (\gamma) 折现的假设,我们有:

公式图片

(二)作为回报最大化的交易目标

目标是设计一种交易策略,在未来的目标时间 (t_{f}) 最大化投资回报,即 (p_{t_{f}}^{T}h_{t_{f}} + b_{t_{f}}),这也等同于 (\sum_{t = 1}^{t_{f}- 1}r(s_{t}, a_{t}, s_{t + 1}))。由于模型的马尔可夫性质,该问题可归结为优化使函数 (Q_{\pi}(s_{t}, a_{t})) 最大化的策略。这个问题非常困难,因为动作价值函数对于策略制定者是未知的,并且必须通过与环境交互来学习。因此,在本文中,我们采用深度强化学习方法来解决这个问题。 ​

 深度强化学习方法

我们采用 DDPG 算法来最大化投资回报。DDPG 是确定性策略梯度(DPG)算法[12]的改进版本。DPG 结合了 Q – 学习[13]和策略梯度[14]的框架。与 DPG 相比,DDPG 使用神经网络作为函数逼近器。本节中的 DDPG 算法是针对股票交易市场的 MDP 模型指定的。

Q – 学习本质上是一种学习环境的方法。Q – 学习不是使用 (Q(s_{t + 1}, a_{t + 1})) 的期望来更新 (Q(s_{t}, a_{t})),而是使用使 (Q(s_{t + 1}, a_{t + 1})) 对于状态 (s_{t + 1}) 最大化的贪婪动作 (a_{t + 1}),即:

公式图片

通过采用神经网络进行函数逼近的深度 Q 网络(DQN),状态在价值函数中进行编码。然而,由于动作空间较大,DQN 方法对于这个问题难以处理。由于每只股票的可行交易动作在离散集合中,并且考虑到股票总数,动作空间的大小呈指数增长,导致“维度诅咒”[15]。因此,提出 DDPG 算法以确定性地将状态映射到动作来解决这个问题。

如图所示,DDPG 维护一个行动网络和一个评估网络。行动网络 (\mu(s|\theta_\mu})) 将状态映射到动作,其中 (\theta_{\mu}) 是行动网络参数集,评估网络 (Q(s, a\theta_{Q)) 输出该状态下动作的值,其中 (\theta_{Q}) 是评估网络参数集。为了探索更好的动作,从随机过程 (N) 中采样噪声并添加到演员网络的输出。与 DQN 类似,DDPG 使用经验回放缓冲区 (R) 存储转换并更新模型,可以有效减少经验样本之间的相关性。 ​

class Actor(nn.Module):
    def __init__(self, state_dim, action_dim, hidden_dim):
        super(Actor, self).__init__()
        self.actor_net = nn.Sequential(
            nn.Linear(state_dim, hidden_dim),
            nn.ReLU(),
            nn.Linear(hidden_dim, hidden_dim),
            nn.ReLU(),
            nn.Linear(hidden_dim, action_dim),
            nn.Tanh()  # 输出范围限制在[-1, 1],适用于连续动作空间
        )
    def forward(self, state):
        return self.actor_net(state)

class CriticNet(nn.Module):
    def __init__(self, s_dim, a_dim):
        super(CriticNet, self).__init__()
        self.fcs = nn.Linear(s_dim, 30)
        self.fcs.weight.data.normal_(0, 0.1)
        self.fca = nn.Linear(a_dim, 30)
        self.fca.weight.data.normal_(0, 0.1)
        self.out = nn.Linear(30, 1)             # 输出q(s,a;w)
        self.out.weight.data.normal_(0, 0.1)
    def forward(self, s, a):
        x = self.fcs(s)
        y = self.fca(a)
        actions_value = self.out(F.relu(x+y))   # 基于s与a进行打分
        return actions_value

算法 1:DDPG 算法

1: 随机初始化评论家网络 Q(s, a|θ_Q) 和演员 μ(s|θ_μ),随机权重为 θ_Q 和 θ_μ;
2: 初始化目标网络 Q’ 和 μ’,权重 θ_Q’ ← θ_Q,θ_μ’ ← θ_μ;
3: 初始化回放缓冲区 R;
4: for episode = 1, M do
5: 初始化用于动作探索的随机过程 N;
6: 接收初始观察状态 s1;
7: for t = 1, T do
8: 根据当前策略和探索噪声选择动作 at = μ(st|θ_μ) + Nt;
9: 执行动作 at 并观察奖励 rt 和状态 st + 1;
10: 将转换 (st, at, rt, st + 1) 存储在 R 中;
11: 从 R 中采样一个大小为 N 的随机小批量转换 (si, ai, ri, si + 1);
12: 设置 yi = ri + γQ’(st + 1, μ’(si + 1|θ_μ’ |θ_Q’));
13: 通过最小化损失更新评论家:L = 1/N * ∑i(yi – Q(si, ai|θ_Q))^2;
14: 使用采样的策略梯度更新演员策略: ​


Python注意力机制Attention下CNN-LSTM-ARIMA混合模型预测中国银行股票价格

阅读文章


公式图片

15: 更新目标网络:

公式图片
16: end for
17: end for ​


随时关注您喜欢的主题


(Q’) 和 (\mu’) 分别通过复制行动和评估网络创建,以便它们提供一致的时间差分备份。两个网络都迭代更新。每次,DDPG 智能体在 (s_t}) 上采取动作 (a_{t}),然后根据 (s_{t + 1}) 接收奖励。转换 ((s_{t}, a_{t}, s_{t + 1}, r_{t})) 然后存储在回放缓冲区 (R) 中。从 (R) 中抽取 (N) 个样本转换,并计算 (y_{i}=r_{i}+\gamma Q’(s_{i + 1},\mu’(s_{i + 1}\theta_{\mu’,\theta_{Q’}))),(i = 1,\cdots,N)。然后通过最小化目标评估网络 (Q’) 和评估网络 (Q) 的输出之间的预期差异 (L(\theta_{Q})) 来更新评估网络,即:

公式图片

行动网络的参数 (\theta_{\mu}) 如下:

公式图片

在通过经验缓冲区的转换更新评估网络和行动网络之后,目标行动网络和目标评估家网络如下更新: ​

公式图片

其中 (\tau) 表示学习率。详细算法总结在算法 1 中。

性能评估

我们评估算法 1 中 DDPG 算法的性能。结果表明,使用 DDPG 智能体的所提出方法获得比道琼斯工业平均指数和传统最小方差投资组合配置策略更高的回报[16, 17]。

(一)数据预处理

我们跟踪并选择 2016 年 1 月 1 日的道琼斯 30 只股票作为我们的交易股票,并使用 2009 年 1 月 1 日至 2018 年 9 月 30 日的历史每日价格来训练智能体并测试性能。数据集从通过沃顿研究数据服务(WRDS)访问的 Compustat 数据库下载[18]。我们的实验包括三个阶段,即训练、验证和交易。在训练阶段,算法 1 生成一个训练良好的交易智能体。然后进行验证阶段以调整关键参数,如学习率、剧集数量等。最后在交易阶段,我们评估所提出方案的盈利能力。整个数据集为此目的分为三个部分,如图 所示。2009 年 1 月 1 日至 2014 年 12 月 31 日的数据用于训练,2015 年 1 月 1 日至 2016 年 1 月 1 日的数据用于验证。我们在训练和验证数据上训练我们的智能体以充分利用可用数据。最后,我们在交易数据上测试我们智能体的性能,交易数据为 2016 年 1 月 1 日至 2018 年 9 月 30 日。为了更好地利用交易数据,我们在交易阶段继续训练我们的智能体,因为这将提高智能体更好地适应市场动态的能力。

(二)股票交易的实验设置和结果

我们通过将 30 只股票数据设置为每日股票价格向量来构建环境,DDPG 智能体在其上进行训练。为了更新学习率和剧集数量,智能体在验证数据上进行验证。最后,我们在交易数据上运行我们的智能体,并与道琼斯工业平均指数(DJIA)和最小方差投资组合配置策略进行性能比较。使用四个指标来评估我们的结果:最终投资组合价值、年化回报率、年化标准误差和夏普比率。最终投资组合价值反映交易阶段结束时的投资组合价值。年化回报率表示投资组合每年的直接回报。年化标准误差显示我们模型的稳健性。夏普比率将回报和风险结合起来进行评估[19]。

在图 中,我们可以看到 DDPG 策略明显优于道琼斯工业平均指数和最小方差投资组合配置。从表  可以看出,DDPG 策略实现了 22.24% 的年化回报率,远高于道琼斯工业平均指数的 16.40% 和最小方差投资组合配置的 15.93%。DDPG 策略的夏普比率也高得多,表明 DDPG 策略在平衡风险和回报方面优于道琼斯工业平均指数和最小方差投资组合配置。因此,结果表明所提出的 DDPG 策略可以有效地制定出优于基准道琼斯工业平均指数和传统最小方差投资组合配置方法的交易策略。

embleAgent(df=processed,
                 train_period=(TRAIN_START_DATE,TRAIN_END_DATE),
                 val_test_period=(TEST_START_DATE,TEST_END_DATE),
                 rebalance_window=rebalance_window,
                 validation_window=validation_
result = pd.merge(df_result_ensemble, df_dji, left_index=True, right_index=True)
print("result: ", result)
result.to_csv("result.csv")
result.columns = ['ensemble', 'dji']

%matplotlib inline
plt.rcParams["figure.figsize"] = (15,5)
plt.figure();
result.plot();

表 1:交易性能

结论

在本文中,我们探索了训练深度确定性策略梯度(DDPG)智能体以学习股票交易策略的潜力。结果表明,我们训练的智能体在累计回报方面优于道琼斯工业平均指数和最小方差投资组合配置方法。夏普比率的比较表明,我们的方法在平衡风险和回报方面比其他方法更稳健。

参考文献

[1] Stelios D. Bekiros, “Fuzzy adaptive decision-making for boundedly rational traders in speculative stock markets,” European Journal of Operational Research, vol. 202, pp. 285 – 293, 2010.
[2] Yong Zhang, and Xingyu Yang, “Online portfolio selection strategy based on combining experts’ advice,” Computational Economics, vol. 50, No. 1, pp. 141 – 159, 2017.
[3] Youngmin Kim, Wonbin Ahn, Kyong Joo Oh, and David Enke, “An intelligent hybrid trading system for discovering trading rules for the futures market using rough sets and genetic algorithms,” Applied Soft Computing, vol. 55, pp. 127 – 140, 2017.
[4] Markowitzz, H., “Portfolio selection,” The Journal of Finance, vol. 7, No. 1, pp. 77 – 91, 1952.
[5] Dimitri Bertsekas, “Dynamic programming and optimal control,” Athena Scientific, vol. 1, 1995.
[6] Francesco Bertoluzzoa, and Marco Corazza, “Testing different reinforcement learning configurations for financial trading: introduction and applications,” Procedia Economics and Finance, vol. 3, pp. 68 – 77, 2012.
[7] Ralph Neuneier, “Optimum asset allocation using adaptive dynamic programming,” Advances in Neural Information Processing Systems, vol. 8, 1996.
[8] Ralph Neuneier, “Enhancing Q-Learning for optimal asset allocation,” Advances in Neural Information Processing Systems, 1997.
[9] Timothy P. Lillicrap, Jonathan J. Hunt, Alexander Pritzel, Nicolas Heess, Tom Erez, Yuval Tassa, David Silver, and Daan Wierstra, “Continuous control with deep reinforcement learning,” arXiv preprint arXiv:1509.02971, 2015.
[10] Vijay R. Konda and John Tsitsiklis. “Actor-critic algorithms,” Advances in Neural Information Processing Systems, pp. 1008–1014, 1999.
[11] Volodymyr Mnih, et al, “Human-level control through deep reinforcement learning,” Nature, pp. 529 – 533, 2015.
[12] David Silver, Guy Lever, Nicolas Heess, Thomas Degris, Daan Wierstra, Martin Riedmiller, “Deterministic policy gradient algorithms,” International Conference on Machine Learning, vol. 32, 2014.
[13] Richard S. Sutton and Andrew G. Barto, Reinforcement learning: an introduction, MIT Press. 1998.
[14] Richard S. Sutton, et al. “Policy gradient methods for reinforcement learning with function approximation,” Advances in Neural Information Processing Systems, 2000.
[15] Lucian Bu¸soniu, Tim de Bruin, Domagoj Tolic, Jens Kober, Ivana Palunko, “Reinforcement learning for ´ control: Performance, stability, and deep approximators,” Annual Reviews in Control, ISSN 1367 – 5788, 2018.
[16] “Codes for Min-Variance Portfolio Allocation,” http://www.tensorlet.com/.
[17] Hongyang Yang, Xiao – Yang Liu, Qingwei Wu, “A practical machine learning approach for dynamic stock recommendation,” IEEE International Conference On Trust, Security and Privacy in Computing And Communications, 2018.
[18] Compustat Industrial [daily Data]. Available: Standard Poor’s/Compustat [2017]. Retrieved from “Wharton Research Data Service,” 2015.
[19] Willia F. Sharpe, “The Sharpe ratio,” The Journal of Portfolio Management, vol. 1, No. 1, 21, 49 – 58, 1994.
[20] Lu Wang, Wei Zhang, Xiaofeng He, Hongyuan Zha, “Supervised reinforcement learning with recurrent neural Network for dynamic treatment recommendation,” International Conference on Knowledge Discovery & Data Mining, pp. 2447 – 2456, 2018.
[21] Yuri Burda, Harri Edwards, Deepak Pathak, Amos Storkey, Trevor Darrell, Alexei A. Efros, “Large-scale study of curiosity-driven learning,” arXiv:1808.04355, 2018.
[22] Xiao – Yang Liu, Zihan Ding, Sem Borst, Anwar Walid, “Deep reinforcement learning for intelligent transportation systems,” NeurIPS Workshop on Machine Learning for Intelligent Transportation Systems, 2018.
[23] Weiju Lu, Xiao – Yang Liu, Qingwei Wu, Yue Sun, Anwar Walid, “Transform-based multilinear dynamical system for tensor time series analysis,” NeurIPS Workshop on Modeling and Decision – Making in the Spatiotemporal Domain, 2018. ​


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds