跳转至

M05 资产定价理论基础

层级:L2 因子投资 | 优先级:★★ | 预计学时:10 小时 对应原书:因子 第 1 章、附录 A;GK 第 2、7 章 前置知识:M01 的回归与 t 值;M04 的杠杆上限。 读书笔记:因子第 1 章 · GK 第 2、7 章 状态:reviewed 数据截至:2026-08|最近复核:2026-10-22


学习目标

  1. 用 E[Rᵢ] − R_f = αᵢ + βᵢ′λ 分清因子、模型、异象和你账户里的超额。
  2. 手算一段四期 CAPM 回归,并说出证券市场线过平与主动管理算术是两件不同的事。
  3. 从 Kenneth French 月频三因子读出溢价、t 值和 HML 的一段回撤。数字来自 202608 版 CRSP 文件,不是书里的表。
  4. 用两状态的随机折现因子说明:溢价对应的是「坏状态下表现差」。
  5. 区分风险补偿和错误定价的可观察预测。个人账户的杠杆上限是 1.0,复制不了带杠杆的多空因子。

本章知识拓扑图

flowchart TB
    PAY["资产的预期超额收益"] --> SPLIT["α + β′λ"]
    SPLIT --> BETA["β:和因子一起动的部分"]
    SPLIT --> ALPHA["α:这个模型没解释的部分"]
    BETA --> PREM["λ:因子自己的预期超额"]
    PREM --> RISK["坏状态里亏得更多"]
    ALPHA --> MIS["相对这个模型的异象"]
    MIS --> LIMIT["做空、杠杆、费用挡住套利"]
    LIMIT --> YOU["你的账户:杠杆 ≤ 1,空头不一定借得到"]

α 挂在模型上。换一组因子,原来的 α 可以变成新的 β。M14 才把账户收益拆回这些暴露。


🟢 入门层:预期收益在给谁付钱

1. 一个式子

石川等《因子投资:方法与实践》第 1 章把预期超额写成暴露和溢价的内积,再加上模型没接住的一项:

E[Rᵢ] − R_f = αᵢ + βᵢ′λ.

符号 含义
Rᵢ − R_f 资产 i 的超额收益。R_f 与 Rᵢ 同一频率,这里先按年写
βᵢ 对每个因子收益的斜率,一列向量
λ 这些因子自己的预期超额,一列向量
αᵢ 上式减完之后剩下的预期超额

四个词都从这个式子长出来。

  • 因子:一批资产共同进退、并且 λ 不是零的那个组合。市场、价值、动量是例子,不是名单的全部。
  • 多因子模型:选定了 λ 里的那几项,并声称够用,于是所有资产的 α 都该靠近 0。
  • 异象:在这一组因子下,α 明显离开 0。换模型,同一个现象可以不再是异象。
  • 你看到的超额:相对标普 500 多出来的部分,常常是 β′λ。扣掉已知暴露之后还在的,才是这个模型下的 α。

低成本的因子 ETF 复制的是 β′λ。若账户的超额几乎都被这些 ETF 解释掉,自己交易支付的是换手,不是新的 α。

2. 钱从哪一类人手里来

定价模型不创造收益,它给收益标上来源。市场组合的溢价,来自有人在衰退里必须卖出、因而愿意把价格让给能持有的人。价值溢价若是风险补偿,来自价值股在某些坏状态下跌得更多,持有人要为这种跌法收费。若是错误定价,来自另一类人把价格推离了这个模型,而套利者没有把价格完全推回去。

两类来源对个人账户的账单不同。风险补偿要求你在那段坏状态里真的留在仓位上。错误定价要求你的交易成本和借券条件好过把价格推歪的那群人。两件可以叠在同一个因子上。检验放在第 8 节,不在这里宣布哪一个因子属于哪一类。


🟡 进阶层:CAPM、算术恒等式、折现因子

3. CAPM

