matlab索引超出数组元素的数目(4),索引超出数组元素的数目怎么解决?

本帖最后由 hydra1234 于 2019-3-14 19:53 编辑

完整代码如下:

load('time.mat');

load('guozhai1812.mat');

load('guozhai1903.mat');

mspread=guozhai1903-18.4842-0.815*guozhai1812;

in=[];

out=[];

postive=0.01652;

negative=-0.02193;

shangzhisun=0.053;

xiazhisun=-0.0495;

mean_price=mean(mspread);

m=1;

while m<=length(mspread)

if mspread(m)>postive && mspread(m)

in=[in,[guozhai1903(m)-0.815*guozhai1812(m)-18.4842,m]'];

for j=m+1:length(mspread)

if mspread(j)

out=[out,[guozhai1903(j)-0.815*guozhai1812(j)-18.4842,j]'];

m=j;

break;

end

if mspread(j)>=shangzhisun

out=[out,[guozhai1903(j)-0.815*guozhai1812(j)-18.4842,j]'];

m=j;

break;

end

if j==length(mspread)

m=j;

end

end

elseif mspread(m)xiazhisun

in=[in,[guozhai1903(m)-0.815*guozhai1812(m)-18.4842,m]'];

for j=m+1:length(mspread)

if mspread(j)>mean_price

out=[out,[guozhai1903(j)-0.815*guozhai1812(j)-18.4842,j]'];

m=j;

break;

end

if mspread(j)<=xiazhisun

out=[out,[guozhai1903(j)-0.815*guozhai1812(j)-18.4842,j]'];

m=j;

break;

end

if j==length(mspread)

m=j;

end

end

end

m=m+1;

end

if size(out,2)

out=[out,[mspread(length(mspread)),length(mspread)]'];

end

arbitrage_number=size(out,2);

arbitrage_result=[];

for i = 1:arbitrage_number

in_position=in(2,i);

in_time=time(in_position);

in_price=in(1,i);

out_position=out(2,i);

out_time=time(out_position);

out_price=out(1,i);

hold_cost=(guozhai1903(in_position)+0.815*guozhai1812(in_position))*0.01;

trade_cost=0.0008;

if in_price>postive||out_price>=shangzhisun

gross_profit=in_price-out_price;

elseif in_price

gross_profit=out_price-in_price;

end

net_profit=gross_profit-trade_cost;

net_profit_rate=net_profit/hold_cost;

temp=[in_time,in_price,out_time,out_price,hold_cost,trade_cost,gross_profit,net_profit,net_profit_rate];

arbitrage_result=[arbitrage_result,temp'];

end

开头的time,guozhai1812,guozhai1903都是包含651个数据的数组文件