clr;
load('data7.mat');
%% 倒转数据
CLOSE = CLOSE0';
OPENINTCHG=OPENINTCHG0';
VOL=VOL0'/10;
HIGH = HIGH0';
LOW = LOW0';
PEN = PEN0';
CLOSENEXTT=CLOSENEXT';
%%
num = 1;
endNum = 3;%截止到end-endNum,作为测试
no_use = 0;%最后no_use个不用
v0 = [CLOSE(num:end-endNum);OPENINTCHG(num:end-endNum);VOL(num:end-endNum);HIGH(num:end-endNum);LOW(num:end-endNum);PEN(num:end-endNum)];
% 对应的结算价
p0 = [CLOSENEXTT(num:end-endNum)];
%% 输入输出归一化
[v,vps] = mapminmax(v0);
[p,pps] = mapminmax(p0);
%% 建立网络
net = newff(v,p,[4,3],{'tansig','tansig','purelin'},'traingdm');% 0.00179
%% 训练参数
net.trainParam.epochs = 9000;% 最多训练多少次
net.trainParam.goal = 0.002;% 训练到什么程度才算成功
%% 开始训练
[net,tr] = train(net,v,p);
% &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
%% 存储训练好的神经网络
save net01 net;
load('net01.mat');
%% 使用网络
v_test0=[CLOSE(end-endNum+1:end-no_use);OPENINTCHG(end-endNum+1:end-no_use);VOL(end-endNum+1:end-no_use);HIGH(end-endNum+1:end-no_use);LOW(end-endNum+1:end-no_use);PEN(end-endNum+1:end-no_use)];
p_test = [CLOSENEXTT(end-endNum+1:end-no_use)];%期望的结果
close_pre = [CLOSE(end-endNum+1:end-no_use)];%之前的收盘价
%测试数据归一化
[v_test,v_testps] = mapminmax('apply',v_test0,vps);
result0 = sim(net,v_test);
%测试结果,反归一化
result = mapminmax('reverse',result0,pps);%测试的结果
%% 误差
error=result-p_test;
% 对比之前收盘价,期望收盘价(实际),网络预测的收盘价,
compare = [close_pre;p_test;result;error];
%% 详细盈亏
lg = length(close_pre);
[line_compare,xx] = size(compare);
windata = ones(1,lg);
winnum = 0;
for i=1:lg
close_pre_value = close_pre(1,i);
p_test_value = p_test(1,i);
result_value = result(1,i);
win = 0;%盈亏钱数
if(p_test_value>=close_pre_value)
win = result_value-close_pre_value;
else
win = close_pre_value-result_value;
end
if(win>=0)
winnum=winnum+1;
end
windata(1,i) = win;
end
compare(line_compare+1,:) = windata
% 成功率
win_rate = winnum/lg