基本面定律 Grinold-Kahn:用信息比率拆解主动管理的收益上限
一个主动经理到底能跑赢多少?Grinold-Kahn 基本面定律用 IR = IC × √BR 一句话给出上限。本文从零复现:IC 0.05/BR 250 的经理理论 IR 0.79,而 IC 0.15/BR 400 能冲到 2.0;并证明「翻倍预测技巧 = 翻四倍下注广度」的等价关系,以及约束(TC)如何把 IR 砍掉 40%,附完整 Python 与五类真实陷阱(中阶)。
你是一个主动基金经理。老板问你:「明年能跑赢基准几个点?」你心里没底。
更残酷的问题是:即使你预测准了,你的收益上限到底在哪?
这不是拍脑袋能答的。但 Grinold(1989)和 Grinold-Kahn(2000)给了量化圈一句最值钱的话——基本面定律(Fundamental Law of Active Management):
- IR(Information Ratio,信息比率) = 年化主动收益 ÷ 年化主动风险。它衡量你「每冒一单位主动风险,换回多少超额收益」,是主动管理能力的标尺。
- IC(Information Coefficient,信息系数) = 你的预测值与实际结果的相关系数。它衡量你的预测技巧——你能看多远。
- BR(Breadth,广度) = 你每年独立下注的次数。它衡量你出手多频繁。
一句话:你的超额收益上限,只由「你有多准」和「你出手多勤」决定,且广度在根号下。
本文用蒙特卡洛从零复现这条定律,并拆穿五个真实陷阱——包括一个反直觉的等价关系:把 IC 翻倍,等价于把 BR 翻四倍。
一、为什么是「根号 BR」,而不是「BR」#
直觉上,下注次数越多,总收益该线性叠加(BR 倍)。但风险也叠加,且是根号叠加(独立下注的方差相加,标准差取 √BR)。
主动收益(均值)随 BR 线性增长,主动风险(标准差)随 √BR 增长,所以 IR = 收益/风险 ∝ BR/√BR = √BR。
这就是根号的来源。广度是被「风险折扣」过的——你多做的每一次独立下注,只按 √ 的速度提升你的信息比率。
import numpy as np
def simulate_manager(ic, br, years=4000, seed=2026):
"""模拟一个主动经理 years 年, 每年 BR 次独立下注。
z_t ~ N(0,1) : 真实主动收益(以标准差为单位)
s_t = ic*z_t + √(1-ic²)*e_t : 经理的预测信号, 与 z 相关 IC
经理按信号比例建仓 w_t ∝ s_t, 主动盈亏 = w_t * z_t
年主动收益 = 平均单笔盈亏 * √BR (标准化使年化主动波动≈1)
多年平均后 IR ≈ ic*√br / √(1+ic²)
"""
rng = np.random.default_rng(seed)
annual = np.zeros(years)
for y in range(years):
z = rng.normal(0, 1, br)
e = rng.normal(0, 1, br)
s = ic * z + np.sqrt(max(1 - ic ** 2, 0)) * e
bets = s * z # 比例建仓
annual[y] = bets.mean() * np.sqrt(br)
return annualpython注意一个小细节:simulate_manager 里我用了比例建仓(bets = s * z),而不是 sign(s)。这是关键——IR=IC·√BR 的推导基于「下注量与信号幅度成正比」的最优比例。如果你只用方向(sign),模拟 IR 会系统性偏低(因为丢掉了信号强弱信息)。
二、定律长什么样:IR 随 √BR 增长#
把 IR = IC·√BR 画出来,横轴用对数(广度常跨好几个数量级):
import numpy as np
import matplotlib.pyplot as plt
brs = np.linspace(1, 1000, 400)
ics = [0.02, 0.05, 0.10, 0.15]
for ic in ics:
ir = ic * np.sqrt(brs)
plt.plot(brs, ir, label=f"IC = {ic}")
plt.xscale("log"); plt.xlabel("广度 BR (每年独立下注次数)")
plt.ylabel("信息比率 IR = IC × √BR"); plt.legend()python
图 1:对数横轴下,IR 关于 BR 是一条直线——这正是 √ 关系在对数轴上的特征。四条线对应四种预测技巧,IC 越高线越陡。
对数轴上直线,意味着:广度每扩大一个数量级,IR 只涨 √10 ≈ 3.16 倍,而非 10 倍。广度是「奢侈品」,靠堆次数很难无限拉高 IR。
三、IR 响应曲面:IC × BR 怎么配合#
单一曲线不够直观,我们用热力图看 IC 和 BR 的二维配合,并叠一条等高线:
ic_grid = np.linspace(0.01, 0.20, 40)
br_grid = np.linspace(5, 500, 40)
IC, BR = np.meshgrid(ic_grid, br_grid)
IR = IC * np.sqrt(BR)
# 标注两个真实经理点
# IC=0.05, BR=100 -> IR≈0.5 (普通选股经理)
# IC=0.10, BR=250 -> IR≈1.58 (高技巧广覆盖)python
图 2:曲面越亮 IR 越高。白线是 IR=0.5/1.0/1.5/2.0 的等高线。红点(IC=0.05,BR=100)落在 IR≈0.5 附近——这是大多数主动股票经理的真实位置;黄点(IC=0.10,BR=250)冲到 IR≈1.58,已经是顶级水准。
四、蒙特卡洛实跑:四种经理画像#
理论很美,但模拟能不能复现?我们用 4000 年蒙特卡洛(每次独立重抽)对照四类经理,并加上约束效应:
scenarios = [
("高技巧少机会", 0.15, 25),
("中等技巧中机会", 0.05, 250),
("低技巧广撒网", 0.02, 1000),
("高技巧广撒网", 0.10, 400),
]
for name, ic, br in scenarios:
ann = simulate_manager(ic, br, years=4000)
ir_sim = ann.mean() / ann.std(ddof=1) # 实测 IR
ir_theory = ic * np.sqrt(br) # 理论 IR
ir_tc = ir_theory * 0.6 # 约束 TC=0.6 砍掉 40%python实跑结果:
| 经理画像 | IC | BR | 理论 IR | 模拟 IR | TC=0.6 后 |
|---|---|---|---|---|---|
| 高技巧少机会 | 0.15 | 25 | 0.750 | 0.730 | 0.450 |
| 中等技巧中机会 | 0.05 | 250 | 0.791 | 0.790 | 0.474 |
| 低技巧广撒网 | 0.02 | 1000 | 0.632 | 0.643 | 0.379 |
| 高技巧广撒网 | 0.10 | 400 | 2.000 | 1.963 | 1.200 |

