跳转到内容

截面动量

在每月末,按过去 JJ 个月(跳过最近 1 个月)的累计收益把股票分为十组,做多最高组、做空最低组,持有 KK 个月。经典参数 J=12, K=1J = 12,\ K = 1

MOMi,t=s=t12t2(1+ri,s)1.\mathrm{MOM}_{i,t} = \prod_{s=t-12}^{t-2}(1 + r_{i,s}) - 1.

最近一个月存在短期反转效应,不跳过会稀释动量信号。

动量组合在市场急剧反弹时(如 2009 年 3 月)会遭遇极端亏损,源于空头端集中在高贝塔的”输家”股票。波动率目标化(volatility scaling)可以显著缓解。

momentum.py
import numpy as np
import pandas as pd
def cross_sectional_momentum(rets: pd.DataFrame, lookback: int = 12, skip: int = 1) -> pd.DataFrame:
"""rets: 月度简单收益,index=月末,columns=股票"""
cum = (1 + rets).rolling(lookback).apply(np.prod, raw=True) - 1
return cum.shift(skip)