APP下载

基于LSTM神经网络的股票大盘短期趋势预测

2020-04-24马元昊

电脑知识与技术 2020年5期

马元昊

摘要:该文针对股票价格预测课题分析了循环神经网络在这一领域的可行性。通过结合结合长短期记忆,基于Tensorflow平台搭建了多层LSTM模型对上证综指进行了短期预测,通过不断优化得到了非常好的预测准确率。

关键词:股票大盘;LSTM;短期预测

中图分类号:TP393 文献标识码:A

文章编号:1009-3044(2020)05-0205-02

开放科学(资源服务)标识码(OSID):

金融市场中股票的预测一直是一个经久不衰的研究课题,引起了着来自各个学术领域的学者和业界人士的关注[1-2]。股票市场因为其蕴含巨大的商业价值而提供了巨大的吸引力,对于股票市场的预测由于股票数据的非线性、时间序列、价值导向、强波动性等特性而产生了而产生了很大的困难。同时由于股票市场受到众多外界因素和干扰项的影响,其中包括公司财务状况,国家政策导向,社交舆论影响等,因此可以将股票市场看作是一个错综复杂的非线性动态系统,很难用常规的方法预测其趋势变化。近年来由于机器学习的兴起,多种机器学习算法,如神经网络,遗传算法,支持向量机,KNN等,都被用于预测股票价格[3-5]。LSTM作为最成功的RNN架构之一,对于股票趋势这种有着一定周期规律的预测有着很好的效果。LSTM型循环神经网络解决了神经网络存在的梯度消亡现象[6]。LSTM引入了存储器单元,这是一种计算单元,可替代网络隐藏层中的传统人工神经元。利用这些存储器单元,网络能够及时有效地关联存储器和远程输入,因此适合于随着时间的推移以高预测能力动态地掌握数据结构。本文使用LSTM基于TensorFlow平台对中国股票上证指数进行了建模和预测。本文选取了上证综指的交易数据(日数据):开盘价、最高价、最低价、收盘价、交易量、交易额、涨跌幅七个维度的特征数据作为输入因子,同时为了判断模型的预测准确率,加入了股票代码、时间和后一个交易日该股票的收盘价,通过计算(预测收盘价一实际收盘价)/实际收盘价来得到准确率。通过对58000个序列的训练拟合该模型,并使用其他9900个序列进行测试。预测准确率达到了97.80087040351719%,说明应用LSTM神经网络预测上证大盘指数有着相当不错的效果。

1 方法

在我们用于股票预测的LSTM模型中,一个序列被定义为固定时间段(N天)内任上证指数的每日数据集的顺序收集。每日数据集包含具有序列学习能力的股票的特征,例如收盘价,这些N天中某一天的交易量等。我们的模型由一个输入层,多个LSTM层,密集层以及单个输出层组成。其中输出层存储单元的数量与序列可保持的学习特征数量一样。上证指数的58000条数据作为训练集,9900条数据作为测试集。获取和预处理训练集,将数据标准化,将数据处理为20*7*5800的矩阵作为输入,同时以batch_size=60的大小记录每一个batch的初始index。以同样的方式处理测试集,只是在返回值中需要包括平均值矩阵和方差值矩阵,因为在最后计算误差时需要恢复原数据的范围,从而比对预测值和真实值的距离。

class LSTMO:

def hidden_layer(self, inputs, feature_num, cell_num, lay-er_num,BATCH_SIZE,TIMESTEP):

def lstm_cell0:

cell=tf.nn.rnn_cell.BasicLSTMCell(cell_num)

return t£nn. rnn_cell. DropoutWrapper(cell, LSTM_ KEEP_PROB)

