基于Bp神经网络的股
票预测
IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】
基于神经网络的股票预测
【摘要】:
股票分析和预测是一个复杂的研究领域,本论文将股票技术分析理论与人工神经网络相结合,针对股票市场这一非线性系统,运用BP神经网络,研究基于历史数据分析的股票预测模型,同时,对单只股票短期收盘价格的预测进行深入的理论分析和实证研究。本文探讨了BP神经网络的模型与结构、BP算法的学习规则、权值和阈值等,构建了基于BP神经网络的股票短期预测模型,研究了神经网络的模式、泛化能力等问题。并且,利用搭建起的BP神经网络预测模型,采用多输入单输出、单隐含层的系统,用前五天的价格来预测第六天的价格。对于网络的训练,选用学习率可变的动量BP算法,同时,对网络结构进行了隐含层节点的优化,多次尝试,确定最为合理、可行的隐含层节点数,从而有效地解决了神经网络隐含层节点的选取问题。 【abstract]
,,makingin-depththeoreticalanalysisandempiricalstudiesontheshort-termclosingpriceforecastsofsinglestock.
Secondly,makingresearchonthemodelandstructureofBPneuralnetwork, learningrules,weightsofBPalgorithmandsoon,buildingastockshort-termforecastingmodelbasedontheBPneuralnetwork,,usingsystemofmultiple-inputsingle-outputandsinglehiddenlayer,,. 【关键词】BP神经网络股票预测分析
1.引言
股票市场是一个不稳定的非线性动态变化的复杂系统,股价的变动受众多因素的影响。影响股价的因素可简单地分为两类,一类是公司基本面的因素,另一类是股票技术面的因
素,虽然股票的价值是公司未来现金流的折现,由公司的基本面所决定,但是由于公司基本面的数据更新时间慢,且很多时候并不能客观反映公司的实际状况,采用适当数学模型就能在一定程度上实现对股价的预测。BP神经网络是一种模拟人脑神经网络结构从而具有一定的预测功能的数学模型,由于其具有很强的自学习能力自适应能力以及容错能力等优点,使它成为一种比较适合股票预测的方法。本文就采用此方法对股价趋势进行了分析。MATLAB所搭配的NeuralcNetworkToolbox,将神经网络领域研究的成果完整地覆盖,它以人工神经网络理论为基础,用MATLAB语言构造出典型神经网络的激活函数。另外,根据各种典型的修正网络权值的规则,加上网络的训练过程,用MATLAB编写出网络设计与训练的子程序,网络的设计者则可以根据需要去调用工具箱中有关神经网络的设计训练程序,使自己能够从繁琐的编程中解脱出来,集中精力去思考问题和解决问题,从而提高解题效率。
2. BP神经网络算法、特点 神经网络算法
BP网络的产生归功于BP算法的获得。BP算法属于δ算法,是一种有监督式的学习算法。其主要思想为:对于q个输入学习样本P1,P2……Pq,已知与其对应的输出样本为:T1,T2……Tq。学习的目的是用网络的实际输出A1,A2……Aq与目标矢量T1,T2……Tq之间的误差来修改其权值,使Ai(i=1,2……q)与期望的T尽可能地接近,即使网络输出层的误差平方和达到最小。它是通过连续不断地在相对于误差函数斜率下降的方向上,计算网络权值和偏差的变化而逐渐逼近目标的。每一次权值和偏差的变化都与网络误差的影响成正比,并以反向传播的方式传递到每一层的。BP算法由两部分组成,分别为信息的正向传递与误差的反向传播。在正向传播过程中,输入信息从输入经隐含层逐层计算传向输出层,每一层神经元的状态只影响下一层神经元的状态,如果在输出层没有得到期望的输出,则计
算输出层的误差变化值,然后转向反向传播;通过网络将误差信号沿原来的连接通路反传回来,修改各层神经元的权值,直至达到期望目标,误差信号趋向最小。其具体的实现步骤如图所示。
神经网络在预测中的适用性
基于神经网络本身的特点与优越性,本文选择BP神经网络用于股票预测应用研究。第一,具有自学习功能。自学习功能对于模型预测有特别重要的意义。未来的人工神经网络计算机将提供经济预测、市场预测、信用预测,其应用前途是很远大的。第二,容错能力强。网络中少量单元的局部缺损不会造成网络的瘫痪,也不会影响全局,它反映了神经网络的鲁棒性。神经网络带有高度并行处理信息的机制且具有高速的自学习、自适应能力,内部所包含的大量可调参数使得系统的灵活性更强。因此,神经网络很好的鲁棒性可以提高股票预测模型的适应性与通用性。第三,具有高速寻找优化解的能力。寻找一个复杂问题的优化解,往往需要很大的计算量,一个针对某问题而设计的神经网络,可以发挥计算机的高速运算能力,能很快找到优化解。这对提高模型的运算效率很有帮助。第四,可以充分逼近任意复杂的非线性关系。股票分析中的各个指标之间的关系并不十分明确,大多为非线性的。而神经网络能够逼近任意复杂的非线性关系,这就决定了神经网络的预测精度比其他的预测方法要高。而对股票预测来讲,预测精度无疑是非常重要的问题。第五,具有在新环境下的泛化能力,能不断接受新样本、新经验并不断调整模型,自适应能力强,具有动态特性。由于股票分析具有分行业、分阶段的特点,其评估结果的不确定性非常大。这就意味着需要针对不同的股票设立相应的预测模型,神经网络的这一特性正好满足这样的需求。然而BP神经网络也不是没有缺点。一是其工作的随机性较强,即使是同样的训练样本,相同的网络参数,多次运行生成的神经网络模型预测结果也有差别。 因此要得到一个较好的神经网络结构,需要人为地去调试,非常耗费人力与时间,因此应用受到了限制。二是BP算法本身存在一定的缺陷。
神经网络模型构建的方法
建立BP神经网络模型的具体步骤:首先要分析问题的性质及核心,
然后有针对性地建立网络模型,最后通过网络预测分析,调整参数,优化网络模型。具体过程如图所示:
3. 股票预测BP网络模型的建立
数据的采集和预处理
本文选择了中国银行(601988)2013/11/1-2014/5/15的收盘价和中国汽研(601965)2013/4/1-2014/5/12的收盘价作数据采集。
根据模型建立的需要,BP神经网络要求样本集合理区间为[0,1]或[-1,1],所以要对样本集进行归一化处理。
'xk归一化公式为:
xkxminxmaxxminMatlab中归一化处理数据可以采用premnmx,postmnmx,
tramnmx这3个函数。本文用了premnmx归一化函数和postmnmx反归一化函数。 premnmx
语法:[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t) 参数:
pn:p矩阵按行归一化后的矩阵
minp,maxp:p矩阵每一行的最小值,最大值 tn:t矩阵按行归一化后的矩阵
mint,maxt:t矩阵每一行的最小值,最大值
作用:将矩阵p,t归一化到[-1,1],主要用于归一化处理训练数据集。 postmnmx
语法:[p,t]=postmnmx(pn,minp,maxp,tn,mint,maxt)
参数:minp,maxp:premnmx函数计算的p矩阵每行的最小、最大值mint,maxt:premnmx函数计算的t矩阵每行的最小值,最大值
作用:将矩阵pn,tn映射回归一化处理前的范围。postmnmx函数主要用于将神经网络的输出结果映射回归一化前的数据范围。
训练网络的设计
在有合理的结构和恰当的权值条件下,三层前馈网络可以逼近任意的连续函数,这样,就提供了一个设计BP神经网络的基本原则。较少的隐含层,可以实现样本空间的超平面划分,选择两层BP网络就可以实现有效的预测了。本文将采用单隐含层的网络设计,分为单隐含层和输出层两个网络层次,如图所示。
本文将连续五天的价格作为一组输入,将第六天的价格作为输出目标。既用前五天的价格来预测第六天的价格。所以输入层神经元数目是5。输出层的节点数取决于两个方面:输出数据类型和表示该类型所需的数据大小;同时,根据经典的道氏理论,股票价量分析中最重要的指标就是收盘价。本文所建的股票预测模型,就是针对单只股票的走势进行预测,所以,将股票的收盘价作为该预测模型的唯一输出向量,这样,网络输出层的神经元数目即为1。
BP网络隐含层节点数的多少和BP网络预测精度之间有很大相关性,节点数太少,神经网络的训练能力就会变弱,无法完成精确预测。节点数太多,神经网络训练时间变长且网络可能出现过度拟合现象。所以选择合适的节点数才能使BP网络的性能得到最大发挥,但目前还没有统一的标准来确定隐含层的节点数,所以本文经过多次试验多次比较最终确定了隐含层节点数为12。
传递函数是BP网络的重要组成部分,必须是连续可微的;BP网络通常采用S型的对数或正切函数。本预测模型采集到的原始数据,经过归一化处理后输入、输出向量均在区间[-
1,1]范围内,符合S型的对数或正切函数的取值区间。因此,隐含层传递函数选择tansig,输出层传递函数选择purelin,训练函数采用traingdm。 训练参数设为: =50;限时训练迭代过程 =;学习率 =;附加动量因子 =20000;最大训练次数 =1e-3;训练要求精度
训练过程如图:
关于性能函数的设计,本文采用典型的前项反馈网络误差性能函数为均方误差函数mse:
4. 股票预测分析
中国银行预测分析
在MATLABr2014a中用函数xlsread导入已经下载好的中国银行(601988)2013/11/1-2014/5/15的收盘价作为输入样本,进行BP网络训练。
网络结构:
BP神经网络的仿真结果:
图中红色线为预测曲线,蓝色线为实际曲线,可以看出模拟出的曲线大致上与实际曲线相同,但有些地方明显误差偏大,很可能是由于训练样本的数目过少和训练次数不够而导致。
此图为实际值与预测值的误差曲线,可以明显看出误差确实比较大,所以此图预测结果不尽人意。
误差训练情况:
梯度: 回归曲线: 股票分析:
方法一:移动平均线与BP曲线相结合
从上图可以看出,五日平均线从上而下穿过下降趋势的十日线,二十日线和六十日线,表明标号1这个点在这个时候支撑线被向下突破,此时为死亡交叉点,表示股价短期将继续下落,十日线向下突破二十日线,说明中期内也将继续下跌,二十日线也向下突破六十日线,长期内也将下降,行情看跌,死亡交叉预示着空头市场来临,而实际曲线也验证了预测结果。
标号二为上升中的五日线由下而上穿过上升的十日线,形成黄金交叉,这个时候压力线被向上突破,表示股价短期内将继续上涨,行情看好,而实际曲线也验证了预测,同时十日线向上突破上升趋势的二十日线,说明中期内该股将会呈上升趋势。
标号三为下降趋势的五日线向下跌破十日线,说明短期内该股会下降,而旁边下降趋势十日线也向下跌破了二十日线,说明中期内该股呈下降趋势。
标号四为上升趋势的五日线向上突破十日线,表明短期内该股会上升,上升趋势的十日线也向上突破二十日线,说明该股中期内也将呈上升趋势,向上趋势的二十日线也向上突破六十日线,形成黄金交叉,表明长期内该股呈上升趋势,结合BP曲线对下一日的预测,可以提高投资决策的准确性。
标号五为下降趋势的五日线突破了十日线,表明短期内该股会有下降趋势。 标号六为上升趋势的五日线向上突破十日线,说明短期内该股将呈上升趋势。
方法二:
指数平滑异同平均线(MACD)分析法:
MACD称为指数平滑异同平均线,是从双移动平均线发展而来的,由快的移动平均线减去慢的移动平均线,MACD的意义和双移动平均线基本相同,但阅读起来更方便。当MACD从负数转向正数,是买的信号。当MACD从正数转向负数,是卖的信号。当MACD以大角度变化,表示快的移动平均线和慢的移动平均线的差距非常迅速的拉开,代表了一个市场大趋势的转变。
MACD线从正数转向负数时,股票即将有下降趋势,是卖出的信号,从负数转向正数的时候,股票有即将有上升的趋势,是买入的信号。
综合所述,本次股票预测还算是成功,预测结果往往令人满意。
MATLAB程序:
clc; clear; closeall;
P=xlsread('中国银行2'); T=xlsread('中国银行T2'); Hn=xlsread('中国银行H2n'); K=xlsread('中国银行五日线'); L=xlsread('中国银行十日线'); M=xlsread('中国银行二十日线'); N=xlsread('中国银行六十日线');
[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T)
net_1=newff(minmax(Pn),[12,1],{'tansig','purelin'},'traingdm') %当前输入层权值和阈值 inputWeights={1,1} inputbias={1}
%当前网络层权值和阈值 layerWeights={2,1} layerbias={2}
%设置训练参数 =50; =; =;
=100000; =1e-3;
%调用TRAINGDM算法训练BP网络 [net_1,tr]=train(net_1,Pn,Tn); %对BP网络进行仿真 A=sim(net_1,Hn); %计算仿真误差
E=Tn-A;
MSE=mse(E);
[A1,T1]=postmnmx(A,min(min(P)),max(max(P)),Tn,mint,maxt) x=1:129; x1=1:131 plot(x,A1,'r'); holdon
plot(x,T1,'b'); holdon
plot(x1,K,'w'); holdon
plot(x1,L,'y'); holdon
plot(x1,M,'m'); holdon
plot(x1,N,'c');
title('中国银行2013/11/1-2014/5/15');
legend('预测','实际','五日线','十日线','二十日线','六十日线',1); figure(2) plot(x,E,'r')
中国汽研预测分析;
在MATLABr2014a中用函数xlsread导入已经下载好的中国汽研(601965)2013/4/1-2014/5/12的收盘价作为输入样本,进行BP网络训练。
网络结构:
BP神经网络的仿真结果:
图中红色曲线为预测曲线,蓝色曲线为实际曲线,从图可以看出,BP曲线近似的模拟出真实曲线,较之前中国银行的预测效果要好,主要原因是中国汽研的训练样本数目提升到256组,并且训练了十万次,误差到了。 误差训练情况: 梯度:
回归曲线: 股票分析:
方法一:移动平均线与BP曲线相结合
从标号一可以看出,下降趋势的五日线突破了下降趋势的十日线,说明短期内该股票将下跌,下降趋势的十日线也同样突破下降趋势的二十日线,表明该股中期内也将下降,投资者此时应谨慎。标号一和标号二之间连续出现几个死亡交叉点,并且BP曲线出现波动,此时投资者应该慎重考虑,切勿急功近利。
标号二表明上升趋势的五日线向上突破十日线,表明短期内该股将上涨,同时上升趋势的十日线也向上突破上升趋势的二十日线,表明中期内该股也呈上升趋势。
标号三可以看出,上升趋势的五日线向上穿过上升趋势的十日线,所以该股短期内将会上升,同样的上升趋势的十日线向上穿过上升趋势的二十日线,说明该股在中期内也将会上升。
标号四可以看出,下降趋势的五日线向下穿过下降趋势的十日线,表明短期内该股将会上升,但是标号四与标号五之间连续出现几个死亡交叉点,并且BP曲线出现波动,此时投资者应该慎重考虑,切勿急功近利。
标号五为下降趋势的五日线,二十日线,分别向下穿过下降趋势的十日线,六十日线,表明该股短期内,长期内将会下降,实际与预测的结果大致相同。
方法二:
指数平滑异同平均线(MACD)分析法:
MACD称为指数平滑异同平均线,是从双移动平均线发展而来的,由快的移动平均线减去慢的移动平均线,MACD的意义和双移动平均线基本相同,但阅读起来更方便。当MACD从负数转向正数,是买的信号。当MACD从正数转向负数,是卖的信号。当MACD以大角度变化,表示快的移动平均线和慢的移动平均线的差距非常迅速的拉开,代表了一个市场大趋势的转变。
MACD线从正数转向负数时,股票即将有下降趋势,是卖出的信号,从负数转向正数的时候,股票有即将有上升的趋势,是买入的信号。
综合所述,本次股票预测还算是成功,预测结果往往令人满意。
MATLAB程序:
clc; clear; closeall;
P=xlsread('6'); T=xlsread('7'); H=xlsread('8'); H1=xlsread('H1');
K=xlsread('中国汽研五日线'); L=xlsread('中国汽研十日线'); M=xlsread('中国汽研二十日线'); N=xlsread('中国汽研六十日线');
[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T)
net_1=newff(minmax(Pn),[12,1],{'tansig','purelin'},'traingdm') %当前输入层权值和阈值 inputWeights={1,1} inputbias={1}
%当前网络层权值和阈值
layerWeights={2,1} layerbias={2} %设置训练参数 =50; =; =;
=100000; =1e-3;
%调用TRAINGDM算法训练BP网络 [net_1,tr]=train(net_1,Pn,Tn); %对BP网络进行仿真
A=sim(net_1,H); E=Tn-A;
MSE=mse(E);
[A1,T1]=postmnmx(A,min(minp),max(maxp),Tn,mint,maxt) x=1:256; plot(x,A1,'r'); holdon
plot(x,T1,'b') holdon
plot(x,K,'w'); holdon
plot(x,L,'y'); holdon
plot(x,M,'m'); holdon
plot(x,N,'c');
title('中国汽研2013/4/1-2014/5/12');
legend('预测','实际','五日线','十日线','二十日线','六十日线',1) figure(2) plot(x,E,'r');
5.结论和前景
股票市场自诞生以来,一直吸引着众多投资者和学者的目光,对股票价格走势的预测也始终是他们探寻的目标。然而影响股票价格的因素非常多,这样,使得股票的预测成为一项异常困难的工作。尽管如此,
这种准确预测从而获得超额收益的机会依然吸引着一代又一代的学者和投资者进行研究和实践。本文经过对两支股票数据资料的统计分析,建立了一个股票预测模型。由于现有研究条件的制约,该预测模型还有许多不足之处,还需要在实践中不断地改进和完善。 首先,模型输入节点数目需进一步完善。由于数据资料的局限性,本文只选择了5个向量作为输入节点。但是,一个完善的预测模型需要多方面的考虑与设计,精准对度要比较高,这就需要更加完善的输入向量设计。其次,隐含层节点数的设计需进一步完善。由于神经网络运行的时间和效率受到计算机硬件的影响,本文只在有限的条件下进行了隐含层节点数的选择和优化。要进一步完善隐含层节点数的设计,就需要更加先进的计算机硬件支持,来实现精准的预测。最后,模型算法仍待改进。
6.结束语
本文使用的BP神经网络算法有一点的优越性,但同时也具备一些固有的缺陷,而且预测精度也没有达到更好的效果。因此,可以尝试使用RBF和遗传算法等其他方式建立组合模型,提高模型预测的准确性和普遍适应性。
【参考文献】
[1]刘琳基于BP神经网络的股票短期预测应用研究对外经济贸易大学。 [2]许兴军颜钢锋基于BP神经网络的股价趋势分析浙江大学电气自动化研究所 [3]陈东BP神经网络在证券指数预测中的的研究与应用。
[4]钟珞、饶文碧、邹承明,人工神经网络及其融合应用技术,科学出版社
[5]丛爽,面向MATLAB工具箱的神经网络理论与应用,—合肥:中国科学技术大学出版社, [6]张德丰,MATLAB神经网络应用设计,—北京:机械工业出版社,
因篇幅问题不能全部显示,请点此查看更多更全内容