王臻杰,周鑫
(1.四川大学计算机学院,成都610065;2.四川武警警官学院,成都610000)
自从股票二级市场诞生以后,股票价格的变动趋势的预测问题就成为了一个被很多人关注的研究方向。经过了多年的研究,关于股票市场能否被预测大致有两个派别:一派相信有效市场假说和随机游走理论,认为股票市场上的股票价格的变动趋势短期上是随机而不可预测的,任何可用于预测股票价格变动趋势的信息已经在股票价格中充分体现。然而,很多研究者相信第二种派别的观点——股票价格的变动趋势是可预测的,并对此做了很多研究。
对股票的分析大致有两个方向:基本面分析[1]和技术面分析[2]。对股票的基本面分析主要讨论企业的财务状况和业务状况,对一支股票短期的价格变动趋势的预测主要运用技术面的方法。技术面分析立足于对股票交易数据的分析,通过分析技术指标进行选股。某只股票价格特定粒度的K线包含了此粒度的时间窗口内该支股票的收盘价、开盘价、最高价和最低价。
最初投资者主要依靠个人的专家知识进行技术面分析以预测股价,人类专家提出了若干理论,包括道氏理论、波浪理论和江恩理论。后来,随着机器学习技术的发展,开始有人利用机器学习技术来预测股价的变动趋势。基于机器学习的股票价格变动趋势预测有很多相关研究:2015年,秦璐使用基于区域标记法的代价敏感支持向量机预测股价[3];2018年,程小林提出基于概率后缀树的股票时间序列预测方法研究[4],张潇等人使用沪深股市作为数据源,探讨了随机森林算法在股票价格趋势预测任务中的应用[5]。
2008年后,随着经典的深度学习算法的提出和硬件的进步,深度学习技术开始被广泛的应用。一些研究者开始利用深度学习技术预测股票价格趋势变动。基于深度学习技术的股票价格趋势变动研究大致可分为三类:①将股票的OHLCV数据(开盘价、最高价、最低价、收盘价和交易量)和技术指标作为输入,价格变动趋势作为输出,使用深度学习模型进行学习的研究。2020年孙存浩等人使用BP-LSTM网络预测股票指数[6];②在股票的OHLCV数据和技术指标外,引入相应的消息数据,例如政府公告、财政新闻等作为输入的研究。2019年,张梦吉等人引入财经新闻数据作为模型的输入,预测股票价格变动趋势[7]。③同时使用多支股票的OHLCV数据和技术指标作为输入,以它们的价格变动趋势作为输出的多目标学习研究。2018年,Tao Ma和Guolin Ke在2010年至2018年的四大行股票数据集上使用多目标学习以预测它们的股价涨跌,取得了优于单目标学习的表现。
虽然采用深度学习技术的股票价格趋势变动研究取得了相当的成果。然而,目前为止,没有研究者在研究中考虑股票的价格变动趋势和相关的商品的价格变动趋势的联系。众所周知,股票的价格反映的是投资者们的预期,而与某公司业务紧密相关的商品价格的变化无疑会影响这一预期,例如石油价格对航空股票的影响和煤炭价格对电力股票价格的影响[8]。
为了填补基于股票和相应商品价格的股票价格趋势预测研究的空白,本文提出了引入商品信息的股票价格变动趋势预测方法,该方法基于深度学习技术。它的预测模型以股票和相应商品的主力期货的OHL⁃CV数据和技术指标为输入,使用LSTM网络提取期货和股票的输入数据的深层特征,dropout防止过拟合,MLP网络作为分类器,第t+1天相对于第t天的股票价格变动趋势为预测的目标。
之所以使用商品的期货价格数据而不是现货价格数据,是因为期货也是一种反映未来商品价格的金融产品,可以使用专家研究金融产品技术指标的先验知识。另外,期货相比现货,更能反映市场对相关行业的预期。[9]
本文的主要贡献如下:
(1)本文提出了引入商品信息的股票价格变动趋势预测方法,该方法使用结构相同的LSTM网络并行提取期货和股票的OHLCV数据和技术指标的高维特征用于预测,相比于使用不同结构的网络分别对期货和股票的输入数据进行高维特征提取,这种做法减少了超参数优化时的工作量。
(2)本文在山东黄金股票和黄金主力期货数据集上,应用本文提出的引入商品市场信息的股价变动趋势预测方法。实验结果证明了该方法的预测能力优于只使用股票OHLCV数据和技术指标进行预测的基线方法。
(3)本文提出了一种基于本文提出的方法的模拟交易策略并在测试集上进行了模拟交易,取得了优于基线交易策略的业绩。
本文提出的引入商品市场信息的股票价格变动趋势预测方法主要可分为四个部分:①数据预处理。②引入商品市场信息的股票价格变动趋势预测模型。③基于贝叶斯优化方法的超参数调优。④使用最优模型预测。其中,前三个部分是本文提出的方法的主要组成部分。本节接下将具体介绍这三个主要部分,具体分析了每个部分中使用的技术的基本原理和选择这些技术的原因。
本文提出的方法使用的原始数据集是以天为粒度的股票和期货的K线数据和交易量。在介绍具体的预处理方法之前,本文先列出所用原始数据的形式化表达。以天为粒度的原始数据的形式化表达如公式(1)所示:
其中dt表示交易日期表示t周期内的股票开盘价表示t周期内的股票最低价表示t周期内的股票最高价表示t周期内的股票收盘价;vt表示t周期内的股票成交量。连续n个周期的股票交易数据的表达形式如公式(2)所示:
将公式(2)中的xt使用具体交易数据进行表达时,则X也可表示为公式(3):
如前文专家提出了很多在交易实践中被认为有效的由K线和成交量生成的技术指标[10],因此,本文提出的预测方法也引入了技术面分析领域的专家先验知识以提高模型的性能。获取股票和期货的OHLCV数据和成交量后,本文提出的方法对数据做进一步处理,计算出由K线和交易量生成的技术指标。本文选择MACD、RSI和SMA三个技术指标作为预测模型使用的技术指标。
SMA是收盘价的n日移动平均线,计算方式是将最近n天的收盘价相加,然后除以n。
MACD的全称是异同移动平均线,是从双指数移动平均线发展而来的。MACD的计算过程如下所示:首先由收盘价计算出快的指数移动平均线和慢的指数移动平均线,二者相减,得到快线DIF,再用2×(快线DIF-DIF加权移动均线DEA)算出MACD柱。人类专家通过计算MACD来分析资产收盘价的短期趋势和长期趋势的差离状况来给出买入或卖出信号。
RSI是相对强弱指标的简写,与SMA和MACD不同,RSI讨论的不是均线之间的差离程度,RSI主要关注的是金融资产在固定时间间隔内买方和卖方力量的对比。RSI的计算相对简单,只考虑一段时间内n个周期上涨资金和下跌资金的比值。
使用原始数据计算生成RSI、SMA和MACD后,将这三个技术指标和原有的K线数据和交易量在时间维度上合并,作为本文提出的预测股价变动趋势的模型的输入数据。
引入商品市场信息的股价预测模型使用的数据集是由按照时间窗口长度和预测目标生成的特征时间窗口和标签构成的,然而,不同种类的特征之间的量纲差距巨大,这会导致神经网络训练困难,无法收敛,所以还要对每个特征时间窗口内进行归一化。
之所以不在之前进行整个数据集的归一化,是因为股票的历史行情数据和技术指标具有时间序列特性,如果在整个数据集上进行归一化,等于在过去的特征时间窗口中引入了未来的信息,所以,股票价格变动趋势预测问题数据集的归一化只能在特征时间窗口内进行。
常见的数据归一化的方式由两种,分别是最大最小归一化和z-score归一化,最大最小归一化对原始特征数据进行线性变化,z-score归一化将将原始特征数据基于均值和标准差进行归一化。设原始特征A为的最大值为max,最小值为min,均值为μ,标准差为σ,最大最小归一化和z-score归一化的计算公式如公式(4)和公式(5)所示:
本文提出的方法关注于预测第t+1的股价相对于第t天股价的变动趋势。由于影响股票短期涨跌的因素主要表现在短期的市场环境中,本文使用最近的固定时间长度的历史数据来预测股价的涨跌。
设时间窗口长度为time_window,本文提出的模型在第t天使用t-time_window天到第t天的数据构成股票和期货的time_window*8大小的特征时间窗口作为预测的输入,最终的由时间窗口time_window生成的输入数据的表达形式如公式(6)所示:
输出标签取决于下一交易日的收盘价pc,t+1与当日的收盘价pc,t的大小,若差值大于0则表示上涨,标签值为1,若差值小于等于0则表示下跌,标签值为0,本文提出的方法的标签构建方法如式(7)所示:
在过去的股票价格变动趋势研究中,研究者们普遍使用了卷积神经网络或循环神经网络[11]。这是因为金融产品价格时间序列本身就是一种有很大的噪声干扰的时间序列。循环神经网络本身就是为了处理时间序列问题而提出,而卷积神经网络具有一定的降噪功能,提供了特征提取过程的鲁棒性,因此,这两类网络在股票价格变动趋势中得到了广泛应用。
本文提出的模型使用了循环神经网络的变种LSTM网络,大致可分为两个模块:基于LSTM网络的高维特征提取模块和基于MLP网络的分类器模块,接下来本文会具体介绍这两个模块。
深度学习之所以在很多任务上取得了超过人类专家和传统机器学习方法的效果,是因为不同于机器学习由人类手动构建的特征的方式,深度学习使用端到端的方式让深度学习模型进行特征学习,逐步将低维特征转化为高维特征。特征的好坏很大程度上决定了模型的性能,深度学习技术实现了特征学习。在股票价格变动趋势这一问题上,本文认为,采用由OHLCV数据和技术指标进行特征学习生成的高维特征是提高分类器分类性能的有效手段。
长短时记忆(LSTM)网络是循环神经网络(RNN)的变种,基于LSTM网络的模型在诸如自然语言处理和语音识别等时间序列相关的问题上都取得相当出色的成绩。LSTM的网络主要由LSTM单元组成,LSTM单元内部具有门控机制控制信息的流向,这些门控机制包括输入门、输出门和遗忘门,通过这些门控机制,LSTM单元可以记住任意时间间隔内的输入,因此,LSTM网络克服了循环神经网络依照BPTT算法反向传播损失时梯度消失的问题。LSTM网络的数据流向如公式(8)到公式(12)所示,其中,xt代表了LSTM单元的输入向量,it代表输入门的激活向量,遗忘门的激活向量为ot,输出门的激活向量设为ht,LSTM单元的状态向量为ct。
正如本文之前所述,本文提出的引入商品市场信息的股票价格变动趋势预测模型使用相同结构的LSTM网络提取股票和商品期货的高维特征。LSTM网络可以多层叠加,构成多层LSTM神经网络。将l个时间步的n维特征向量输入最后一层隐藏层维度为m的多层LSTM神经网络后,会输出第一维度为l,第二维度为m的隐藏层状态(m>n)。本文提出的引入商品市场信息的股票价格趋势预测模型提取高维特征时,分别取股票和期货的隐藏层状态的最后一个时间步的1*m维特征向量,拼接在一起,得到了维度为1*2m的高维特征向量用于接下来的分类。
MLP网络(多层感知器神经网络)的历史相当久远,现在基于MLP模型的预测方法一般被作为基于其它深度学习模型的预测方法比较的基线方法。现在流行的深度学习模型中,常常在高维特征向量后添加MLP结构用于分类。本文提出的引入商品市场信息的股价变动趋势预测模型采取了相似的结构。因为本文研究的股票价格变动趋势预测是二元分类问题,所以输出层的神经元数目为2,输出层的激活函数选择Sig⁃moid激活函数或直接使用线性函数。
虽然本文提出的模型并不复杂,然而,由于股价变动趋势预测问题自身的特点,可用于本文提出的模型训练的数据集较小,且充斥着噪声。因此,如果模型在本文选择的数据集上训练的epoch较多,很容易出现过拟合的情况,导致虽然在训练集上有近百分之百的预测准确率,但是,在未训练过的数据集上表现糟糕。
因此,为了减少过拟合,必须有效阻止模型学习到数据集的观察值和市场的真实值的偏差和防止模型过分的拟合噪声点。
深度学习中最常用的减少过拟合的正则方法是dropout,dropout方法会在训练时随机让一层的神经元的部分失活,本文提出的模型在输出高维特征向量的网络层后进行了dropout防止过拟合。
在1.2小节中,本文介绍了预测模型的大致结构。然而,深度学习模型的超参数对模型的性能和训练速度有着很大的影响。本文提出的预测模型主要的超参数有学习率、dropout率、高维特征提取模块的LSTM网络的层数、分类模块的多层感知机的隐藏层个数,每个网络层的神经元个数以及输出层神经元的激活函数。
为了提高深度学习模型的性能,需要对模型的超参数做超参数优化,然而,超参数优化是组合优化问题,无法像模型内部的可训练参数一样使用梯度下降法优化。简单的超参数优化方法包括网格搜索和随机搜索。这两种优化方法都是尝试各种超参数组合然后选择一个模型性能最佳的配置。
这两种方法都没能利用不同超参数组合之间可能存在的关系,在超参数搜索空间维度较大的时候,使用这两种方法搜索得到性能较优的超参数组合所需的时间复杂度会变得太大。本文的超参数空间维度最高可达10维,且有很多维度的参数值是连续的,使用网格搜索和随机搜索并不适合,因此,本文使用贝叶斯优化方法优化本文的超参数结构。
贝叶斯优化方法与网格搜索和随机搜索不同,它是一种根据当前已尝试过的超参数组合的结果,来预测下一个可能达到最大收益的超参数组合的自适应算法[12]。
具体来说,贝叶斯优化方法假设优化的目标函数服从高斯过程,根据已有的实验结果对这个过程建模,再使用收益函数计算得出下一组超参数的组合。收益函数在调优过程中用来权衡开发和探索,尽量选择高斯过程曲线上均值和方差都大的点。
本文提出的引入商品市场信息的股价变动趋势预测方法使用贝叶斯优化方法对1.3小节中提出的模型进行超参数调优,选择其中性能最好的模型用于预测股票价格。
本文提出的引入商品市场信息的股票价格变动趋势的方法的预测流程大致包括三步,第一步进行数据初始化,第二步是构建引入商品市场信息的股票预测模型并训练,根据训练的结果进行贝叶斯调优,最终选择最优超参数组合,第三步是使用最优模型进行股票预测。
这一流程的伪代码形式如下所示,其中f表示模型初始化函数,Hspace表示超参数空间,M表示贝叶斯优化过程构建的高斯过程,pre_processing表示数据预处理,Fitmodel表示贝叶斯优化过程由高斯过程生成超参数组合的函数,modelt,modelforecast分别表示贝叶斯优化每次生成的模型和性能最佳的模型。
下一节,本文将要介绍前面提出的方法在实际数据集上实验后的结果。
本节在实际数据集上应用第一节提出的引入商品市场信息的股票价格变动趋势预测方法,评估了本文提出的方法在分类和指导交易两方面上的性能,并且和基线方法进行了比较。本节进行的实验在两台机器上进行,数据的预处理和运用调优后的模型预测股价并模拟交易在单核CPU为Intel i5-8250u、8G内存的笔记本上进行,需要更多算力的模型构建、训练和贝叶斯优化部分在P4gpu,16G内存的百度智能云虚拟机上进行。
本文选择山东黄金股票和沪市黄金主力期货作为本文提出的方法进行实验的数据集。这是因为黄金股票的价格受国际金价影响很大,黄金期货的价格恰恰反映了国际金价,二者之间存在显著关系[13]。
图1 数据集标签分布图
山东黄金是国内典型的大型黄金公司,选择山东黄金作为实验的预测目标具有典型性。之所以选择黄金主力期货作为引入的商品,是因为主力期货是期货市场上最活跃,成交量最大的期货,因其容易成交的特性,投机者们基本都参与这一交易。因此,主力期货价格能够很好地表示商品价格。
本文通过JQData提供的本地API接口下载2010年1月1日至2016年12月31日内的交易日的山东黄金和沪市黄金主力OHLCV数据作为原始数据集,经过第二节提到的数据预处理过程后,前70%的特征时间窗口和标签作为训练集,70%到85%的数据作为验证集用以在训练和超参数调优时评估模型的性能,85%之后的数据作为测试集用以评估模型的分类性能和指导交易盈利的能力。
训练集、验证集和测试集上的数据的标签的分布如图1所示,由图可知,在三集上,上涨类标签和下跌类标签大致是平衡的,不需要特别使用解决不均衡类别问题的技巧。
本文使用开源工具包optuna完成调优工作,本文提出的模型的超参数空间包括了LSTM网络和MLP网络的神经元个数,学习率和dropout比例,输出层的激活函数,具体的超参数的取值范围和采样方式如表1所示,其中l代指LSTM网络的层数,suggest_int代表在值域内对整数均匀采样,suggest_uniform表示在值域内均匀采样,suggest_loguniform代表在值域连续对数均匀采样,suggest_discrete代表离散采样。模型一次训练经过200个epoch,依照训练完后模型在测试集上的损失进行下一次超参数选择。
表1 本文提出的预测模型的超参数空间
为了比较本文提出的方法和未引入商品信息的方法的优劣,本文选择基于LSTM网络的模型的方法和基于MLP网络的模型的方法作为基线方法,这两种基线方法的预测模型只使用山东黄金股票自身的数据作为输入。
评价股价变动趋势预测方法的指标可分为两类:一类注重分类性能,一类关注基于此方法的交易策略[16]的优劣。本文提出的预测方法实际上是一个简单的二元分类问题,因此本文采用准确率评价本文提出的方法的分类性能。评价一个交易策略的优劣,人类专家也提出了多种绩效指标,本文使用收益率、夏普比例和最大回撤率来评价本文提出的方法在这一方面的优劣性。它们三者的定义如公式(13)到公式(15)所示,其中。Vali为投资时段内某天的净值,Rf为无风险年化收益率,σp为策略在整个时间段内年化收益率的标准差。
收益率是用获利除以本金,收益率直观的表示了在一段时间内,投资者大致获得了多少收益,然而,只用收益率评判策略没有考虑到策略潜在的风险。夏普比例则考虑了这一方面的问题,引入投资时段内的年化收益率的标准差来权衡策略的风险。为了比较策略在投资时间段内的最坏情况,本文引入最大回撤率作为评价指标之一,最大回撤率指的是在整个投资周期内选定任意一点往后看,净值达到最低点时收益率的回撤幅度。
本文提出的引入商品信息的股价变动趋势预测方法最终使用的预测模型的超参数如下,0.15左右的dropout比例,输出层选择sigmoid激活函数,2层MLP网络,第一层神经元数目为44,第二层为22,1层LSTM网络,神经元个数为36。
本文提出的模型的在数据集上的预测准确率和基线方法的对比表2所示。
表2 本文提出的模型与基线模型的预测准确率
由表2内容可知,基于LSTM的基线模型在测试集和验证集上都要优于基于MLP的模型,而本文提出的引入商品信息的股票价格变动趋势预测问题又要优于LSTM基线模型,这证明了本文提出的方法的有效性。
本文提出了一种基于此模型的简单的模拟交易策略。如果模型预测标签为上涨,则该策略选择以当天的收盘价买入,在第二天以收盘价卖出,否则不做交易。
为了评判基于这一策略优劣,本文选择和另外两种交易策略对比。它们是买入并持有策略(buy and hold)和追涨杀跌(buy the winners)策略。买入并持有策略下投资者买入股票一直到投资时间段结束时卖出。如果昨天股票价格呈上升趋势,追涨杀跌策略会买入,反之则卖出。
本文在测试集上,共227个交易日的交易时间段内,基于这三种策略进行了模拟交易,初始资金为10000元,三种策略的在整个时间段内的资产净值曲线如图2所示。三种策略的最大回撤率、收益率和夏普比例如表3所示。
由表3和图2的内容可知,基于本文提出的方法的交易策略在夏普比率、收益率和最大回撤率上都高于两种基线策略,这代表基于本文方法的交易策略在收益和稳定性方面都要优于另外两种基线交易策略。因此,本文提出的方法在模拟交易中的绩效和分类性能上都要优于基线方法,这说明了引入商品信息作为输入的预测方法能够帮助投资者在市场中获利。
图2 三种策略的资产净值变化
表3 本文策略与基线策略的绩效指标
本文提出了一种引入商品信息的股票价格趋势预测方法,并详细论述了该方法的主要组成部分和预测流程:数据预处理,包括计算技术指标,生成特征时间窗口与标签和归一化,划分训练集、验证集和测试集;在超参数空间中采样并构建使用股票和期货的特征时间窗口预测股价的模型,在数据集上训练模型并评判模型的性能;使用贝叶斯优化方法进行超参数调优,重复建模、训练、评价的过程;选出最佳的超参数组合。
本文在山东黄金和黄金期货主力数据上进行了实验,实验结果表明,本文提出的方法在预测能力上要优于基于MLP网络的基线方法和基于LSTM网络的基线方法,两种方法基线都只使用了股票的OHLCV数据生成的特征时间窗口作为输入。这说明了本文引入商品信息的做法的有效性。基于本文提出的方法的交易策略在测试集上模拟交易的结果在收益率和稳定性方面都要优于两种基线交易策略,说明了本文提出的方法能够帮助投资者在市场中获利。
本文提出的方法只引入了一种与预测的股票相关的商品的信息,然而,在现实生活中,股票和商品的关系是相当复杂的,多种商品和多种股票间可能存在多对多的关系,因此,在以后的工作中考虑使用多个相关的商品信息和多支股票协同预测多支股票,并使用图神经网络代替LSTM网络处理作为预测模型处理输入这种存在复杂关系的输入。