cell=tf.contrib.rnn.MultiRNNCell([

lstm_cello for一in range(layer_num)

】, state_is_tuple=True)

具體代码如下:

def

train_model(self, BATCH_SIZE, TIMESTEP, train_begin,train_end Ji,feature_num,cell_num,layer_num,globaLsteps):

with tf.name_scope('inputs 7):

inputs=tf. placeholder(tf. float32, shape= [None, TIMESTEP, fea-ture_num],name=7i

nputs)

labels=tf. placeholder(tf. float32, shape= [None, TIMESTEP,1】,name='Iabels')

data=get_datao

index, train_x, train_y=data. get_train_data(BATCH_SIZE,TIMESTEP,train_begin,tra

in end

with tf.variable_scope( "Istm_layer"):

pred,~=self. hidden_layer(inputs, feature_num, cell_num, lay-er_num,BATCH_S

IZE,TIMESTEP)

在LSTM中,选择序列的学习特征至关重要[7]。由于股票数据种类较多,包含了日数据、周数据等不同时间跨度的数据以及辅助预测而产生的数据例如日线k线等,这里我们选用以下两组:

(1)上证综指的交易数据(日数据):开盘价、收盘价、日内最高价、日内最低价、交易量、交易额;

(2)上证综指的财务数据(日数据):历史PEC、市盈率、市现率PCF、市销率PSc8]。

我们期望LSTM的序列学习能力将为我们找到最佳参数。在目前的研究中,一个序列有60天的股价数据,每个每日数据有10个特征。

2 实验

原始数据:本实验中选取的是上证指数中股票代码为sh000001的上证综指股票从1990/12/20到2018/10/17共6790日数据。总数据大小为10*6790,即一共有67900个交易日该股票的数据,每一个交易日的数据包括10个维度。具体包括:股票代码,交易时间,开盘价,收盘价,最低价,最高价,交易量,交易额,涨跌幅;处理训练和测试的输入集和输出对比集,对各因子的数据进行z-score标准化让不同因子的数据的范围相近,确保各因子的数据不会因为取值范围之差导致一些因子在模型训练中不起作用。

训练细节:本实验在Windows系统下进行,主要配置参数为Window 10 x64, 8.00 CB运行内存,Intel i5-5200 CPU.并用Python进行程序设计。我们选择应用TensorFlow作为深度学习平台。使用pandas和numpy进行数据获取和处理。数据来源于tushare。神经网络层数为2,批量大小为60,神经细胞个数为15,学习率初始定为0.0006,迭代次数为1000,时间步长为20,阈值为0.95,优化器为自适应矩估计。

实验结果:本实验预测的是后一日的收盘价,为了判断模型的预测准确率,通过计算(预测收盘价一实际收盘价)/实际收盘价来得到准确率,同时以折线图的形式比对预测值和实际值的偏差。通过反复的参数调整和模型微调,最终对上证综指数据集的最佳预测正确率为:97.80087040351719%。

图1展示了实验结果。

3 总结

本文采用了高阶的深度学习平台TensorFlow,实验数据来源于股票代码为sh000001上证综指从1990/12/20到2018/10/17的日线数据,目的是通过历史数据预测下一日的股票收盘价格。通过将原数据预处理后划分为训练集和测试集,避免训练集和测试集交叉而导致过拟合问题。实验过程搭建了一个多层LSTM模型,通过反复调参和局部优化得到了一个十分理想的数据,最终仅通过1000次迭代达到了97.8%的正确率,这个结果证明可以很好地预测出上证指数的后一日收盘价,在选择股票分析时,这非常有用,对于股票实操有很好的指导意义。本文证明了LSTM在中国股票市场预测上证指数上有着强大的功能,相应的对于股市中的个股预测也能起到一定作用。

参考文献:

[1]王波,程福云.KNN算法在股票预测中的应用[J].科技创业月刊,2015,28(16):25-26.

[2]傅航聪,张伟,机器学习算法在股票走势预测中的应用[J].软件导刊,2017,16(10):31-34,46.

[3] Krollner, Bjoern, Bruce Vanstone, and Gavin Finnie. "Finan-cial time series forecasting with machine learning techniques:A survey,2010.

[4] Agrawal J G V S.Chourasia. and A.K.Mittra. "State-of-the-art in stock prediction techniques.”International Journal ofAdvanced Research in Electrical, Electronics and Instrumenta-tion Engineering 2.4,2013: 1360-1366.

[5] Lipton, Zachary C."A Critical Review of Recurrent NeuralNetworks for Sequence Learning.‘ arXiv preprint arXiv:1506.00019,2015.

[6] Saad, Emad W., Danil V.Prokhorov, and Donald C.Wunsch.”Comparative study of stock trend prediction using time delay, recurrent and probabilistic neural networks." Neural Networks,IEEE Transactions on 9.6 (19981: 145 6-1470.

[7] Christopher Olah, Understanding Long Short Term MemoryNetworks, August 27,2015.

[8]謝家泉,谢伟梁,房地产上市公司财务综合评价研究[J].金融经济,2013(2):165-166.

[通联编辑:唐一东】