查看: 1792|回复: 3|关注: 0

[已答复] 索引超出数组元素的数目怎么解决?

[复制链接]

新手

5 麦片

财富积分


050


1

主题

3

帖子

0

最佳答案
发表于 2019-3-14 19:43:20 | 显示全部楼层 |阅读模式
本帖最后由 hydra1234 于 2019-3-14 19:46 编辑

本人matlab初学者,最近用matlab做毕业论文,需要用matlab进行套利操作。然而在进行到最后一步的时候,总是有这个报错,有人说是下标越界,那么应该怎么解决?感激不尽:handshake

附上最后一段代码如下:
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<negative||out_price<=xiazhisun
             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
索引超出数组元素的数目(0)。

新手

5 麦片

财富积分


050


1

主题

3

帖子

0

最佳答案
 楼主| 发表于 2019-3-14 19:50:27 | 显示全部楼层
本帖最后由 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)<shangzhisun
             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)>=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)<negative && 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)<size(in,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<negative||out_price<=xiazhisun
             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个数据的数组文件

新手

5 麦片

财富积分


050


1

主题

3

帖子

0

最佳答案
 楼主| 发表于 2019-3-14 19:45:46 | 显示全部楼层
本帖最后由 hydra1234 于 2019-3-14 19:47 编辑

求大神看一看问题出在哪

入门

61 麦片

财富积分


50500


0

主题

7

帖子

0

最佳答案
发表于 2019-3-16 19:18:16 | 显示全部楼层
我也遇到了,索引超出数组元素的数目(1)。的问题,求大神给出解决方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

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