步骤1:在移动均线的选取中,为了捕捉股价在不同时期的趋势,我们分别选取3、 5、 10、 20、 30、 60(原文有120,240,此处剔除)这些常用参数,得到的均线分别代表股价在过去超短期、短期、中期的表现。考虑到指数移动平均线(EMA)相对普通移动平均线存在更高的灵敏度,相对较近的股价被赋予更高的权重,因此优选 EMA 指标。具体构建方法如下:步骤2:等式左边为 i 股截至 t 期末的 n 日 EMA, 考虑市场中个股之间价格相差巨大,为避免之后的回归模型受到极端值的干扰, 我们对 EMA 指标进行进一步标准化:1、2代码部分%标准化EMA计算
function today=EMA(close,n)
emas = 2/(n+1)*close(:,end-n+2)+(n-1)/(n+1)*close(:,end-n+1);
for i=3:n
emas = 2/(n+1)*close(:,end-n+i)+(n-1)/(n+1)*emas;
end
today = emas./close(:,end);
end其中n为均线周期,close为收盘价数据。步骤3:将 EMA 除以当天收盘价,在得到标准化的 EMA 的基础上,进行截面回归:function betavalue=coef(close,t)
%t对应月份,0表示当月,1表示上个月,依次类推
%月度收益的计算
Y =(close(:,end-20*t)-close(:,end-20-20*t))./close(:,end-20*t);
%上一个月的收盘
lastclose = close(:,1:end-20-20*t);
oldEMA3= EMA(lastclose,3);
oldEMA5= EMA(lastclose,5);
oldEMA10= EMA(lastclose,10);
oldEMA20= EMA(lastclose,20);
oldEMA30= EMA(lastclose,30);
oldEMA60= EMA(lastclose,60);
%oldEMA120= EMA(lastclose,120);
%oldEMA240= EMA(lastclose,240);
X = [ones(size(close,1),1),oldEMA3,oldEMA5,oldEMA10,oldEMA20,oldEMA30,oldEMA60];
Z = [Y,X];
Z(any(isnan(Z),2),:) = [];%剔除无效信息
Y=Z(:,1);X=Z(:,2:end);
if ((sum(sum(isnan(X))))>0)
disp(sum(sum(isnan(X))))
betavalue =nan(6,1);%若有效数据不足则传回nan不操作
return;
else
disp('完成');
end
b=regress(Y,X);%回归系数的计算
betavalue =b(2:end);
end