图 3:蓝=理论,绿=模拟(几乎重合,验证定律),红=施加约束 TC=0.6 后。看「高技巧广撒网」:理论 IR 2.0,但一旦预测无法完全转化为持仓(TC=0.6),直接砍到 1.2。
三个能记住的数字:
- IC 0.15、BR 25 的「神准但出手少」经理,IR 只有 0.73——预测再准,不常出手也白搭。
- IC 0.05、BR 250 的「平庸但高频」经理,IR 反而有 0.79——靠广度弥补技巧。
- IC 0.10、BR 400 的「又准又勤」经理,IR 冲到 2.0——这是定律给的封顶区。
五、反直觉的等价关系:翻倍 IC = 翻四倍 BR#
把定律变形:IR = IC·√BR。要让 IR 翻倍,可以:
- IC → 2·IC,则 IR → 2·IR(直接翻倍);
- 或 √BR → 2·√BR,即 BR → 4·BR(翻四倍)。
把预测技巧翻倍,等价于把下注广度翻四倍。 验证一下:
ic, br = 0.05, 100
print(ic * np.sqrt(br)) # 0.500
ic, br = 0.05, 400
print(ic * np.sqrt(br)) # 1.000 (BR×4 -> IR×2, 等价于 IC 翻倍)python这解释了行业里一个长期困惑:为什么「提升选股命中率」这么难,大家却都去「多做策略/多覆盖标的」? 因为 IC 从 0.05 提到 0.10 极难(预测技巧的天花板),而 BR 从 100 扩到 400(多覆盖 3 倍标的、或加高频信号源)相对容易。广度是性价比更高的杠杆——虽然它在根号下,但好歹是「可规模化」的那一侧。
六、扩展形式:约束系数 TC#
现实里你的预测无法 100% 转化为持仓。Grinold-Kahn 扩展形式:
- TC(Transfer Coefficient,转移系数) ∈ [0,1]:预测转化为实际主动敞口的程度。完全无约束(TC=1)→ 纯粹定律;强约束(TC→0,如严格的行业中性、个股权重上限、现金拖累)→ IR 被按比例砍。
上面图 3 的红色柱就是 TC=0.6:每个经理的 IR 都被砍掉 40%。这恰恰是很多「模型很准、实盘很烂」的根源——约束是必须的(风控、流动性、合规),但它直接吃掉 IR。你以为自己 IR 2.0,扣掉约束可能只剩 1.2。
七、五类真实陷阱#
- IC 不可观测,你用的是「样本内 IC」:真实 IC 是预测与未来的远期相关,但回测里你只能算历史 IC。幸存者偏差、前视填充会让样本内 IC 虚高,代入定律后给出虚假的 IR 上限。务必用样本外/purged k-fold 估计 IC。
- BR 不是「交易次数」,是「独立下注次数」:你一年交易 5000 次,但如果都是同一只股票的日内反复,独立下注可能只有几十次。BR 要求统计独立——相关信号要折算(如把动量家族 40 个变体算作 1 个独立维度)。滥用 BR 会让定律高估 IR。
- 定律假设下注独立且同分布:真实市场里信号会拥挤、会相关结构突变。当 BR 个下注彼此相关,总方差不再是简单相加,√BR 缩放失效——此时真实 IR 低于 IC·√BR。
- TC 不是常数:市场极端时,流动性约束、涨停板、停牌会把 TC 从 0.6 砸到 0.2,IR 同步塌方。用平静期的 TC 去推算危机期的 IR 上限,会严重高估。
- IR 是比率,不是绝对值:定律给的是「每单位主动风险的超额回报」。如果你的策略主动风险被杠杆放大,K 倍杠杆把 IR 保持不变(分子分母同乘 K),但绝对亏损也 K 倍——定律不保证「绝对安全」,只保证「风险调整后效率」。
八、结论#
基本面定律不是一句鸡汤,而是主动管理最锋利的体检表:
- IR = IC·√BR 把「你能跑赢多少」拆成两个可改进旋钮——预测技巧(IC)与出手频率(BR)。
- 广度在根号下:靠堆 BR 提升 IR 是慢路,但它是唯一可规模化的杠杆;翻倍 IC 等价于翻四倍 BR。
- 约束 TC 是隐藏税:模型再准,从预测到持仓的每一步损耗都在吃 IR,TC=0.6 直接砍 40%。
- 模拟实跑(高技巧少机会 IR 0.73、中等技巧中机会 0.79、高技巧广撒网 2.0)与理论几乎重合,定律经得起蒙特卡洛检验。
下次老板问「明年能跑赢几个点」,你不该拍脑袋,而该反问他:「我的 IC 现在多少?BR 多少?约束 TC 多少?」——把这三个数填上,收益上限自己就出来了。
本文数据均为自洽合成(AR 信号与真实收益相关 IC,比例建仓),仅用于演示方法。真实落地时:用样本外/purged k-fold 估计 IC、把相关信号聚合成独立 BR 维度、分 regime 估计 TC、并对 IR 上限做压力情景(危机期 TC 坍塌)。代码已全部跑通,数字即输出。