FAQ > 金融建模 > 建模问题 > 多因子相关

Q:Fama-MacBeth两步法回归流程是什么?    

简述
范例代码展示了一个基本思路,取多期因子暴露与下期收益回归,求得每期的回归系数,基于回归系数序列输出一些评价指标。其中因子数据的获取部分是需要根据实际修改。
endt := 20251117t;
N := 12;
sp_s(PN_Cycle(),cy_month());
sp_s(PN_Date(),endt);
days := MarketTradeDayQk2(N+1);
stocks := GetBKByDate('SH000300',endt); //样本池
//因子配置
zbArr := array(('因子名称':'开盘','因子公式':'open()','因子方向':1),
        ('因子名称':'最高','因子公式':'high()','因子方向':1),
        ('因子名称':'最低','因子公式':'low()','因子方向':1),
        ('因子名称':'收盘','因子公式':'close()','因子方向':1));

regress_ret := array();
for i:=0 to length(days)-2 do
begin
  d := days[i];
  next_d := days[i+1];
  //当期因子暴露
  factor_i := TSMF_GetValueByEndT(stocks,zbArr,d,'',1,0,array(),array('not_rdate':1));
  factor_i_data := factor_i[:,zbArr[:,'因子名称']]; //回归用因子暴露
  ret_i := MF_StockZF(d+1,next_d,factor_i[:,'代码']); //下期收益
  regress_ret[i] := Regress_CMLS(ret_i,factor_i_data,u,1);
end

//return regress_ret;

ret := array();
ret['均值'] := mean(regress_ret);;
ret['标准误'] := StdDev(regress_ret)/sqrt(N);
T_Test := FI_TTest(regress_ret);
ret['T值'] := T_Test["Statistic"];
ret['P值'] := T_Test["P-Value"];
ret['NW-t'] := NW_Adjustment_Simplification(regress_ret)['T-Stat'];
ret['累计收益率'] := FI_CumReturn(regress_ret);
ret['波动率'] := StdDev(regress_ret);
ret['夏普比'] := FI_Sharpe_ratio(regress_ret,0,12);
ret['最大回撤'] := FI_MaxDrawdown(regress_ret);

reindex(ret,nil,array('常数项') union zbArr[:,'因子名称']);


return ret;