Sharpe (1964, JF 19(3))、Lintner (1965, Review of Economics and Statistics 47(1))、Mossin (1966, Econometrica 34(4))。Sharpe 因此分享 1990 年诺贝尔经济学奖。

单期、均值方差、预期一致、能以同一利率借入借出时,只有与市场组合同向的那部分波动有价格。可被分散掉的残差没有价格:

E[Rᵢ] − R_f = βᵢ(E[Rₘ] − R_f), βᵢ = (Cov(Rᵢ, Rₘ)) / (Var(Rₘ)).

这时统一式子里只有一个因子,λ = E[Rₘ] − R_f,模型要求 αᵢ = 0。

四期手算。 下面四期超额收益的均值都是 0,所以截距就是 α,斜率就是 β。单位是每期的小数。

期 市场超额 x 股票超额 y
1 0.02 0.04
2 −0.01 −0.035
3 0.03 0.045
4 −0.04 −0.05

Σ x² = 0.0004 + 0.0001 + 0.0009 + 0.0016 = 0.003。

Σ xy = 0.0008 + 0.00035 + 0.00135 + 0.002 = 0.0045。

ˆβ = 0.0045/0.003 = 1.5, ˆα = ¯y − ˆβ¯x = 0.

残差是 0.01, −0.02, 0, 0.01。残差平方和 0.0006。含截距的回归残差自由度是 4 − 2 = 2,

s² = 0.0006/2 = 0.0003.

¯x = 0,于是

se(ˆβ) = √(0.0003/0.003) = √0.1 = 0.3162, t(ˆβ) = 1.5/0.3162 = 4.74.

se(ˆα) = √(0.0003/4) = 0.00866.

t(ˆα) = 0。自由度为 2 时,双侧 5% 的 t 临界值是 4.303。4.74 刚过这条线。四期回归只用来核对公式,不能当作证券定价的证据。临界值用的是 Student-t,不是大样本的 1.96。

证券市场线比 CAPM 平。 Black, Jensen & Scholes (1972) 和 Fama & MacBeth (1973, JPE 81(3)) 发现低 β 组合的平均收益高于 CAPM 直线,高 β 低于直线。Fama & French (1992, JF 47(2)) 在放进市值和账面市值比之后,β 对截面平均收益几乎没有额外解释。Frazzini & Pedersen (2014, JFE 111(1)) 把低 β 加杠杆、高 β 减杠杆,做成 β 中性的 BAB。他们报告的美股 BAB 在 1926 年至 2012 年 3 月的夏普是 0.78。解释是:借不到钱的人用高 β 股票代替杠杆,把高 β 的价格买高了。

0.78 是那篇论文里的多空、加杠杆、研究组合。它不是一只低波 ETF 的夏普,也没有扣你的借券费。本轮账户杠杆上限是 1.0(风险政策(docs/risk_policy.md)),复制不了「低 β 一边再加杠杆」这一腿。

4. 主动管理的算术不靠 CAPM

Sharpe (1991, FAJ 47(1)) 是持有人的记账恒等式。扣费之前,全体投资者的市值加权收益等于市场。被动投资者拿到市场之后,主动投资者这个整体在扣费前也等于市场。扣费之后,主动这一整体低于被动,差额是主动这一整体支付的费用。

这不是「CAPM 下的零和」。CAPM 说的是每只资产的 α 期望为 0。Sharpe 1991 在 CAPM 错误时仍然成立:只要收益按市值加权,主动组扣费前就是市场。你要跑赢市场,扣费后必须有别的持有人跑输。回购、指数调整和央行交易会在组别之间搬家,它们没有取消这条市值加权恒等式。

5. APT 只规定线性,不规定名字

Ross (1976, Journal of Economic Theory 13(3)):收益若由有限个共同因子加一个可分散的残差驱动,没有套利时,预期超额是暴露的线性函数。因子叫什么,APT 不回答。后面的文献分三条路填名字:

