本帖详细叙述了Fama and French三因子(MKT、SMB、HML)的构建方式,希望可以帮到有需要的人。并提供了数据以及python和stata两份代码。(代码均本人手打,如有错误欢迎指正)。原始论文见:Fama E. F.,French K. R. Common Risk Factors in the Returns onStocks and Bonds[J]. Journal of Economics,1993,33(1):3-56.
股票池:沪深A股、创业板、科创板。样本区间:2001年1月至2020年12月。原始变量:月个股收益率(本帖使用考虑现金红利再投资的收益率),市值(本帖使用流通市值),无风险利率(本帖使用定期整存整取一年利率),账面价值(本帖使用所有者权益合计)。
FF三因子:MKT-市场因子;SMB-市值因子;HML-价值因子。
MKT:每月股票市场组合的收益率减去当月无风险利率。
SMB与HML:每年6月末对股票进行分组。t年6月末使用流通市值对股票进行排序,按照50%分位数把股票分为S(small)和B(big)两组。t年6月末使用t-1年12月份的账面市值比进行排序(账面市值比=账面市值/流通市值),按照30%和70%分位数将股票分为L(low),M(medium),H(high)三组。分别对S,B和L,M,H取交集,股票即被分为了SL,SM,SH,BL,BM,BH六组。这意味着6个组合的股票在t年7月至t+1年6月之间是不变的。分别计算6个组合的每月的收益率。
组合收益率的权重可以采用等权重、流通市值加权、总市值加权等方式,本帖仅计算了等权重和流通市值加权的因子。此外,本帖为了避免前瞻性误差,在计算组合t月的加权收益率时,使用的权重为t-1月末的流通市值。
(注:由于python与stata两份代码的函数和处理逻辑不完全一样,导致两者计算出的因子存在较小的误差,不过考虑到本帖使用的收益率均为百分数,所以绝对误差并不大)