matlab小数越界,请问怎么解决下标越界的问题

function [WPBar,LPBar,WL,t] = Monmentum(M,N,W,L)

% M 为观察期

% N 为持有期

% W 为赢家组合股票数量

% L 为输家组合股票数量

[Data,Txt] = xlsread('Book1.xlsx');

ClosePrice = Data;

TradeDate = Txt(2:end,1);

LogPrice = log(ClosePrice);

LogRate = diff(LogPrice);

[m,n] = size(LogRate);

M0 = 1:M:m;

M1 = M:M:m;

if length(M0) > length(M1)

M1(1,end+1) = m;

end

N0 = 1+M1;

N1 = N+M1;

N0(N0>m) = [];

N1(N1>m) = [];

if length(N0) > length(N1)

N1(1,end+1) = m;

end

if length(M0) > length(N0)

M0 = M0(1:length(N0));

M1 = M1(1:length(N0));

end

CumRate0 = zeros(length(M0),n);

CumRate1 = zeros(length(N0),n);

for i = 1:length(M0)

CumRate0(i,:) = prod(1+LogRate(M0(i):M1(i),:))-1;

CumRate1(i,:) = prod(1+LogRate(N0(i):N1(i),:))-1;

end

CumRateW = zeros(length(M0),W);

CumRateL = zeros(length(M0),L);

for j = 1:length(M0)

cumrate0 = CumRate0(j,:);

[cumratesort,I] = sort(cumrate0,'descend');

CumRateW(j,:) = CumRate1(j,I(1:W));

CumRateL(j,:) = CumRate1(j,I(end-L+1:end));

end

WP = mean(CumRateW,2);

LP = mean(CumRateL,2);

WPBar = mean(WP);

LPBar = mean(LP);

WL = WPBar-LPBar;

WL0 = WP - LP;

这是源代码,因为是研究金融方面股票的动量效应和矢量效应,需要M和N都能随机的设置数字;

比如M=10;N=10;W=10;L=10;是能够得到想要求的数字

但是当设置M=10;N=20;W=10;L=10;的时候会显示

Attempted to access N1(459); index out of bounds because numel(N1)=458.

Error in Monmentum (line 32)

CumRate1(i,:) = prod(1+LogRate(N0(i):N1(i),:))-1;

请问这个问题该怎么解决?

导入的表格是一个4599*160的表格

t = mean(WL0)/(std(WL0)/sqrt(length(WL0)));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值