路线 因子从哪来 代表
宏观 工业生产、通胀、利差 Chen, Roll & Ross (1986, Journal of Business 59(3))
特征组合 按公司特征做多空 Fama–French 三因子、五因子
统计 主成分或带工具变量的主成分 Kelly, Pruitt & Su (2019, JFE 134(3)) 的 IPCA

可交易的特征组合能直接放进 λ。宏观序列还要再变成一套组合收益,个人账户才算得了暴露。统计因子的经济名字不稳定,M11 再谈风险模型里怎么用。

6. 有效市场是一套联合假设

Fama (1970, JF 25(2)) 把信息分成弱、半强、强三档。检验「价格是否已经反映信息」必须先写下一个定价模型。拒绝的时候,分不清是价格错了,还是模型少了一个因子。这就是联合假设。2013 年诺贝尔奖同时给了 Fama 和 Shiller,说明经验研究没有把这一分歧收成一个胜者。

行为金融这边有两块积木。一块是偏差:过度自信、处置效应、对彩票式收益的偏好。Kahneman、Thaler、Shiller 的工作分别连着这些偏差。另一块是套利限制。Shleifer & Vishny (1997, JF 52(1)):套利资金会在错误定价扩大时被赎回,所以价格可以在纠正之前走得更远。做空费用和噪音交易者风险是限制的具体形状。港股中小盘借券少、印花税按成交额收取,限制比美股大盘更紧。限制使错误定价更可能留下,也使学术论文里的空头腿更不可实施。

7. 随机折现因子

m 是危机时刻的救命钱权重:大家最缺钱的坏状态里,一单位消费更值钱,m 就大。 资产若偏偏在这些状态里暴跌,Cov(m, R) 为负,式子要求它提供更高的预期收益。 溢价补偿的是雪中送炭失败的那一部分,不是波动本身的大小。 只做多账户拿不到论文里用来对冲 m 的空头腿,研究组合的夏普不要抄到 ETF 净值上。

Cochrane《Asset Pricing》修订版(Princeton, 2005)把价格写成支付的期望乘上一个随机折现因子 m:

P = E[mX].

把当前价格收成 1,毛收益 R = X/P 满足 E[mR] = 1。无风险毛收益 R^f 满足 E[m] = 1 / R^f。展开协方差:

E[m] E[R] + Cov(m, R) = 1,

E[R] − R^f = −R^f Cov(m, R).

m 在边际效用高的状态下大。资产若在这些状态下收益也低,协方差为负,右边为正,预期收益必须更高。风险补偿在这句话里有一个方向:溢价补偿的是和 m 反向的那部分。

两状态手算。 等概率。m = (1.2, 0.8),毛收益 R = (0.8, 1.3)。

E[m] = 1, R^f = 1.

E[mR] = 0.5 (1.2 × 0.8 + 0.8 × 1.3) = 0.5 (0.96 + 1.04) = 1.

价格收成 1 的条件成立。E[R] = 1.05。

Cov(m, R) = 1 − 1 × 1.05 = −0.05,

E[R] − R^f = −1 × (−0.05) = 0.05.

import numpy as np


def two_state_premium(discount: np.ndarray, gross: np.ndarray) -> float:
    """等概率两状态。溢价等于无风险毛收益乘上与折现因子协方差的相反数。"""
    mean_m = float(discount.mean())
    mean_r = float(gross.mean())
    cov = float(np.mean(discount * gross) - mean_m * mean_r)
    risk_free = 1.0 / mean_m
    return -risk_free * cov

two_state_premium(np.array([1.2, 0.8]), np.array([0.8, 1.3])) 是 0.05。E[mR] = 1,无风险毛收益是 1。

坏状态里 m 高、收益只有 0.8,所以 5 个点的溢价是为这个缺口付钱。净无风险利率在这个例子里是 0,公式里的毛利率才是 1。利率不为 0 时,协方差还要再乘 R^f。

8. 同一笔溢价的两种预测

