BP神经网络预测股指走势

来源:互联网 发布:访客网络 编辑:程序博客网 时间:2024/04/30 02:47

神经网络训练过程


预测后通过交易的模拟曲线和盈利状况


代码如下

% 神经网络预测股指走势% Written by Phillip Wan% Email:hackerwanhappy@foxmail.com%% 准备工作tic;clear;clc;close all;format compact;w=windmatlab;%% 导入数据[w_wsi_data,w_wsi_codes,w_wsi_fields,w_wsi_times,w_wsi_errorid,w_wsi_reqid]=w.wsi('IF00.CFE','close,open,high,low,volume','2013-02-06 09:00:00','2013-04-06 16:09:58','PriceAdj=F');%% 处理数据转置close0=w_wsi_data(:,1)';open0=w_wsi_data(:,2)';high0=w_wsi_data(:,3)';low0=w_wsi_data(:,4)';vol0=w_wsi_data(:,5)';%% 初始化变量num=1;   %初始项endNum=300; %后endNum项不适用作为测试no_use=0; %最后若干项不使用% 输入项v0=[close0(num:end-endNum);open0(num:end-endNum);high0(num:end-endNum);low0(num:end-endNum);vol0(num:end-endNum)];% 输出项p0=[close0(num+1:end-endNum+1)];% 输入输出归一化[v,vps]=mapminmax(v0);[p,pps]=mapminmax(p0);%% 建立网络net=feedforwardnet([4,3]);% 训练参数net.trainParam.epochs=9000;net.trainParam.goal=0.0002;%% 开始训练[net,tr]=train(net,v,p);%% 存储训练好的神经网络save net01 net;load('net01.mat');%% 使用网络v_test0=[close0(end-endNum:end-no_use-1);open0(end-endNum:end-no_use-1);high0(end-endNum:end-no_use-1);low0(end-endNum:end-no_use-1);vol0(end-endNum:end-no_use-1)];p_test=[close0(end-endNum+1:end-no_use)]; %实际结果close_pre=[close0(end-endNum:end-no_use-1)]; %之前的收盘价% 测试数据归一化[v_test,v_testps]=mapminmax('apply',v_test0,vps);result0=sim(net,v_test);% 测试结果,反归一化result=mapminmax('reverse',result0,pps);%% 误差error=result-p_test;%% 详细盈亏lg=length(close_pre);windata=zeros(1,lg);windata(1,1)=0;winnum=0;for i=2:lg    win=0; %盈亏钱数    if(result(1,i)>=close_pre(1,i-1))        win=p_test(1,i)-close_pre(1,i-1);    else        win=close_pre(1,i-1)-p_test(1,i);    end        if(win>=0)        winnum=winnum+1;    end    windata(1,i)=win+windata(1,i-1);end%c 成功率win_rate=winnum/lg%% 计算回撤backratio=zeros(1,lg);for m=1:lg    c=max(windata(1:m));    backratio(1,m)=(windata(1,m)-c)/c;end%% 作图figure;subplot(3,1,1);plot(p_test);hold on; grid on;plot(result,'g');grid on;legend('IF00','神经网络');title('神经网络模拟曲线')subplot(3,1,2);plot(windata);grid on;title('资金盈利');subplot(3,1,3);plot(backratio);grid on;title('最大回撤');