BP神经网络预测股指走势

神经网络训练过程

BP神经网络预测股指走势_第1张图片

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

BP神经网络预测股指走势_第2张图片

代码如下

% 神经网络预测股指走势
% Written by Phillip Wan
% Email:[email protected]

%% 准备工作
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('最大回撤');


你可能感兴趣的:(matlab量化投资)