观察 更像风险补偿 更像错误定价
衰退和高 m 的状态 因子在这些状态里亏损 和这些状态关系弱
发表之后 溢价还在 被交易掉一截(M03 的 McLean & Pontiff)
套利难度 大盘、好借的股票里也在 集中在难做空、小盘、低成交
情绪 不随情绪变 高情绪之后更强(Stambaugh, Yu & Yuan, 2012, JFE 104(2))
公告日 收益摊在整个月 明显堆在盈余公告日(Engelberg, McLean & Pontiff, 2018, JF 73(5))

这些是预测,不是分类器。一个因子可以两条都占。价值在第 9 节的长回撤里像风险,也有人认为账面价值漏掉了无形资产,那是测量问题,第三种可能。


🔴 深入层:French 三因子的月频数字

9. 库里的溢价,不是 ETF 的净值

数据是 Kenneth French 数据图书馆的 F-F_Research_Data_Factors,文件头写明使用 202608 版 CRSP。月频从 1926-07 到 2026-08,1202 个月。2024 年 5 月及之前的一个月国库券来自 Ibbotson,2024 年 6 月起改为 ICE BofA 一个月国库券指数。同一文件后部的年度块是另一套序列。本章全部数字只用月频块,由 plot_ff_factors.py 计算。

年化溢价是月均乘 12,是算术平均,不是 CAGR。波动是月标准差(分母 n − 1)乘 √12。夏普是月均除以月标准差再乘 √12。t 值是月均除以它的 iid 标准误,等于未四舍五入的夏普乘 √(n/12)。Newey–West 用 Bartlett 核,滞后 L = ⌊4(T/100)^(2/9)⌋,自协方差除以 n。点估计不变。

窗口 因子 算术年化 波动 夏普 iid t NW t
1926-07 至 2026-08,n = 1202,L = 6 Mkt-RF 8.35% 18.37% 0.45 4.55 4.41
SMB 1.99% 10.90% 0.18 1.83 1.76
HML 4.22% 12.31% 0.34 3.43 3.11
1963-07 至 1990-12,n = 330,L = 5 Mkt-RF 4.17% 15.89% 0.26 1.37 1.33
SMB 2.78% 10.00% 0.28 1.46 1.22
HML 5.10% 8.86% 0.58 3.02 2.66
1991-01 至 2025-12,n = 420,L = 5 Mkt-RF 9.46% 15.08% 0.63 3.71 3.71
SMB 0.92% 10.83% 0.08 0.50 0.55
HML 2.12% 11.29% 0.19 1.11 0.93

1963 年 7 月是 Fama–French 使用账面价值之后的常用起点,因为更早的 Compustat 覆盖薄。它不是在本章里搜出来的最优起点。

全样本把市场超额加上国库券再连乘,CAGR 是 10.38%。市场总收益的算术年化是 11.59%。缺口和 M04 的波动拖累同向。多空因子的曲线是自融资收益的连乘,没有扣借券、价差和冲击。SMB 换手高,1.99% 的算术溢价不是可实施收益。

HML 一阶自相关 0.196,全样本 NW t 从 3.43 降到 3.11,结论仍离开 0。1991–2025 的 HML,iid t 只有 1.11,NW t 0.93。规模因子在这段里 t 值约 0.5。把 1926 年以来的 1.99% 当成今后小盘倾斜的预期,用的是后一段样本没有再现的均值。

左:市场总收益与 SMB、HML 自融资组合的累计倍数。右:HML 相对前高的回撤,低点在 2020 年 9 月。

HML 自融资净值的最大回撤是 −57.78%,高点 2006-12,低点 2020-09。2022 年月频连乘:Mkt-RF −21.04%,SMB −7.35%,HML +31.74%,市场总收益(超额加国库券)−19.92%。价值定义下的多空在市场大跌的这一年是正的。这是同一个 HML,不是另一套「改进价值」。

