matlab在股票中的应用,主成分BP神经网络在股票中的应用

%主成分神经网络

%%%%%%%%%%%%%%%%%%%%得到数据集X,X每行为一个样本,每一列为一个特征%%%%%%%%%%%%

clc

clear;

num=xlsread('stock.xls');       %此处用xlsread函数来阅读excel文件

[n,m]=size(num);

X0=num(n:-1:1,:);               %excel表格中的数据是时间上从大到小排列的,此处把他修正为从小到大排列

Time=(1:n)';

figure('name','开盘与收盘价格随时间的变化情况','numbertitle','off')

plot(Time,X0(:,1),Time,X0(:,2),'linewidth',1.5);

grid on;

h=legend('开盘价','收盘价');     %标注

set(h,'location','SouthEast');

title('开盘与收盘价格变化');

xlabel('时间序号');ylabel('开盘收盘点位');

set(gca);                       %可不要

figure(2)

[AX,H1,H2]=plotyy(Time,X0(:,3),Time,X0(:,4),'plot');

grid on;

set(get(AX(1),'Ylabel'),'string','涨跌额')

set(get(AX(2),'Ylabel'),'string','涨跌幅')

title('涨跌额与涨跌幅随时间的变化');

xlabel('时间变化');

figure(3)

plot(Time,X0(:,5),Time,X0(:,6),'linewidth',1.5);

grid on;

h=legend('最高价','最低价');

set(h,'location','SouthEast');

title('最高价与最低价与时间的变化');

xlabel('时间序号');ylabel('点位');

set(gca);

figure(4)

[AX,H1,H2]=plotyy(Time,X0(:,7),Time,X0(:,8),'plot');

grid on;

set(get(AX(1),'Ylabel'),'string','成交量')

set(get(AX(2),'Ylabel'),'string','成交金额')

title('成交量与成交金额随时间的变化');

xlabel('时间变化');

%%%%%%%%%%%%%%%%%利用主成分分析法对X0(:,2)~X0(:,9)进行主成分分析,得到y1和y2%%%%%%%%%%%%

Time0=1:150;             %用前150个样本进行训练,后50个样本用来做预测

nt=length(Time0);

StdX0=std(X0(Time0,:));  %按列求标准差,得到标准样本集

MeanX0=mean(X0(Time0,:));%求每列的平均值

X=(X0(Time0,:)-ones(nt,1)*MeanX0)./(ones(nt,1)*StdX0);  %ones(nt,1)*MeanX0是(150,1)*(1,9),同理ones(nt,1)*StdX0

R=cov(X);                %求标准样本集的特征协方差矩阵

[A,L]=eig(R);            %计算R的全部特征值与特征向量,A为特征向量,L为特征值矩阵

Lambda=diag(L);          %提取矩阵对角线

[Lambda,Num1]=sort(Lambda,'descend');    %sort排序函数,此处是把Lambda按descend降序排列

A=A(:,Num1);

Y=X*A;                   %得到方差由大至小排序的主成分,方差的大小即为特征值

cumEnergy=cumsum(Lambda);%如果A是一个向量,cumsum(A)返回一个向量,该向量中第m行的元素是A中第1行到第m行的所有元素累加和

Energy=cumEnergy(m);

nE=find(cumEnergy/Energy>0.85,1);       %计算超过0.85的方差累计序号

%%[A,Y]=princomp(X);     %不用上面代码用Matlab自带的主成分分析函数princomp也能得到

%%%%%%%%%%%%%%%%%%%%%利用神经网络进行训练%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Ychoose=X*A(:,1:nE);

P=Ychoose(Time0,:)';

T=[X(Time0(2:end),4)',(X0(nt,4)-MeanX0(4))/StdX0(4)];

net=newff(minmax(P),[nE,20,1],{'tansig','tansig','tansig'},...

'trainlm','learngdm','msereg');

net=init(net);

net.performFcn='sse';                     %设置性能函数 sse为和方差

net.trainParam.goal=0.01;                 %训练目标,默认为0

net.trainParam.show=20;                   %两次显示之间的训练次数

net.trainParam.epochs=50000;              %神经网络最大训练次数

net.trainParam.mc=0.95;                   %神经网络的动量因子

[net,tr]=train(net,P,T);                  %设置好训练参数后对神经网络进行训练

你可能感兴趣的:(matlab在股票中的应用)