神经网络是一种在机器学习中比较常见的算法模型,它的算法结构就类似于人脑中的神经元结构,只要给定一些输入,就可以得到输出;那么我们是否能够将与股票历史价格相关的指标作为输入,将股价涨跌作为输出,进而利用神经网络预测股市涨跌呢?
1、确定网络输入因子
为了验证我们的想法,首先需要明确将哪些指标作为输入。在这里,我们通过聚宽量化平台的数据接口获取因子库中的技术指标因子,因子信息如下:

2、确定网络输出
在输出层,我们可以将股价的日收益率的正负标记为+1和-1,在这里,由于A股无法做空,因此暂且不考虑卖空所获得的收益,为方便最后计算资产价值曲线,将-1转变为0。
下图为输入与输出合并后的部分数据集:

3、确认训练集和验证集
训练集可以被看作是高考前做的模拟卷,模型通过训练集不断进行学习以及修正;验证集可以被看作是高考卷,模型需要通过验证集验证自身的真实能力。在这里,我们选取贵州茅台2018-01-01~2019-01-01的日行情数据作为训练集,2019-01-01~2019-06-01作为验证集。
4、构建神经网络模型
首先,我们需要对输入因子进行标准化处理。在这里,我们利用sklearn包中的Standardscaler进行数据标准化。

进一步,设定神经网络模型参数并进行训练:

5、利用训练好的模型进行预测并绘制资产价值曲线
- 训练集的资产价值曲线(2018-01-01~2019-01-01)
从下图(蓝色为基准线)中可以看出,在训练集中模型的预测效果表现较好,也就是说在模型所见过的数据中表现较好,策略价值曲线的波动率明显小于基准线,并在2018下半年的大跌行情中走出逆势而上的形态,最终一年共获得30%以上的收益。当然,训练集的表现可不能当真,让我们来看看模型在验证集中的表现。

- 验证集的资产价值曲线(2019-01-01~2019-06-01)
下图表示2019年上半年的策略价值曲线与基准线,从图中可以看出,策略价值曲线虽然获得了10%的收益率,但其所取得的收益率远远没有基准线高,这种情况差不多是踏空了,唯一令人欣慰的是其收益率的波动率很低,风险较小。

6、总结
在上述的条件下,我们发现神经网络并不能很好的预测股市涨跌。这主要是因为我们所选取的因子基本上是技术指标因子,而技术指标因子仅仅反映了历史股价和成交量的信息,而影响股市涨跌的影响因素实在是太多了,我们只考虑了其中一部分的因子。另外,因子之间在预测效果上是有差异的,这里我们并没有对这一点进行筛选,预测效果差的因子混杂在其中当然造成预测效果变差。这就类似于做质量差的题对成绩有害无益。另外,因子之间的相关性对于模型在验证集的表现有很大影响,因为如果因子之间的相关性很高,可能会使模型过分挖掘训练集数据之间的规律,而这些规律很可能仅仅只存在与训练集中,这也被称作过拟合,一旦模型出现过拟合,一般会表现为在训练集的预测效果很好,而到了验证集模型的准确性就会急剧下降。
若有疑问可关注公众号“TES工作室”进行咨询。
出品/TES工作室