这些组合是美国研究组合。港股印花税和借券不会出现在图里。杠杆上限 1.0 的账户拿到的是多头腿加上市场暴露,不是图上的自融资曲线。

10. 估值模型是另一条信号

GK 第 8–9 章把股利贴现和一致预期接进主动仓位。对本章的式子来说,估值模型是在生产一个预测,这个预测仍要经过 M06 的排序和回归,才知道它是 α 还是又一个 β。本章不把贴现率公式当成已经检验过的因子。


真实案例

案例 1:规模溢价在后一段窗口里很薄

1926-07 至 2026-08,SMB 算术年化 1.99%,iid t = 1.83,NW t = 1.76。1963-07 至 1990-12 是 2.78%,t = 1.46。1991-01 至 2025-12 是 0.92%,t = 0.50,NW t = 0.55。早期论文里的小盘溢价,不是这段 35 年的月均能够单独支撑的结论。

个人账户若用「小盘长期有 2%」来提高仓位,用的是全样本均值。可实施的版本还要再减换手。港股按成交额收印花税,高换手的小盘倾斜比美股研究组合更贵。这个案例不说明小盘永远没有溢价。它说明:窗口一换,t 值可以掉到 0.5 附近。

案例 2:HML 的长回撤,以及 2022 年的反向

自融资 HML 从 2006-12 的前高跌到 2020-09,累计 −57.78%。Arnott, Harvey, Kalesnik & Linnainmaa (2021, FAJ 77(1)) 认为账面权益漏掉无形资产,传统价值的测量在变差。风险补偿的说法则把这段看成溢价的兑现方式:持有价值的人要熬过这种回撤。联合假设下,两种说法可以同时不被拒绝。本章的贡献只是把这段回撤钉在 French 月频文件上。

2022 年的月频连乘给了相反的一年:市场总收益 −19.92%,HML +31.74%。若价值的溢价来自某些市场下跌的状态,这一年符合那个方向。一年证明不了机制。它只禁止把「价值已经永久失效」写成 2020 年低点之后的唯一读法。

案例 3:BAB 的 0.78 不是低波 ETF

Frazzini & Pedersen (2014) 的美股 BAB,样本 1926 年至 2012 年 3 月,夏普 0.78。组合是低 β 加杠杆、高 β 减杠杆,并且做成 β 中性。论文把溢价归于融资约束:受约束的人买高 β,不受约束的人提供相反的一边。

M04 把本轮杠杆钉在 1.0。融资约束理论里「受约束的投资者」,包含这个上限下的个人账户。只做多低波股票,留下了市场 β,也没有论文里的空头腿。把 0.78 当成这类 ETF 的预期夏普,是把研究组合的夏普抄到了另一个头寸上。

方法论来源

概念 / 模型 核心文献或规范出处
CAPM Sharpe (1964), JF 19(3);Lintner (1965);Mossin (1966), Econometrica 34(4)
证券市值线偏平 Black, Jensen & Scholes (1972);Fama & MacBeth (1973), JPE 81(3)
三因子 Fama & French (1992), JF 47(2);French 月频文件;沿用已经下载的那份,本章不再另下
低风险 Frazzini & Pedersen (2014)。BAB 夏普不是低波动 ETF 的夏普
主动投资者合计 Sharpe (1991), FAJ 47(1)
套利定价 Ross (1976), Journal of Economic Theory 13(3)
宏观因子 Chen, Roll & Ross (1986), Journal of Business 59(3)
有效市场三档 Fama (1970), JF 25(2)
图 figures/M05/plot_ff_factors.py

💡 思考回顾与巩固

核心认知纠偏

