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

说明:刚学习,试着做一做,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('开盘指数')

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 上一章“乌鸦嘴,你害死了大哥,”我一边朝父亲怒吼,一边高速冲向母亲,母亲感觉我的气息,略作停顿微微喘息,我并没有停...
    一路鸣鸿阅读 489评论 0 0
  • 公司里总有一些人经常闲着无事可干,领导走过去询问原因,他就说:“您安排的事情做完了,没事啦。”这样的人每个公司都存...
    ElliotJu阅读 241评论 0 0
  • 有一种感觉,每天无论你打开什么资讯平台,满屏的“小目标”首富,各路“大佬”“大咖”,最起码也是一串后缀,无数个斜杠...
    职心眼儿阅读 1,306评论 0 20
  • 我叫苏虞,对没错就是上一章里面的狼狈至极的女孩子。 在经过了巨大的恐惧和不安疑虑后,我才猛然意识到自己的身体并不能...
    苏虞阅读 284评论 0 0