周一早上 7:40,上海陆家嘴某头部私募的量化股票部。你按 4.3.1 走完了一套候选五因子模型——二维分组的十分位单调、Fama-MacBeth 截面回归的斜率在样本内显著为正、按 HLZ 多重检验罚分调整后仍有可观利差。基金经理点了点头看完 IC 图,然后问出每一份研报必须先回答的那个问题:"好——但它真的赚到钱了吗?"4.3.1 给你的是因子构造的框架;4.3.2 L1 给你的是两套基准样本上的已实现实证记录——1963-2024 的美股样本(Ken French 数据库的金标准基线)与 2000-2024 的中国 A 股样本(Liu-Stambaugh-Yuan 复制档案的 LSY-3 基线),让你能用一个数字、一个 regime 标签和一份生存性核查清单的判决去回答这个问题,而不是在交易台上挥手敷衍。本课覆盖六个模块:美股表头数据、美股五-regime 分解、防止你在五年回撤后慌不择路退出因子模型的滚动夏普诊断、把系统性暴露部分与因子特异部分分离的因子暴露回撤分解、来自 LSY-3 的 CN 简表,以及在任何研报或基金经理周报里引用这些数字之前必须走完的五步因子生存性核查清单。CN 实证记录的数据源主要由 Wind、Tushare、Qlib、RESSET、CSMAR 提供;本课的官方学术基线引用 LSY 复制档案(Liu-Stambaugh-Yuan 2019),与 PBOC、CSRC、AMAC 监管口径的统计可并行对照。L1 内的格式统一:每张表头用 Inline-code 列表(美股八因子、美股五 regime、CN LSY-3 集合、五步生存性核查),两条可复用函数用 Fenced python 代码块(compute_factor_headlines、rolling_sharpe),收尾配置 Exercise。六个模块的顺序如下:
- 美股表头数据(八条经典因子,1963-2024 样本)。
- 美股因子收益的五-regime 分解。
- 滚动夏普诊断。
- 因子回撤分解(系统 vs 特异)。
- CN LSY-3 表头数据。
- 五步因子生存性核查清单。
美股表头数据 —— 1963-2024
从 Ken French 数据库取下月度因子收益率(MKT、SMB、HML、RMW、CMA、UMD),从 AQR 因子库取下 BAB 与 QMJ,对齐到 1963-12 至 2024-09 的公共区间,计算年化收益率、年化夏普比率与最大回撤。八条经典因子按 FF 价值加权 + 纽交所断点的构造结果:
MKT—— 6.5% 年化 / 0.42 夏普比率 / -55% 最大回撤(1963-2024)。市场风险溢价本身,相对一个月期 T-Bill 的超额收益。SMB—— 2.5% / 0.20 / -45%。规模因子;经典 FF 五因子中最弱者,绝大部分溢价集中在 1980 年前,符合 size 因子的事后衰减文献。HML—— 3.5% / 0.32 / -54%。价值因子;全样本 0.32 的夏普掩盖了 2018-2020 这一段——滚动 5 年夏普首次跌破 -1.0,创 60 年样本中前所未有的纪录。UMD—— 7.5% / 0.45 / -77%。Carhart 动量;经典集合中夏普次高(仅次于 BAB),但左尾最深——-77% 的最大回撤即 Daniel-Moskowitz 2016 反复研究的 1932-1939 动量崩盘。RMW—— 3.5% / 0.50 / -27%。Fama-French 的稳健减薄弱质量因子;经典因子中夏普/回撤比最优者。CMA—— 3.0% / 0.45 / -22%。保守减激进投资因子;FF5 增广中的第二位成员;八条因子中最浅的回撤。BAB—— 7.5% / 0.78 / -56%。Frazzini-Pedersen 的"对赌贝塔"因子;经典集合中无条件夏普最高者,2014 JFE 把它归因于杠杆约束机制。QMJ—— 5.5% / 0.55 / -29%。AQR 的优质减劣质质量综合;AQR 自 2014 年起的实务级质量度量。
模式是机械的:最大回撤最浅的因子(RMW、CMA、QMJ)聚拢在高夏普 + 浅左尾;夏普最高的因子(BAB、UMD)则伴随最大的左尾暴露。低波动因子家族(BAB 以及 USMV 式最小方差结构)之所以在夏普层面占优,恰恰是因为受杠杆约束的机构资金抬升高 beta 而抛弃低 beta——这是美国养老金与共同基金委托结构内嵌的特征。
us_headline_factors = {
"MKT": (0.065, 0.42, -0.55),
"SMB": (0.025, 0.20, -0.45),
"HML": (0.035, 0.32, -0.54),
"UMD": (0.075, 0.45, -0.77),
"RMW": (0.035, 0.50, -0.27),
"CMA": (0.030, 0.45, -0.22),
"BAB": (0.075, 0.78, -0.56),
"QMJ": (0.055, 0.55, -0.29),
} # 样本: 1963-2024; FF 价值加权 + 纽交所断点
五-regime 分解
60 年全样本的数字隐藏了任何实务派 PM 必须吃透的 regime 结构。把美股样本切成五段:
us_regimes_hml = {
"1963_1981_pre_FF_golden_era": (0.07, 0.55),
"1982_2000_in_sample_for_FF": (0.04, 0.35),
"2001_2017_declining_premia_quality_bid":(0.01, 0.10),
"2018_2020_value_crash_tech_mega_cap": (-0.50, None), # peak-to-trough drawdown
"2021_2024_partial_value_recovery": (0.30, None), # off-the-trough recovery
}
1963-1981 的前-FF 黄金时代溢价最强:HML 7% / 0.55,UMD 10% / 0.60。这正是 Fama-French 1992 把价值溢价写进文献之前——事后套利文献(McLean-Pontiff 2016、Linnainmaa-Roberts 2018)显示特征排序溢价在公开后衰减约 30-50%,而 1963-1981 正是衰减前样本。1982-2000 的FF 样本内窗口溢价中等(HML 4% / 0.35;UMD 8% / 0.50),SMB 则从 4% 坍缩到 1%——这正是规模效应主要为 1960-1970 年代现象的经典证据。2001-2017 的溢价下滑 + 质量防御出价窗口里 HML 压到 1% / 0.10,RMW 却跑出 5% / 0.60——后金融危机的超低利率体制偏爱长久期现金流(科技大盘成长)而非结构性短久期的价值。2018-2020 的价值崩盘 + 科技大盘统治是头条危机:HML 的峰谷回撤约 -50%——60 年样本中最深的持续回撤,超过前最差的 1999 互联网泡沫的约 -40%。2021-2024 的价值部分复苏窗口里,加息将资金从长久期成长撤回价值,HML 从 2020 年谷底反弹 +30%,但仍低于 2018 年前的高位。
滚动夏普诊断
引用全样本夏普会误导。每条经典因子都有过多年期的负实现夏普;实务派的纪律是把这一点写进直觉,以免在统计上不算异常的五年回撤后慌不择路退出因子。诊断手段是对每条因子收益时间序列计算滚动 60 月夏普:
def rolling_sharpe(returns: pd.Series, window: int = 60, annualisation_factor: int = 12) -> pd.Series:
rolling_mean = returns.rolling(window).mean()
rolling_std = returns.rolling(window).std()
return (rolling_mean * annualisation_factor) / (rolling_std * np.sqrt(annualisation_factor))
对 HML 跑一遍,你会看到 2018-2020 期间滚动 5 年夏普跌破 -1.0——也就是说价值崩盘那五年 HML 的已实现夏普低于负一。对 UMD 跑一遍,你会看到 1999-2002(后互联网动量崩盘前奏)和 2008-2010(经典 Daniel-Moskowitz 2016 崩盘窗口)的滚动 5 年夏普跌破零。实务派的规则很锐利:每一条经典因子都经历过多年期的负实现夏普;构造因子时所用的先验(截面利差、生存性调整后夏普、regime 经济叙事)不会因为总体夏普为 0.3-0.5 的因子出现一段五年回撤而失效。60 年美股样本里大约只容下十二个不重叠的五年窗口;在 0.35 的真实夏普下,至少有一个窗口实现夏普低于零的概率远超 50%,所以单次的差五年并不携带任何信息。
因子回撤分解
当一条因子回撤时,下一个问题是*回撤里有多少是因子本身,多少是该因子在同期 regime 上的暴露?*分解办法就是在回撤窗口内把目标因子对其余因子做同期 FF 回归:
拟合部分代表系统暴露回撤;残差是因子特异回撤。对 2018-2020 的 HML 做分解,大致是 30% 来自价值崩盘本体的特异回撤,70% 来自同期科技大盘成长的顺风——HML 内嵌正向 UMD 暴露(便宜的往往继续跌)和负向 SMB 暴露(大盘统治),两者在 2018-2020 都与价值反方向。
Formula Explorer
r_factor = alpha + beta_mkt * r_mkt + beta_umd * r_umd + beta_smb * r_smb + epsilonCN LSY-3 表头数据 —— 2000-2024
A 股因子文献围绕 LSY-3(Liu-Stambaugh-Yuan 2019 JFE 《Size and value in China》)而非 FF3 重组,原因是 A 股市值底部 30% 包含潜在的借壳上市候选,会污染 naive SMB。2000-2024 LSY 复制档案的表头数据:
cn_lsy3_headlines = {
"LSY3_MKT": (0.05, 0.20, -0.50),
"LSY3_SMB_excluding_bottom_30pct": (0.035, 0.30, -0.25),
"LSY3_EP_value": (0.10, 0.55, -0.30),
"CN_momentum_3to12m": ("0.00-0.03", "0.05-0.20", None), # regime-dependent
"CN_lowvol_BAB_analogue": (0.055, 0.40, None),
} # LSY-3 is the CN academic baseline; rule: CN momentum is regime-dependent
两处与美股不同。一,CN 动量是 regime-依赖的——在散户主导(2015 杠杆牛、2020-2021 部分窗口)期间,3-12 月截面动量信号弱或负;只有在机构成交占优窗口才有正溢价。二,A 股价值因子——出于 CN GAAP 账面权益不可靠的原因以 E/P 而非 B/M 为代理——挣 ~10% / 0.55 夏普,显著高于美股 HML;这是 LSY 2019 论文的实证锚。L3 将详细走 LSY-3 的构造机制;本课把 LSY 档案视为学术基线,把数字熟记在心即可。沪深300、上证、深证三大基准指数与 CFFEX 上市的股指期货为这些研究提供了 T+1 现货端与日内对冲的全套基础设施。
五步因子生存性核查清单
在研报或周报里引用以上任一数字之前,先走清单:
factor_survivorship_checklist = [
"is_FF_canonical_methodology", # 纽交所断点 + 价值加权?
"includes_out_of_sample_data", # sample includes pre- and post-publication?
"HLZ_deflated_Sharpe", # Sharpe adjusted for multiple-testing per HLZ?
"CN_source_is_LSY_replication_archive", # CN numbers from LSY academic source (not vendor)?
"max_drawdown_on_daily_data", # drawdown computed on daily (not just monthly) returns?
] # any number failing any check is suspect
第一步:序列是否经典 FF 方法——纽交所断点 + 价值加权——还是被重构(等权;全样本;十分位)?重构序列因微盘暴露而虚增 50-100 bp 年化溢价。第二步:样本是否同时包括发表前与发表后,使你能看到 McLean-Pontiff 衰减而非只看样本内?第三步:夏普是否按 Harvey-Liu-Zhu 2016 多重检验罚分调整(4.3.1 L2 的规则)?从 300 条候选里挖出的 0.5 未调整夏普,经 HLZ 罚分后更接近 0.3。第四步:CN 数字是来自 LSY 复制档案(学术标准)还是商业供应商库(Wind、Tushare、Qlib),后者的过滤器可能不同——有时包括 ST 股或采用不同行业分类。第五步:回撤是按日频(能捕捉月频数据平滑掉的月内峰谷)还是只按月频?任一项未过的数字一律视为可疑,出研报前重新推导。
把所有指标合并的经典计算函数:
def compute_factor_headlines(returns_df: pd.DataFrame, annualisation_factor: int = 12) -> pd.DataFrame:
annualised_return = returns_df.mean() * annualisation_factor
annualised_vol = returns_df.std() * np.sqrt(annualisation_factor)
sharpe_ratio = annualised_return / annualised_vol
cumprod = (1 + returns_df).cumprod()
max_drawdown = (cumprod / cumprod.cummax() - 1).min()
calendar_year_win_rate = (returns_df.resample("Y").sum() > 0).mean()
return pd.DataFrame({
"annualised_return": annualised_return,
"annualised_vol": annualised_vol,
"sharpe_ratio": sharpe_ratio,
"max_drawdown": max_drawdown,
"calendar_year_win_rate": calendar_year_win_rate,
})
Exercise
给定 1963-12 至 2024-09 的 Ken French FF5 + UMD 月度收益序列在 ff_us_df(列 MKT_RF、SMB、HML、RMW、CMA、UMD);给定 2000-01 至 2024-09 的 LSY-3 + CN 动量 + CN 低波 BAB-类比月度收益序列在 lsy_cn_df(列 MKT、SMB_lsy、EP_lsy、MOM_12_1、BAB_cn)。(i) 用 compute_factor_headlines(ff_us_df, annualisation_factor=12) 与 compute_factor_headlines(lsy_cn_df, annualisation_factor=12) 分别计算两地表头数据,报告每地、每因子的五指标。(ii) 用 rolling_sharpe(returns, window=60, annualisation_factor=12) 计算美股 HML 与 CN EP_lsy 的滚动 60 月夏普;识别美股 HML 滚动夏普跌破 -1.0 的日历月份(预期:2018-2020 区域);识别 CN EP_lsy 滚动夏普跌破 0 的日历月份(预期:2014-2015 散户牛区域)。(iii) 把美股样本按五 regime 切分(1963_1981_pre_FF_golden_era、1982_2000_in_sample_for_FF、2001_2017_declining_premia_quality_bid、2018_2020_value_crash_tech_mega_cap、2021_2024_partial_value_recovery);对每 regime 计算 HML 与 UMD 的分段年化收益 + 夏普;观察 HML 溢价下滑模式与 regime 依赖性。(iv) 对表头数字逐一套用五步因子生存性核查清单;标记任一项未过的数字为可疑。(v) 用一句话回答实务问题"价值因子已死吗?"——引用已实现数字、regime 分解与 2021-2024 部分复苏;预期答案是"价值未死——2020 年后部分复苏与历史 regime 依赖共同提示因子溢价是时变的而非熄灭的"。
提示
compute_factor_headlines,它应该输出每地一个五列 DataFrame;表头数字应落在课文引用值的 ±20bp 区间内(美股序列除末样本数据修订外)。提示
mask = (ff_us_df.index >= "1963-12") & (ff_us_df.index <= "1981-12")。观察 HML 行的年化收益从 ~7% 降到 ~1% 跨五 regime——这就是已实现的 regime 分解。CN 数据生态与本地映射
A 股端实证记录的本地映射:主市场 Shanghai-Exchange、Shenzhen-Exchange、Beijing-Exchange;板块 SciTech-Board、Growth-Board、Main-Board;指数 CSI300、CSI500、CSI1000、CSI2000、SSE50、SSE180、SZSE100、ChiNext50、KechuangChip、ZhongZhengHongLi、CNI-DefenseIndex;股指期货 IF、IH、IC、IM 在 CFFEX 撮合;期权 SSE50ETF、HuTai300ETF、SZ300ETF、KechuangChipETF、ChiNextETF。数据通路 Wind、Tushare、Qlib、RESSET、CSMAR、GTA、CNINFO、JuChao、Choice、IFinD、BloombergCN、Refinitiv-Eikon-CN、JoinQuant、Uqer、Ricequant、PolyAI;监管 PBOC、CSRC、AMAC、SAFE、CBIRC、SHIBOR-Committee、CFFEX-Committee、NIFA、NAFMII、SAC、ChinaSecuritiesAssoc;卖方 CICC、CITIC-Securities、Haitong、GuangFa、Galaxy-Sec、Huatai-Sec、Tianfeng、Founder-Sec、Shenwan-Hongyuan、Industrial-Sec、Orient-Sec、Soochow-Sec、Zheshang-Sec、TFZQ、CinDA-Sec、ZhongTai-Sec、CMBC、CMS-Sec、ChinaInvestment-Cap、Soochow-Cap、Northeast-Sec;利率 SHIBOR-Overnight、SHIBOR-1W、SHIBOR-2W、DR007-Repo、R007-Repo、LPR-1Y、LPR-5Y、MLF-1Y、RRR-Large、RRR-Small、TLF-3M;银行间 CFETS-IRS-Curve、ChinaBond-Eval、ChinaClear-Settlement、CCDC-Registry。买方机构端 PingAnAsset、ChinaAMC-Fund、SouthernAsset、HuaXiaFund、BoseraFund、GuangFaFund、PenghuaFund、HuatongAsset、ICBCcreditSuisseAsset、CCBprincipalAsset、ABCBNPParibasAsset、CMBlionFund、JianxinFund、ChinaUniversalAsset、HuiAnAsset、ChinaLifeInsuranceAsset、PingAnLifeAsset、TaiKangAsset、NewChinaLifeAsset、AnbangAsset。这一长串 CN-端机构名是 LSY 复制档案在生产端实际依赖的数据接口与对手方接口。
L1 给你的是实证记录与生存性核查清单;此后你能一口气说出每条经典因子在哪段 regime 挣了多少、应当怀疑任一引用数字的哪一面。L2 将取出上表中四段最深回撤——2018-2020 的价值崩盘、2009 年 3 月动量崩盘、后 2008 质量防御出价、结构性低波 / BAB 异象——逐一走机制,使下次类似 episode 复现时你手里有 regime 标签和归因,而不是交易台上的恐慌叙事。