量化投资大致可以分为两种交易模式,一种是白盒交易,一种是黑盒交易。白盒交易根据指标,通过技术分析进行判断交易的操作。而黑盒交易也就是今天的主题,使用强化学习通过智能体决策的方式进行黑箱操作,但很多时候我们并不会知道智能体位什么要这么决策。
由于大A的不讲道理,很多的技术分析策略以前适用,但现在已不适用。之前研究了一段时间的白盒量化,确实是如此,只有找到未失效的策略才行。最近受朋友启发,和一个大数据领域的朋友一起开始了黑盒交易的研究。
设计一个强化学习的算法模型还比较快的,主要是找到量化环境的动作空间、状态空间和奖励函数,其中奖励函数是最关键的部分。
动作空间其实大部分论文介绍的大同小异,基本是三种:Buy、Sell、Hold,这里的 Hold 可能是持有股票也可能是持有现金。
状态空间可以理解为需要让智能体感知到量化交易的一些指标,例如 开盘价、收盘价、涨跌幅、MACD 等。
奖励函数则比较关键,有用相对收益的,也有用绝对收益的、也有超额收益的,目前我主要使用 相对收益和相对收益率 去训练。
状态环境中指标的个数会影响智能体的收敛,但其实很多指标本质都是开盘价、收盘价计算得来的。
对于算法模型,开始使用了最传统的 DQN 试了一下,不加任何添加剂,写出了一个最小可行方案 (Minimum Viable Product),但没想到的是这个方案效果出奇的好,甚至用这个训练后的模型能够适配到任何的标的上,也就说模型存在通用信。
这是难以置信的,最后我拿模型的输出策略去聚宽进行了回测,但结果不尽人意,很显然我们没有考虑到印花税、手续费的成本。用聚宽进行回测也很方便,在本地把黑盒输出的决策和日期用字典封装起来,直接投到聚宽上通过日期匹配出决策即可。
之后的过程就比较艰难了,熬了几个夜研究从 DQN -> DRQN -> Dueling DQN 各个算法不断迭代,奖励函数也换了又换。
最后,我拿一个标的作为训练对象,训练出了一个还能看的模型,回测效果还行,70%+ 的年化,回测的结果也基本符合仿真结果。
但后来我们使用垃圾股作为标的,例如万科A,那么训练出来的模型效果其实并不理想,所以我们的研究还要继续,并且我们还要考虑黑盒策略是否可靠,每次决策时需不需要人工干预,如果人工干预那是不是会被人的情绪影响等等。
革命还未成功,还得继续研究!