美文网首页
基于BP神经网络的深证综指开盘指数预测

基于BP神经网络的深证综指开盘指数预测

作者: 互联网金融小马车 | 来源:发表于2017-05-11 15:56 被阅读0次

    说明:刚学习,试着做一做,2016.10月

    摘要:本文利用深证综指1995年12月19日到2016年12月14日的开盘价、收盘价、最高价、最低价、成交量五组数据建立三层的BP神经网络模型,利用matlab进行拟合、预测。选取前4500条数据对模型进行学习和训练,然后用后587条的数据对模型进行预测,发现预测结果的误差比较大,考虑到中国股市由于诸多因素具有较大的偏差性,考虑选取短期数据预测,即从2016年开始,共232条来进行建模分析,最后发现短期预测的效果比较好。结果表明,BP神经网络模型在短期内具有良好的泛化能力,在深证综指的预测方面有很好的预测能力,有很强的现实意义。

    关键词:BP神经网络;深证综指;开盘指数;预测

    引言

    证券市场作为现代经济重要的组成部分,如何能够准确地分析和预测市场走势一直受到人们的关注。建立一个准确度比较高的股市预测模型对于金融投资及宏观经济调控等都具有重大的实用价值。随着证券市场混沌和分形理论的逐步确立,人们开始利用神经网络对证券市场的变动加以预测。神经网络是一种重要的人工智能技术,在应用上已经迅速扩展到包括金融时序分析在内的许多重要领域中。

    近年来,在利用神经网络预测证券指数方面,一些人已经做了不少有益的尝试,取得了一些成果。其中,上海工程技术大学的郝勇在为上海市社会科学基金项目《运用神经网

    络技术研究上海证券股票价格分类指数的波动规律》所做的研究中,使用了BP的原型算法对上证指数的走势做了多个时间跨度为单日的预测,得到了平均相对误差为1.8%-2.5%的结果。

    厦门大学的雷震在2002年,用改进过的BP神经网络对上证指数的走势做了短程预测,在预测时间跨度为单日,连续预测次数为10次的条件下,得到结果为相对误差为2.61%,预测数据与真实数据的相关性为0.56;其模型在预测时间跨度为两日,连续短程预测10天的条件下,得到的相对误差为4.87%,但是预测数据与真实指数之间的相关性则迅速劣化到只有0.13。

    天津大学的马军海等人则使用了算法更为复杂的小波神经网络算法对多只上海交易所上市股票做了时间跨度从1到3日的预测。其中,当预测时间跨度为1日时,得到的相对误差不超过2.5%;当预测的时间跨度提高到3日时,相对误差则迅速放大到10%以上。

    从上文所提到的相关研究成果来看,使用神经网络进行时序分析的方法已经被不少人所认可。目前,利用神经网络对股票指数预测所涉及的算法主要有BP算法、RBF算法、小波算法等。而目前关于股票指数的研究依然有很多经典算法包括遗传算法,ARCH,GARCH模型,支持向量机,时间序列和多元回归方法,马尔科夫链等。这些方法的预测有一定的精度,但是仅仅局限于线性问题分析,并不能很好地解决股票市场中的非线性问题。本文基于以上考虑,采用BP神经网络这一非线性模型,来对股票市场时间序列进行预测,以达到很好的预测效果。

    一,BP神经网络的基本原理

    (一),基本概念

    BP神经网络无须输入函数公式,可以自动根据输入输出数据拟合进行学习记忆,所以其可以学习一些看上去没什么联系的数据,得出一些类似于指标的数据的分类与预测。BP神经网络一般具有三层或三层以上的神经网络,其是误差反向传播神经网络的简称,它由输入层,隐含层,输出层构成。BP神经网络类似于一个只有输入输出但是看不到中间的运行计算环节的黑箱。虽然其中间过程的无法看到,但是BP神经网络中间的隐含层根据数据有着一定学习规则可以存储利用,所以可以训练这种网络,让网络可以拥有一定的预测能力。神经网络的研究应用相当广泛,可以使用神经网络对某些指标(如空气质量、水质量、个人业绩等)进行“有限”的分类、预测、评价等。所以针对股票指数这项指标,可以利用神经网络来进行预测。

    (二),BP神经网络

    BP模型是一种可以自我学习的网络,其本质上就是希望在学习的过程之中使得误差平方和最小。BP神经网络会在学习的过程中不断纠错,首先根据输入层指标正向计算,然后利用梯度下降的方法反向传播输出的误差来调整权值,使得误差平方和达到最小。其学习的两个过程为:

    (1)向前计算:

    隐层节点的输出为:

    其中,是输出结点中对应于输入指标的权值,为阀值

    输出层节点的输出为:

    其中,是输出结点M对应于隐含层输出结点的权值。M为输出指标。

    (2)反向传播:

    反向传播是要将每个节点的误差反向从输出层返回到输入层,这样来调整每个节点的权值,使得误差平方和最小。第i个单元节点的输出误差:

    ,总误差为。

    是i节点的期望输出值;是i节点的实际输出值。

    二,数据说明

    (一)数据

    本文选取自1995年12月19日到2016年12月16日深证综指的历史数据,共5087条。

    从中选取4500条作为训练数据,而剩余587条作为预测数据,用来与模型预测的结果进行比较,从而判断模型的预测效果。

    而发现误差较大之后,本文则选取从2016年开始的数据,共232条来进行建模分析,其中前200条为训练数据,后32条为预测数据:

    三,模型建立

    (一)指标设计

    BP神经网络模型可以对某些指标进行“有限”的分类、预测、评价,本研究也以BP神经网络模型为基础框架。相关文献以及实际经济问题的分析得出:开盘指数会受到最高价格、最低价格、收盘指数、成交量这几个重要指标的影响。根据BP神经网络本研究设计2个一级指标变量:指数因素、成交量因素。定义如表1:

    表1一级指标定义

    一级指标

    定义

    指数因素

    影响开盘指数的相关价格。

    成交量因素

    成交量。

    为了建立BP神经网络,必须设计相对应的指标体系如表2:

    表2指标体系

    输出指标

    一级指标

    二级指标

    下一日开盘价

    指数因素

    开盘价,最高价,最低价,收盘价

    成交量因素

    成交量

    (二)层数设计

    神经网络模型的建立是一个比较简单的过程,首先必须设定每一层神经节点的个数。确定好个数之后,需要根据情况查看分析修正BP神经网络的结构,并且针对神经网络的各个参数进行设定,之后开始运行。

    (1)由于上文之中建立的指标体系中有2个一级指标,5个二级指标,所以输入层的神经元个数5。同时,最后确定的指标为开盘价,所以输出层神经元个数为1。

    (2)由于BP神经网络类似于黑箱,所以中间的计算过程我们不可能知道,所以隐含层的确定存在一定的问题。如果隐含层的神经元个数比较少,那么对于整个的神经网络来说不容易聚敛,如果个数太多的话,对于神经网络的学习具有极大的负担,网络拓扑结构过于复杂,会使计算机的学习速度变慢,同时最后得到的误差的平方和不一定就是最小的误差平方和。所以隐含层神经元个数的确定我们利用经验得出。

    设输入层神经元个数为M,输出层神经元个数为N,隐含层神经元个数为n,那么,为1到10之间的常数。根据经验,多次尝试,本模型中的隐含层神经元个数为11。

    (3)根据上述的分析,得到本文的BP神经网络模型如图:

    输入层5隐含层11输出层1

    ┆┆┆

    (三)模型建立

    综上所述,选用三层结构BP神经网络结构,隐层节点数为11,输出层节点数为1。以1995年12月19日的开盘指数,最高指数,最低指数,收盘指数和成交量作为网络的第一个输入数据,第二日的开盘价为第一个输出数据;隐层的传递函数确定为tansig,输出层神经元的传递函数为purelin,训练函数为traingdx;设定样本学习结束条件为误差精度E为0.001,循环次数为10000次,学习速率初始值设定为0.1,动量因子的初始值设定为0.9。

    四,实证分析

    经过分析,我们建立神经网络模型:输入层为5,隐层神经元个数为11,输出层为1

    经过训练,发现数据的拟合度已经可以达到0.99877,拟合效用已经比较良好,且训练误差已经比较小。

    但利用此模型进行预测,发现:

    预测值与真实值之间的误差较大。而右图预测的误差点大约开始出现在2015年初附近,考虑现实情况,正好是2015年股市的疯狂时刻,大盘齐涨。可以发现,在2015年前与2016年以后,预测的结果都是比较准确的,预测线与实际线基本吻合。

    考虑到中国股市受外界影响较大,并且目前还不规范等原因。预测时,需要舍弃一些由于特定因素存在而导致的极端数据。

    综上所述,我们选择从2016年开始的数据,共232条来进行建模分析,其中前200条为训练数据,后32条为预测数据。修正数据以后的模型:

    输入层为5,隐层神经元个数为11,输出层为1。

    通过神经网络的训练,数据的拟合度已经可以达到0.99539,拟合程度已经比较良好。训练线不断接近理想情况,表现出良好的训练水平。

    利用模型进行预测,可以发现:

    预测结果良好。表明此模型具有良好的现实意义。

    五,结论

    BP神经网络利用变量之间存在的隐性关系进行建模,克服了传统统计方法预测的屏障,有很好的的学习能力、组织能力以及适应能力,其可以在无法判断变量之间存在何种关系的情况下通过类似神经元细胞之间复杂联系的方式来分析变量之间情况,并对未来情况进行预测。本文通过选取1995年12月19日到2016年12月14日的深证综指的数据构建神经网络模型,选取最高价,最低价,开盘价,收盘价,成交量作为输入神经元指标,将第二日的开盘价作为输出指标。构建了的一个三层神经网络,并运用LM算法来对模型进行学习与训练,取前4500个数据为训练样本,从第4501天到5087天作为预测样本对所训练的模型进行检测,发现预测值与真实值之间的拟合效果不是很好,发现与2015年的股市疯涨现象有关。舍弃极端数据,对数据进行修正,选取从2016开始的数据前200个数据为训练样本,后32个作为预测样本对所训练的模型进行检测,发现预测值与真实值之间的误差平均控制在0.001量级上,达到了很好的预测效果,说明本文训练的BP神经网络短期内在深证综指的训练方面的预测能力是非常有效的,具有很强的现实意义。

    代码只是参考,自己以后需要改进:clear

    sz=[2008.8687 2016.2952 2002.6531 2004.0004 18017321364

    2001.3215 2001.3215 1989.1454 1990.3374 15530988592

    1988.7727 2003.6708 1987.1452 2001.6272 17289896781

    2000.3796 2000.8999 1989.1237 1990.8534 17569670361

    1991.9842 1992.7826 1980.6646 1990.2616 19963323006

    1990.3361 1990.3361 1977.5196 1980.9857 19384171022

    1981.1436 1981.1436 1963.1944 1964.1359 18926354291

    1962.5298 1962.5298 1943.7595 1944.2903 17911537234

    1945.1065 1964.5612 1941.7635 1958.2563 18083032944

    1958.1151 1958.6709 1943.2508 1945.5126 16469173542

    1947.0404 1968.6195 1943.6429 1963.0644 18465883317

    1964.3225 1966.8243 1958.4345 1964.7753 16196754225

    1964.7455 1965.3103 1946.9865 1948.9253 18190347763

    1950.319 1956.7713 1947.838 1954.794 18895697415

    1954.6236 1956.3784 1939.6337 1940.8422 17440207380

    1941.7932 1941.7932 1915.3143 1924.2313 15135013608

    1927.1742 1931.1923 1917.9097 1925.9001 14032234451

    1927.5716 1927.5716 1906.8357 1910.2137 12574917637

    1909.7889 1920.0944 1904.6693 1918.7881 9878505110

    1917.3168 1917.3168 1906.6535 1906.6878 10373500827

    1904.0358 1907.0673 1892.3022 1894.2422 11084386301

    1896.4503 1902.1402 1893.8794 1901.5286 12481034793

    1902.1441 1907.0392 1888.0912 1888.0912 13330395500

    1885.7748 1889.2388 1854.6766 1854.6766 12638853423

    1857.4582 1868.5958 1850.6114 1858.9774 11457201672

    1864.5903 1875.6403 1860.5217 1867.9784 11920532501

    1873.0205 1873.0205 1823.5066 1844.5042 14120461722

    1851.4101 1915.0212 1804.532 1914.9477 19327831367

    1921.0021 1953.9279 1918.9707 1951.0011 14584425545

    1951.3137 1973.0582 1949.7482 1966.6593 14691349323

    1968.4292 1992.0823 1968.4292 1985.8597 15135279027

    1989.2899 1999.6872 1988.2005 1993.0648 15856976958

    1994.1528 1995.12   1981.0363 1985.7589 15404848688

    1988.1305 2003.5906 1987.3883 2003.3564 16793520022

    2005.5773 2011.2622 2004.999 2008.3418 17215477811

    2008.7865 2008.7865 1984.3772 1986.4918 17626163154

    1985.954 1985.954 1972.5501 1972.5501 14279956346

    1969.1115 1973.849 1962.4436 1967.5277 13102330955

    1966.2367 1979.4098 1965.1574 1969.0277 12992263282

    1972.3457 1982.9123 1968.6842 1978.4704 13842144626

    ];%第一列为开盘指数,第二列为最高指数,第三列为最低指数,第四列为收盘指数,第五列为成交量

    %提取数据

    [m,n]=size(sz);

    ts=sz(2:m,1);    %将从第二天开始的开盘数作为预测的Y值

    tsx=sz(1:m-1,:)

    %数据预处理,将原始数据进行归一化

    TS=ts';

    TSX=tsx';

    %归一化

    [Pn1,minp1,maxp1]=premnmx(TS);

    [Pn2,minp2,maxp2]=premnmx(TSX);

    rand('state',0);%保证每次仿真的结果都相同

    PR=[-1,1;1,1;-1,1;-1,1;-1,1]%p*2维的一个矩阵,每组输入元素的最大值是1,最小值是-1

    %创建网络

    net=newff(PR,[10,1],{'tansig','purelin'},'traingdx','learngdm','mse')

    net.trainparam.show=50;

    net.trainparam.lr=0.1;

    net.trainparam.mc=0.9;

    net.trainparam.epochs=10000;

    net.trainparam.goals=0.001;

    net=init(net);%初始化网络

    net=train(net,Pn2(:,1:40),Pn1(1:40));%训练网络,Pn2为输入样本矢量集,Pn1为目标矢量集

    %仿真预测

    test=Pn2(:,31:end);%从31个之后为预测(?包含第31个吗)

    Y=sim(net,test);

    %反归一化处理

    P=postmnmx(Y,minp1,maxp1);

    %相对误差

    e=(sz(32:m)-P)./sz(32:m);

    res=norm(e)%求整个网络的误差

    %画图

    figure(1)

    t=32:m

    plot(t',sz(32:m),'-+',t,P,'o')

    xlabel('交易日天数')

    ylabel('开盘指数')

    相关文章

      网友评论

          本文标题:基于BP神经网络的深证综指开盘指数预测

          本文链接:https://www.haomeiwen.com/subject/ggazmttx.html