误区 反例 用法
跑赢指数的部分就是 α 统一式子里,相对市场多出来的可以全是别的 β′λ 先写模型,再谈残差
CAPM 证明主动管理是零和 Sharpe (1991) 是市值加权恒等式,不依赖 CAPM 扣费前主动组等于市场;扣费后主动组更低
French 文件里的年度行可以和月频连乘 年度块是另一套构造。2022 年 HML 月频连乘是 +31.74% 只使用 YYYYMM 那一段
把 Mkt-RF 连乘当成市场财富 市场总收益还要加当月 RF。全样本 CAGR 是 10.38%,算术年化是 11.59% 图上的灰线含国库券
SMB 全样本 1.99% 就是今后的小盘溢价 1991–2025 年化 0.92%,t = 0.50 同时报告后一段窗口
HML 的 t = 3.43 证明价值是风险补偿 t 值只拒绝「月均是 0」。它不区分第 8 节的两列 回撤、公告日、发表后衰减另做
低波 ETF 继承了 BAB 的夏普 0.78 0.78 含杠杆和空头,样本止于 2012 年 3 月 杠杆上限 1.0 的账户对不上这张组合

费曼自测

  1. 为什么异象一定要标明是相对哪一个模型?
  2. 四期例子里 ˆβ = 1.5、t = 4.74,为什么仍不能声称这只股票有显著的市场暴露?
  3. 坏状态里 m 高。一只在坏状态里收益也高的资产,预期超额该高还是该低?
  4. 1991 年之后 SMB 的 t 值约 0.5。这是否推翻了 1926 年以来的规模溢价?
自测要点 1. α 是统一式子的残差。模型从只有市场换成市场加价值,原来的价值溢价从 α 改记到 β′λ。不写模型,异象没有定义。 2. 自由度是 2,临界值 4.303,4.74 只在这个四期样本里过线。标准误的公式假定残差同方差、无序列相关。四期做不到这些诊断。它是手算,不是定价检验。 3. 该低。E[R] − R^f = −R^f Cov(m, R)。坏状态里两边都高,协方差为正,溢价为负。投资者为了在坏状态里有钱,愿意接受更低的预期收益。 4. 没有推翻全样本的月均。全样本 t 仍是 1.83。它推翻的是「后 35 年单独看,月均离开 0」这句话。用哪一段做预期,要事先写明,不能看见 t 值之后再选。

四维习题

A. 概念题

  1. 用统一式子定义因子、多因子模型和异象。为什么换模型之后异象可以消失?
  2. CAPM 的 α = 0 和 Sharpe (1991) 各约束了谁?
  3. 列出三种能把风险补偿和错误定价拆开的观察,并各写一句它们的预测。
  4. APT 没有规定因子的名字。三条补名字的路线分别拿出什么对象?

B. 计算题

  1. β = 1.3,市场预期超额 5%,无风险利率 4%。CAPM 预期收益是多少?若样本平均收益是 12%,α 是多少?这里的 12%、5%、4% 必须是同一频率。
  2. 市场、规模、价值的暴露是 1.0、0.6、0.4,年化溢价是 5%、2%、3%。模型给出的预期超额是多少?实际年化超额 9% 时,α 是多少?
  3. 用第 3 节的四期数据复核 ˆβ、s² 和 t(ˆβ)。自由度是多少?
  4. 两状态例子里,把坏状态的毛收益从 0.8 改成 1.2,好状态仍为 1.3,m 不变。先说明 E[mR] 还等不等于 1,再说明不能直接用溢价公式。

C. 编程实战题

  1. 用 French 月频三因子复现第 9 节的三张窗口表。确认没有把年度块乘进去。
  2. 计算 HML 自融资净值的最大回撤,以及高点和低点的月份。
  3. 对 2022 年十二个月做连乘,分别打印 Mkt-RF、SMB、HML 和市场总收益。

D. 个人实战思考题

  1. 你的超额若相对标普 500 是 3%。写出把它拆成市场以外的 β 和残差所需要的最低数据。
  2. 港股中小盘难借券。这对「错误定价会留在难做空的股票里」和「你能否拿到论文里的多空收益」分别意味着什么?
  3. 杠杆上限 1.0。BAB 论文里的哪一条腿是你的政策直接排除的?
