《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 445|回复: 0
收起左侧

[提问] 一组BP股指预估代码报错

[复制链接]
发表于 2018-3-14 11:30:04 | 显示全部楼层 |阅读模式
以下是论坛中一个经典的股指预测代码,但是在运行中出现了如下错误:


% 神经网络预测股指走势
% Written by Phillip Wan
% Email:hackerwanhappy@foxmail.com

%% 准备工作
tic;
clear;
clc;
close all;
format compact;
w=windMATLAB;
%w.menu
%% 导入数据
[w_wsi_data,w_wsi_codes,w_wsi_fields,w_wsi_times,w_wsi_errorid,w_wsi_reqid]=w.wsd('IF00.CFE','close,open,high,low,volume','2013-02-06 09:00:00','2013-04-06 16:09:58','PriceAdj=F');

%% 处理数据转置
close0=w_wsi_fields(1,1);
open0=w_wsi_fields(2,1);
high0=w_wsi_fields(3,1);
low0=w_wsi_fields(4,1);
vol0=w_wsi_fields(5,1);

%% 初始化变量
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('最大回撤');

错误:
错误使用 bsxfun
操作数必须为数值数组。
出错 mapminmax.apply (line 6)
  y = bsxfun(@minus,x,settings.xoffset);
出错 mapminmax.create (line 44)
  y = mapminmax.apply(x,settings);
出错 mapminmax (line 51)
[y,settings] = mapminmax.create(x,param);
出错 test20180313 (line 34)
[v,vps]=mapminmax(v0);

请问哪位大神知道如何解决吗?
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2020-2-28 07:30 , Processed in 0.052462 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表