期货预测 matlab,用BP神经网络,分析期货数据,附详细代码

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值