完整参考答案与解析 **A1.** 因子是进入 λ、且 λ 的对应分量不为 0 的组合。多因子模型是选定的那组 (β, λ),并要求各资产 α 靠近 0。异象是这个要求失败的地方。换模型等于把原来的残差重新投影到新的 β 上,残差可以因此变小。价值相对 CAPM 是异象,相对 Fama–French 三因子是 λ 里的一项。 **A2.** CAPM 约束每只资产:预期超额等于 β 乘市场超额,截距为 0。Sharpe (1991) 约束持有人整体:扣费前的市值加权等于市场,所以主动组扣费前等于市场,扣费后低于被动组。前者是均衡模型,后者是会计恒等式。 **A3.** 坏状态:风险补偿预测因子在衰退或高 m 的状态亏损,错误定价不依赖这些状态。发表后:错误定价预测溢价被交易掉一截,风险补偿预测溢价还在。套利限制:错误定价预测溢价集中在难做空的股票,风险补偿预测在好借的大盘里也同样存在。公告日和情绪可以作为另外两条,预测方向见第 8 节的表。 **A4.** 宏观路线拿出经济变量,还要把变量映射成组合收益。特征路线直接拿账面市值比、市值、盈利这类排序组合。统计路线拿出主成分或 IPCA 的因子,名字要事后解释。 **B5.** 4% + 1.3 × 5% = 10.5%。α = 12% − 10.5% = 1.5%。若 12% 是十年里的 CAGR,而 5% 是算术预期,两者不能相减。本题按题面把三个数都当成同一频率的期望或样本平均。 **B6.** 1.0 × 5% + 0.6 × 2% + 0.4 × 3% = 7.4%。α = 9% − 7.4% = 1.6%。这是把溢价当成已知常数。French 表里的溢价随窗口变,1.6% 不是一个可以外推的 α。 **B7.** Σ x² = 0.003,Σ xy = 0.0045,ˆβ = 1.5,ˆα = 0。残差平方和 0.0006,s² = 0.0003,se(ˆβ) = √0.1 = 0.3162,t = 4.74。自由度 n − 2 = 2。 **B8.** E[mR] = 0.5 (1.2 × 1.2 + 0.8 × 1.3) = 0.5 (1.44 + 1.04) = 1.24 ≠ 1。价格不再是 1,R 不是这组 m 下的毛收益。溢价公式的前提 E[mR] = 1 不成立,不能把 −R^f Cov(m, R) 当成这组数字的预期超额。 **C9–C11.** 与 `figures/M05/plot_ff_factors.py` 同一契约,脚本已对 202608 版文件运行。月频 1926-07 至 2026-08,1202 个月。三窗口的年化、夏普和 t 值就是第 9 节的表。HML 最大回撤 −57.78%,高点 2006-12,低点 2020-09。2022 年连乘:Mkt-RF −21.04%,SMB −7.35%,HML +31.74%,市场总收益 −19.92%。
import math
from pathlib import Path
import zipfile

import pandas as pd

ZIP = Path("knowledge/books/figures/M05/_cache/F-F_Research_Data_Factors_CSV.zip")
# 年度块从空行之后开始。空行处停,避免把年度收益当成月收益连乘。
raw = zipfile.ZipFile(ZIP).read("F-F_Research_Data_Factors.csv").decode("latin1")
lines = raw.splitlines()
start = next(i for i, line in enumerate(lines) if line.startswith(",Mkt-RF"))
rows = []
for line in lines[start + 1 :]:
    if not line.strip():
        break
    parts = [part.strip() for part in line.split(",")]
    if len(parts[0]) != 6:
        break
    rows.append(parts)
frame = pd.DataFrame(rows, columns=["date", "Mkt-RF", "SMB", "HML", "RF"])
for column in frame.columns[1:]:
    frame[column] = pd.to_numeric(frame[column]) / 100.0
