二、风险因子理论:APT套利定价理论、Fama-French三因子模型、Barra风险模型概述
好,咱们进入第二章。这一章我打算聊聊风险因子理论。说实话,这部分内容在量化圈里属于「地基」级别的存在。你想想看,如果你连风险来源都说不清楚,那你的统计套利策略凭什么赚钱?凭什么扛住回撤?
我个人习惯把风险因子理论分成三个层次来讲:APT 是理论框架,Fama-French 是实证发现,Barra 是工程实现。这三者层层递进,缺一不可。
2.1 APT套利定价理论:多因子的理论基石
APT,全称 Arbitrage Pricing Theory,中文叫套利定价理论。这玩意儿是 Stephen Ross 在 1976 年搞出来的。它的核心思想其实很简单:资产的预期收益,是由多个共同因子驱动的。
为什么说它重要?因为 CAPM(资本资产定价模型)只认一个因子——市场收益。但现实中,你我都知道,股票涨跌哪能只跟大盘走?行业政策、利率变化、通胀预期,哪个不是影响因素?
APT 的数学表达式长这样:
E(R_i) = R_f + β_i1 * λ_1 + β_i2 * λ_2 + ... + β_ik * λ_k
其中:
E(R_i)是资产 i 的预期收益R_f是无风险利率β_ij是资产 i 对因子 j 的暴露度(因子载荷)λ_j是因子 j 的风险溢价
说白了,APT 告诉我们:你赚的每一分钱,都可以拆解成对某些因子的暴露。我在项目中遇到过不少新手,上来就搞统计套利,结果回测曲线漂亮得不行,一上实盘就崩。为什么?因为他没搞清楚自己的策略到底暴露在哪些因子上。APT 就是帮你做这个「拆解」的。
核心要点:APT 不指定具体有哪些因子,它只提供一个框架。具体选什么因子,那是 Fama-French 和 Barra 要干的事。
2.2 Fama-French三因子模型:从理论到实证的跨越
1992 年,Fama 和 French 两位大佬发表了一篇论文,直接把 CAPM 按在地上摩擦。他们发现,除了市场因子,还有两个因子能显著解释股票收益的差异:规模因子(SMB) 和 价值因子(HML)。
三因子模型的公式:
E(R_i) - R_f = β_i * (E(R_m) - R_f) + s_i * SMB + h_i * HML + α_i
其中:
SMB(Small Minus Big):小市值股票组合收益减去大市值股票组合收益HML(High Minus Low):高账面市值比股票组合收益减去低账面市值比股票组合收益α_i是超额收益,也就是你的策略「真本事」
嗯,这里要注意:α 才是我们做统计套利真正想赚的钱。如果你发现自己的策略 α 不显著,那说明你的收益其实只是因子暴露的「伪装」。
我曾经帮一个团队复盘他们的配对交易策略,回测年化收益 18%,结果用三因子模型一拆,α 只有 2%,剩下的全是小市值因子贡献的。后来市场风格一转,小盘股暴跌,策略直接亏了 30%。你说惨不惨?
个人建议:每次回测完策略,先用 Fama-French 三因子模型跑一遍回归。如果 α 不显著,趁早放弃,别浪费时间。
2.3 Barra风险模型:量化投资的工业级标准
如果说 Fama-French 是学术界的「发现」,那 Barra 就是工业界的「标准」。Barra 模型最早由 MSCI 公司开发,现在几乎成了量化机构的风控标配。
Barra 模型的核心思路是:把风险拆解成一个个可解释、可计算、可对冲的因子。常见的 Barra 因子包括:
- 风格因子:市值、估值、动量、波动率、流动性等
- 行业因子:申万一级行业、GICS 行业等
- 国家因子:市场整体收益
Barra 模型的数学形式:
r = X * f + u
其中:
r是股票收益向量X是因子暴露矩阵f是因子收益向量u是特异性收益(残差)
你想想看,有了这个模型,你就可以回答一个关键问题:我的投资组合到底在赌什么?
下面这张图是我自己画的,帮你理清这三个模型的关系:
2.4 三个模型在统计套利中的实际应用
好了,理论讲完了,咱们聊聊怎么用。我直接给你一个实战流程:
- 第一步:用 APT 思维搭建因子候选池
别上来就拍脑袋选因子。先想清楚:你的策略可能暴露在哪些风险上?市场、行业、风格、宏观?列个清单。
- 第二步:用 Fama-French 做因子筛选
跑回归,看哪些因子对你的策略收益有显著解释力。不显著的因子,直接扔掉。
- 第三步:用 Barra 做风险预算
计算每个因子的风险贡献,设定暴露上限。比如,我一般会把市值因子的暴露控制在 ±0.5 个标准差以内。
避坑指南:我曾经犯过一个错误——只用了 Fama-French 三因子做风险归因,结果忽略了行业因子。后来一个行业黑天鹅事件,我的组合一天亏了 5%。从那以后,我每次做风险模型都会加上行业因子。Barra 模型里行业因子是标配,别省。
2.5 一个简单的风险归因代码示例
最后,给你看一段 Python 代码。这是我平时做风险归因的模板:
import pandas as pd
import statsmodels.api as sm
# 假设你有一个策略的日度收益序列
# strategy_returns: pd.Series, index=日期, values=收益率
# factor_returns: pd.DataFrame, columns=['MKT', 'SMB', 'HML']
# 合并数据
data = pd.concat([strategy_returns, factor_returns], axis=1).dropna()
y = data['strategy']
X = data[['MKT', 'SMB', 'HML']]
X = sm.add_constant(X)
# 跑 OLS 回归
model = sm.OLS(y, X).fit()
print(model.summary())
# 看 alpha 是否显著
alpha = model.params['const']
p_value = model.pvalues['const']
print(f'Alpha: {alpha:.4f}, p-value: {p_value:.4f}')
# 如果 p-value > 0.05,说明 alpha 不显著
# 你的策略收益基本就是因子暴露的功劳
这段代码虽然简单,但非常实用。我每次开发新策略,第一件事就是跑这个。如果 α 不显著,我会直接放弃这个策略,或者重新调整因子暴露。
好了,这一章就到这里。记住一句话:不懂风险因子,就别做统计套利。下一章咱们聊聊具体的统计套利策略构建,到时候这些因子理论会派上大用场。