利用强化学习进行股票操作实战(二)

对于DQN的理论知识,这里不再赘述,不懂的同学可以看之前的强化学习理论篇或自行上网搜索相关资料。

废话不多说直接上代码。

DQN类

首先定义了一个DQN类(这个定义参考了莫烦的代码 [1],几乎与其一致,做了简单修改)。下面简单的说明一下,代码中的核心部分。详细介绍可以看莫烦教学视频或者结合代码自己理解。

class 中包含了5个主要模块,分别是__init__ (初始化),_build_net(网络构建),store_transition(储存过去操作),choose_action(根据状态选择动作),learn(网络学习)。
利用强化学习进行股票操作实战(二)_第1张图片
_build_net:构建了两个结构相同网络eval_net和target_net。eval_net更新频率较高,target_net更新频率较低。(设置两个网络更新频率不同是DQN模型的其中一个核心)
利用强化学习进行股票操作实战(二)_第2张图片
store_transition:将过去操作储存起来,s是当前状态,a是当前动作,r是reward,s_是下一时刻状态。
利用强化学习进行股票操作实战(二)_第3张图片
Chose_action:根据当前状态选择动作(采用了贪婪规则)
利用强化学习进行股票操作实战(二)_第4张图片
Learn:进行batch训练
利用强化学习进行股票操作实战(二)_第5张图片

环境类

定义一个环境类,可以通过环境类获取状态、reward等。类中主要包含3个重要的模块,分别是get_state、step、get_state。(参考了博客代码 [2])
利用强化学习进行股票操作实战(二)_第6张图片
reset: 重置一些参数并返回0时刻的状态。
利用强化学习进行股票操作实战(二)_第7张图片
get_state: 输入当前时刻,得到当前时刻的状态。这里的状态将过去的收盘价的涨跌幅当做状态输入。
利用强化学习进行股票操作实战(二)_第8张图片
step:进行状态更新,输入动作,更新持仓情况等。
利用强化学习进行股票操作实战(二)_第9张图片

训练主函数

在训练的过程中,每个状态会返回一次动作,根据状态与动作获得下一时刻的状态,然后存储状态、动作等(用于训练),每隔若干步会进行一次训练。
利用强化学习进行股票操作实战(二)_第10张图片
利用强化学习进行股票操作实战(二)_第11张图片

结果

数据:采用了000065股票2012年到2019年的数据,训练数据前面1750天,回测数据后面68天。

训练结果:(初始资金1w)从训练结果来看,模型已经很好的掌握了过去的情况,在第50轮中可以获得将近24w的收益。
利用强化学习进行股票操作实战(二)_第12张图片
回测结果

股票交易情况
利用强化学习进行股票操作实战(二)_第13张图片
从交易的几次情况来看,好像并不怎么样。
账户盈利情况
利用强化学习进行股票操作实战(二)_第14张图片
相对于股票走势而言,策略至少能够略微减少账号的损失。

总结

目前来看强化学习用在股票操作上还是比较难的。难点主要在于在训练集中,强化学习可以把过去的行情牢记心中(机器学习的普遍问题),一回测发现新的问题时往往趋向不操作。
要让强化学习学到更可靠的操作,还得寻找更强有力的特征,还得调整模型参数等。除此之外,可以结合一些均线判断(人为的强制买卖点),一个优秀的策略往往需要结合多个模型的共同判断。

结语

目前我对于股票操作策略的设想主要由三部分组成:
1、利用树模型选取可建仓的优质股。
2、利用强化学习给出优质股的加仓、减仓及平仓点等。
3、加入人为的强制买卖点。
策略在不断开发与完善中,预计4月份可以开始分享个股。

代码github:
https://github.com/wbbhcb/stock_market(明后天会传到github上)

参考资料:
[1]https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow
[2] https://blog.csdn.net/qq_39388410/article/details/94395020

对量化、数据挖掘、深度学习感兴趣的可以关注公众号,本人不定期分享有关这些方面的研究。
在这里插入图片描述

个人知乎:
https://www.zhihu.com/people/e-zhe-shi-wo/activities

你可能感兴趣的:(量化杂文)