**D12.** 至少需要:你的账户月超额、同期的市场超额,以及你怀疑的规模、价值或动量组合收益。时序回归的截距才是这个模型下的 α。只有相对标普 500 的 3%,分不清是小盘、价值还是残差。回归要用当时已有的因子,不能用事后才公布的修订持仓。 **D13.** 难借券使空头套利更贵,错误定价更可能留在这些股票的多头价格里。论文里的多空收益包含那条空头。你若只能做多,拿到的是多头腿的收益减费用,不是论文里的多空 α。印花税按双边成交额收取,换手越高,这个差距越大。 **D14.** BAB 把低 β 一边加杠杆,使组合的 β 接近 0。杠杆上限 1.0 排除的就是这一边的杠杆,而不只是「少买高 β」。只降低高 β 权重,留下的仍是一个正 β 的多头组合。

📌 章节知识总结

一句话核心洞察

  1. α 是模型的残差。不写 β′λ,就把因子暴露叫成了超额。
  2. CAPM 要求每只资产的截距为 0。Sharpe (1991) 要求主动投资者整体在扣费前等于市场。两句话的前提不同。
  3. French 月频全样本:市场超额算术年化 8.35%(t = 4.55),HML 4.22%(t = 3.43),SMB 1.99%(t = 1.83)。1991–2025 的 SMB 只有 0.92%,t = 0.50。
  4. HML 自融资净值从 2006-12 到 2020-09 回撤 57.78%。2022 年同一个 HML 月频连乘为 +31.74%。
  5. BAB 的夏普 0.78 是加杠杆的 β 中性多空。杠杆上限 1.0 的账户复制的不是这张组合。

公式与窗口

对象 表达式或数值 前提
统一式 E[Rᵢ] − R_f = αᵢ + βᵢ′λ 溢价和收益同一频率
CAPM E[Rᵢ] − R_f = βᵢ(E[Rₘ] − R_f) 单期、可同一利率借贷、预期一致
β Cov/Var 样本回归的斜率是估计
回归标准误 s² = SSE / (n − 2) 四期例子自由度是 2,临界值 4.303
SDF E[R] − R^f = −R^f Cov(m, R) E[mR] = 1,R^f 是毛收益
算术年化 月均 × 12 不是 CAGR
因子夏普 月均 / 月标准差 × √12 SMB、HML 不再减 R_f
NW 滞后 ⌊4(T/100)^(2/9)⌋ 全样本 T = 1202 时 L = 6
月频文件 1926-07 至 2026-08 不含文件后部的年度块
BAB 夏普 0.78 Frazzini & Pedersen,美股,至 2012-03

跨模块

结论 交给 位置
残差才是这个模型的 α 业绩归因 M14
排序、Fama–MacBeth、IC 因子检验 M06
杠杆上限使 BAB 的低 β 腿不可复制 仓位闸门 docs/risk_policy.md,M04
月频因子的 t 值与 HAC 标准误不要只用 iid M01 的 Newey–West
印花税吃掉高换手的规模倾斜 成本 M00、M03

学习指引

概念卡片:Newey–West 调整

  • 精读:因子第 1 章如何把四个词放进同一个式子。GK 第 2 章的 CAPM 假设。Sharpe (1991) 只有几页,读的是恒等式的主语是谁。
  • 对照:French 月频文件以脚本下载的那一版为准。书上的 A 股表格不要和这张美股表对减。
  • 项目:本章不新增交易因子。src/quant/risk/volatility.py 里的协方差是风险预算,不是 Fama–French 的 λ。
  • 下一步:M06 把「α 是否离开 0」做成排序和回归的操作步骤。

自检清单

  • 能指出 α 依赖哪一个模型
  • 能手算四期 ˆβ = 1.5 和 t = 4.74,并说明自由度是 2
  • 能复述三窗口里 SMB 与 HML 的算术年化和 t 值
  • 能把 HML 的 −57.78% 放回 2006-12 至 2020-09
  • 能说明 BAB 的 0.78 为什么不能当作低波 ETF 的预期夏普