【预测模型】基于BP神经网络预测股票matlab代码

1 简介

BP神经网络模型是目前应用最为广泛神经网络之一。它的本质是通过对历史数据的学习找出数据变化趋势之间的非线性关系,并通过输出量与预期值之间的误差不断调整网络中各个单元的权重,使整个网络的误差最小。因此,为达到较好的预测精度,需要对网络预测模型自身的结构进行确定。

1)网络层数的设计。本文需要构建的预测模型,主要是用于研究股指期货在短时间内收盘价格的走势。由于我国股指期货市场存在的时间比较短,历史数据有限。在这种情况下,不需选择增加网络层数的办法而是选择增加隐含层神经元节点的数目来提高输出结果的精度。因此,本文选用单一隐层的 BP神经网络模型。

2)输入层神经节点的设计。在单因素预测中仅使用股指期货每日收盘价格作为原始数据。选择5d(一周的交易天数)作为预测的分析周期,即用5d的历史交易收盘价格数据作为预测依据,依次将顺序5d的数据作为 BP神经网络的一个输入数值,其后一天的数据作为网络数据的目标数据,因此,将输入层神经元节点数目设为5;在多因素预测模型中,使用合约的收盘价、成交量、OBV 指标、WR1指标、沪深300指数收盘价作为输入向量,输入向量共有5个,因此,输入层神经元节点数目也为5。

3)传递函数和学习函数的设计。本文所设计的模型均采用了相同的隐含层传递函数tansig、输出层传递函数logsig和学习函数learngdm。

4)性能函数的确定。网络误差能直观的反映预测效果的好坏程度,是预测精度的具体反映。本文在构建 BP神经网络模型时选择均方误差来确定网络的误差情况。

5)隐含层神经节点的设计。在模型中其它参数值保持不变的情况下,本文通过调整隐含层神经节点的数目进行重复实验,通过对比输出误差,确定最佳隐含层神经元节点的数目。对于单因素 BP神经网络,当隐含层神经元节点的数目为24时,BP神经网络的均方误差最小,即对函数的逼近效果最好,此时的均方误差为1.1609;对于多因素 BP神经网络,隐含层神经元节点数目为5时,BP神经网络的均方误差达到最小,最小值为0.0126。根据以上分析,单因素 BP神经网络预测模型的结构为:单一隐含层和单一输出层;输入层神经节点数目为5 ;隐含层神经节点数目为24;输出层神经节点数目为1;隐含层传递函数、输出层传递函数、学习函数分别为tansig、logsig和learngdm;性能函数为 mse。多因素 BP神经网络预测模型的隐含层神经元节点数目为5,模型的其它属性与单因素 BP神经网络模型一致。

2 部分代码

clear all

clc

clf

%采用三层BP网络结构

%输入层神经元数为5,隐含层神经元数为3,输出层神经元数为1

%最大迭代次数

maxcishu=5000;

%e为计算输出和样本实际输出差

%在内存中开辟maxcishu个存储空间

e=zeros(maxcishu,1);

% 输入数据维度5,输入节点数5

% maxp当日最高价序列

% minp当日最低价序列

% sp当日开盘价

% ep当日收盘价

% tnum当日成交量

% 调用数据

%shuju=xlsread('dm.xlsx', 'B1:K151');

shuju=importdata('BP_ZXF.xlsx');

sp=shuju.data(:,1)';

maxp=shuju.data(:,2)';

minp=shuju.data(:,3)';

tnum=shuju.data(:,10)';

ep=shuju.data(:,4)';

%将数据集按照2:1分为训练样本集,和测试样本集

jishu=length(ep);

jishu=ceil(jishu/3*2) ;

%测试样本集是2/3处到最后一个

spt=sp(jishu+1:end);

maxpt=maxp(jishu+1:end);

minpt=minp(jishu+1:end);

tnumt=tnum(jishu+1:end);

ept=ep(jishu+1:end);

%训练样本集

sp=sp(1:jishu);

maxp=maxp(1:jishu);

minp=minp(1:jishu);

tnum=tnum(1:jishu);

ep=ep(1:jishu);

%记录下每组的最大值最小值,为训练样本集的归一化准备

maxp_max=max(maxp);

maxp_min=min(maxp);

minp_max=max(minp);

minp_min=min(minp);

ep_max=max(ep);

ep_min=min(ep);

sp_max=max(sp);

sp_min=min(sp);

tnum_max=max(tnum);

tnum_min=min(tnum);

% 目标数据为次日的收盘价,相当于把当日收盘价时间序列向前挪动一个单位

goalp=ep(2:jishu);

%数据归一化,将所有数据归一化到(0 1)

guiyi=@(A)((A-min(A))/(max(A)-min(A)));

maxp=guiyi(maxp);

minp=guiyi(minp);

sp=guiyi(sp);

ep=guiyi(ep);

tnum=guiyi(tnum);

% 后面的目标数据goalp个数是ep向前移动一位得到,所以最后一组的目标数据缺失

% 所以,要把除了目标数据goalp以外的所有数据序列删除最后一个

maxp=maxp(1:jishu-1);

minp=minp(1:jishu-1);

sp=sp(1:jishu-1);

ep=ep(1:jishu-1);

tnum=tnum(1:jishu-1);

%需要循环学习次数loopn,即训练样本的个数

loopn=length(maxp);

%为了方便表示将5个行向量放到一个5*loopn的矩阵中simp中,每一列是一个样本向量

simp=[maxp;minp;sp;ep;tnum];

%显示训练好的权值

W1

W2

于处理

simpt=[maxpt;minpt;spt;ept;tnumt];

%因为是用当前的数据预测下一天的,所以检验样本第一天的收盘价和预测的最后一天的收盘价因为没有比对值而舍弃

for i=1:1:length(maxpt)-1

    for j=1:1:bn

        bx(j)=W1(j,:)*simpt(:,i);

        bxe(j)=jihuo(bx(j));

    end

    

    %输出预测序列

    outt(i)=W2*bxe;

end

%预测输出和实际对比散点图

figure(3)

hold on

plot(outt,'rp')

plot(eptduibi,'bo')

title('测试样本集预测输出和实际对比')

%计算全局误差

disp('测试样本集误差')

disp(1/length(eptduibi)*0.5*sum((eptduibi-outt).^2))

3 仿真结果

4 参考文献

[1]童飞. 基于BP神经网络的水上交通事故预测及MATLAB实现. (Doctoral dissertation, 武汉理工大学).​

 

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值