从图形角度利用神经网络进行选股

做了一个很low的基于神经网络的选股策略,回测效果惨淡,仅供大家学习使用,带大家入门深度学习。

问题转化与模型选择

首先对于选股这个问题,如果要利用神经网络的话,需要将其转化为有监督学习问题,一般情况下都是转化为有监督学习问题。有监督问题可以分为分类与回归问题。这里我将其转化为二分类问题,即预测第二天是否上涨,建模方式与之前文章相同(送你一份年化100%+的策略)。当然也可以分成多个类别,表示不同程度的涨幅或跌幅。

如果用神经网络的话,目前一般会设计基于CNN的模型或基于LSTM的模型。这里我选择了CNN进行模型搭建。

对于CNN的基础知识,这里不作介绍,网上一堆教程,B站也有教程视频,下面我讲一些我自己的理解。CNN最早是用于图像识别分类的,但CNN同样适合一维时序信号的回归或分类。图像很好理解基本就是含RGB值的三维矩阵,如果是灰度图像,最后一个维度是1。一维信号就是二维矩阵,可以理解为一个维度是信号长,一个维度是通道数,举个例子,股票中含收盘价和成交量,这里可以将收盘价和成交量看成信号的两个通道。其实CNN识别一维信号也是从图形角度去识别的,可能比较难理解,这里我也不知道怎么解释,时间久了大家可能就理解了。可能会有一些方法将股票的涨跌绘制成图像然后利用CNN预测或分类,我个人觉得不太合适,绘成图像的过程中会加入很多不相关的信息还容易丢失一些信息,当然可能效果会比较好但我觉得这个效果的上限肯定不如用一维信号来做。还有其他一些方法会利用其他一些手段转化成图像,这也是可以,看大家是如何转化成图像的。

这里我是转化为一维时序信号进行分类。首先我说一下为什么CNN适合一维信号的分类或回归。其实CNN做预测的原理就是利用卷积核的能力,卷积核可以感受历史一段时间的情况,最后集合多个历史片段进行判断。与LSTM相比,CNN可以看到历史更多的数据,虽然LSTM自己有一定的记忆能力,但这个记忆只是短暂的记忆。这里并不是说明CNN一定比LSTM好,虽然我个人比较喜欢CNN,但是具体任务还是需要多尝试的。(对CNN和LSTM不熟悉的朋友可以自行网上搜索教程)

模型搭建

因为大家用keras的比较多一点,keras对新手来说也更好上手一点,我就写了一个基于keras框架的代码。我搭建的模型结构如下(没啥参考价值,效果也不好):
在这里插入图片描述
对于输入的数据包含了4个通道,分别是个股的收盘价、个股的成交额、大盘的收盘价、大盘的成交额。输入的时间长度为20天。这里不对各个层具体介绍,大家感兴趣的可以自行百度。

模型训练

搞深度学习的人也成为炼丹师。引用知乎一篇文章的说法(链接https://zhuanlan.zhihu.com/p/23781756):深度学习的模型训练就是炼丹。把精选原始数据,按照神经网络的规定法则通过计算框架提炼,从而得到一个远小于数据数倍的模型。

以下是几个我训练阶段不太一样的地方:

**在原始数据中会有一些停牌的数据,这些停牌的数据需要填充或者删除。**为了我后面方便处理,我对停牌数据进行了填充。停牌时,收盘价用前面未停牌的收盘价填充,成交额填充为0。核心代码如下:
在这里插入图片描述
直接将原始数据输入计算,可能容易导致模型识别困难的问题,所以输入的数据需要进行标准化处理,核心代码如下:
在这里插入图片描述
在模型的训练阶段,采用的是mini batch的训练方式训练的。因为一次性载入所有数据计算将会耗费大量的内存,所以只能将数据分成多个mini batch计算。在每个mini batch中,我会选取从股票池中选取固定数量的股票,再分别从这些固定数量的股票中抽取某个历史片段送入训练数据中。核心代码如下:
在这里插入图片描述
其他一些超参,这里不作介绍了,大家可以自己看代码。

结果

训练数据:20160101-20181001
验证数据:20181001-20181231
测试数据:20190101-

与传统机器学习模型不同,深度学习训练还是需要用到验证集的(我之前的lgb没用验证集)。因为深度学习更容易过拟合,不使用验证集比较难判断什么需要停止训练。
训练结果:
从loss的下降情况可以发现,训练集的loss一直在降,但验证集的loss反而上升了。说明模型已经在过拟合了,我搭建的模型不能很好的学到东西。
在这里插入图片描述
回测结果这里就不放了,结果也很烂。

结语

这篇文章只是在深度学习应用上的一个小小试探。失败的原因可能有以下几点:(1)网络搭建的不好;(2)想从图形的角度识别很难,还是需要给网络喂特征。后面我会对这个问题持续研究。

如果大家对深度学习神经网络不了解,结合代码和这篇文章可以帮大家对深度学习建模有一个基本的了解。深度学习的模型搭建及训练是非常有技巧性的,难度远远大于用LGB模型训练。对于模型的搭建,需要从理论出发,理解各种层的计算方式,然后带一定的猜想去试验。对于模型的训练同样有很多技巧也需要结合理论出发,比如我上面提到的每个mini batch数据送入的方式(当然我那种不一定好),这些技巧都是需要经验的积累的,不同领域的技巧也是有区别的。

总之大家如果想将深度学习应用在投资上面需要花很多时间进行研究。

代码github:

https://github.com/wbbhcb/stock_market/tree/master/深度学习实战

对量化、数据挖掘、深度学习感兴趣的可以关注公众号,本人不定期分享有关这些方面的研究。
在这里插入图片描述
个人知乎:
https://www.zhihu.com/people/e-zhe-shi-wo/activities

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值