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)));