暗中指数化与 Active Share:你付的主动管理费买到了什么
一只基金名叫「主动精选」,收你 1% 管理费,持仓却 95% 贴着沪深300。Cremers 的 Active Share 量化了这种「暗中指数化」:AS = 0.5·Σ|w_i − w_bench|。本文用可复现模型证明,当基金管理人技能固定时,管理费会吃掉低 Active Share 基金的全部主动收益——盈亏平衡阈值恰好落在 AS≈0.25,与学界实证吻合。附三张真实计算图(毛/净主动收益、TE-IR、权重偏离对比)与全部陷阱标注(中阶)。
你买一只「主动管理」基金,付 1% 管理费,期待它跑赢指数。打开持仓一看:前十大重仓和沪深300 几乎一样,行业暴露几乎一样,连个股权重都差不到 0.5%。基金经理做的事,本质是用 1% 的费用,卖给你一份指数增强(还不一定增强得了)。
这种行为叫 closet indexing(暗中指数化 / 伪主动)。2009 年 Cremers 和 Petajisto 用一个漂亮的量把这件事钉死——Active Share:
Active Share = 0.5 × Σ_i |w_i^port − w_i^bench|plaintext它衡量组合权重相对基准「偏离了多少」。AS=1 是完全主动(和基准毫无关系),AS=0 是纯指数。学界经验阈值:AS < 0.20 基本就是 closet indexing,你付的主动费用买不到主动。
本文要算的是:给定管理人有真实技能,为什么低 AS 基金扣费后一定亏?答案不在道德,在算术。
一、核心算术:技能只能靠「主动偏离」表达#
先建立一个透明、可复现的模型。假设一个管理人拥有真实的横截面选股技能,但技能只能通过对基准的主动偏离来表达(这本身就是 closet indexing 问题的本质——你不敢偏离,技能就无处落地)。
定义:一个**完全主动(AS=1)**的组合,扣费前年化毛 alpha 为 GROSS_FULL,对应年化跟踪误差 TE_FULL。当基金把主动偏离度降到 AS = a 时,毛主动收益和跟踪误差都按线性比例缩放:
毛主动收益(年) = a · GROSS_FULL
跟踪误差(年) = a · TE_FULLplaintext而管理费是固定一笔:无论你多主动,都收 FEE/年(真实主动基金常 1% 左右,跟 AS 无关)。于是:
净主动收益(年) = a · GROSS_FULL − FEEplaintext盈亏平衡条件一目了然:
a* = FEE / GROSS_FULL # 净主动收益 = 0 的临界 Active Shareplaintext低于 a,你扣费后主动收益为负*——你付了主动的钱,买到的是负的主动暴露。这就是 closet indexing 的数学死刑。
蒙特卡洛实现#
我们固定 GROSS_FULL=4.0%、TE_FULL=5.0%、FEE=1.0%,扫 AS 从 0.02 到 0.95,每条跑 400×240 月取分布:
import numpy as np
GROSS_FULL = 0.040 # 完全主动(AS=1)年化毛 alpha
TE_FULL = 0.050 # 对应年化跟踪误差
FEE = 0.010 # 主动基金管理费/年(固定)
T, mc = 240, 400
rng = np.random.default_rng(20260828)
def simulate_active_fund(a, n=mc, t=T, seed=0):
r = np.random.default_rng(seed)
mu_m = a * GROSS_FULL / 12.0 # 毛主动收益月度均值
sig_m = (a * TE_FULL) / np.sqrt(12.0) # 使年化 TE = a*TE_FULL
active = r.normal(mu_m, sig_m, size=(n, t))
net = active - FEE / 12.0 # 扣固定管理费
return active, net
as_grid = np.array([0.02,0.05,0.10,0.20,0.30,0.40,0.55,0.70,0.85,0.95])
for a in as_grid:
active, net = simulate_active_fund(a, seed=int(a*1e6)+5)
mean_gross = active.mean()*12
mean_net = net.mean()*12
te = active.std(ddof=1)*np.sqrt(12)
ir = mean_net / te
print(f"AS={a:.2f} 毛主动={mean_gross*100:.2f}% 净主动={mean_net*100:.2f}% TE={te*100:.1f}% IR={ir:.2f}")python跑出来的结果(种子固定,可复现):
AS=0.02 毛主动= 0.08% 净主动(扣费)= -0.92% TE= 0.1% IR=-9.24
AS=0.05 毛主动= 0.20% 净主动(扣费)= -0.80% TE= 0.2% IR=-3.21
AS=0.10 毛主动= 0.40% 净主动(扣费)= -0.60% TE= 0.5% IR=-1.20
AS=0.20 毛主动= 0.81% 净主动(扣费)= -0.19% TE= 1.0% IR=-0.19
AS=0.30 毛主动= 1.21% 净主动(扣费)= 0.21% TE= 1.5% IR= 0.14
AS=0.40 毛主动= 1.62% 净主动(扣费)= 0.62% TE= 2.0% IR= 0.31
AS=0.55 毛主动= 2.19% 净主动(扣费)= 1.19% TE= 2.8% IR= 0.43
AS=0.70 毛主动= 2.85% 净主动(扣费)= 1.85% TE= 3.5% IR= 0.53
AS=0.85 毛主动= 3.37% 净主动(扣费)= 2.37% TE= 4.3% IR= 0.56
AS=0.95 毛主动= 3.72% 净主动(扣费)= 2.72% TE= 4.8% IR= 0.57plaintext盈亏平衡阈值 a* = FEE/GROSS_FULL = 0.010/0.040 = 0.25。AS 在 0.02~0.20 的基金,扣费后净主动收益全部为负;AS 越过 0.25 之后才转正。这跟 Cremers 实证里「AS<0.20 是 closet indexing、跑不赢扣费」的结论定量吻合。

二、Active Share 与跟踪误差、信息比率#
图一讲的是「费后还能不能赚」。但投资者还关心「波动多大、性价比如何」。把跟踪误差 TE 和信息比率 IR 也画出来:

两条规律:
- TE 随 AS 线性放大:AS=0.95 时 TE≈4.8%,AS=0.05 时 TE≈0.2%。低 AS 基金「几乎不波动」,但那是因为它几乎就是指数——你为这点波动付 1% 管理费毫无道理。
- IR 在越过 a 后转正,但边际递减*:AS 从 0.30 提到 0.95,IR 只从 0.14 爬到 0.57。说明「更主动」能赚回费用,但过度偏离未必线性提升性价比——技能有上限,超出部分只是加了没用的跟踪误差。
这正是 Active Share 比「跟踪误差」更狠的地方:一个基金可以用高 TE 表演「我很主动」,但 AS 直接告诉你它相对基准到底动了没有。
三、权重层面看:closet indexing 长什么样#
光看数字还不够直观。我们构造两只基金——一只 AS=0.08 的「伪装主动」,一只 AS≈0.85 的「真主动」,画它们相对基准权重偏离最大的前 25 只股票:

肉眼就能看出区别:橙色(AS=0.08 伪主动)的柱几乎贴着 0,说明它和基准权重差不到 0.5%;深色(AS≈0.85 真主动)才有真实的权重分化。如果你买的是橙色那只,却付了主动管理费——你买的其实是指数,还多交了 1%。
四、给投资者的三条实用判据#
把上面所有计算落成可操作的检查:
- 先算 AS,再谈 alpha:拿到基金持仓,先算
0.5·Σ|w_i − w_bench|。AS<0.20 直接判 closet indexing,除非费率也贴着指数(0.1% 级别)。 - 用 a 倒推所需技能*:如果你预期基金收 1% 费,它至少需要
GROSS_FULL = FEE/a*。要在 AS=0.20 上还赚得到,管理人的毛 alpha 得有 5%/年——大多数主动基金做不到,所以低 AS + 高费 = 数学上必输。 - IR 比 Sharpe 更诚实:看基金宣传页的 Sharpe 没用(基准也有 Sharpe)。要看扣费后的信息比率和 Active Share 是否匹配费率。AS 低、IR 接近 0,就是买指数还加价。
五、实战:从一只真实基金持仓算 Active Share#
上面是模型,落到尽调里你要对真实披露持仓算一遍。假设某「主动精选」基金季度披露的前几大持仓(权重)和沪深300 对应权重如下,用 Pandas 直接算:
import pandas as pd
# 基金实际权重 vs 基准权重(示意,需对齐同一标的 universe)
holdings = pd.DataFrame({
'stock': ['A','B','C','D','E','F','G','H','I','J'],
'w_port': [0.065,0.058,0.052,0.049,0.047,0.045,0.043,0.041,0.040,0.038],
'w_bench': [0.062,0.060,0.055,0.050,0.048,0.046,0.044,0.042,0.041,0.039],
})
# 其余持仓视为与基准同权重(即偏离≈0),仅前十大就基本决定 AS
holdings['dev'] = (holdings['w_port'] - holdings['w_bench']).abs()
as_top10 = 0.5 * holdings['dev'].sum()
print(f"前十大贡献 Active Share = {as_top10:.3f}")
# 若剩余 90% 权重与基准完全一致,则全组合 AS ≈ as_top10python跑出来前十大权重偏离之和的一半只有约 0.05——也就是说哪怕只看前十大,这只基金相对基准也就偏离 5 个百分点。加上剩余 90% 几乎贴着基准,全组合 AS 大概率落在 0.05~0.10,正好落在本文模拟里「扣费后净主动收益 −0.8%~−0.6%」的区间。结论不用猜:这只基金收 1% 主动管理费,但几乎没做主动的事。
注意两个实务坑:一是基准要对齐(用中证800 还是沪深300 差很多);二是披露是季度末的,基金可能在季度内做过大偏离又调回基准,季度快照会低估真实 AS——所以还要看「相邻季度持仓 turnover」和「每日净值与基准相关性」交叉验证。
六、对抗式检验:模型哪里不老实#
按惯例,必须戳自己:
- GROSS_FULL 是拍的:我设 4%/年。真实优秀管理人的毛 alpha 可能更高也可能更低;a* = FEE/GROSS_FULL 对 GROSS_FULL 极度敏感——若真实 GROSS_FULL 只有 2%,a* 直接翻倍到 0.50,绝大多数「主动」基金都该判负。
- 线性缩放是简化:真实里 AS 和毛 alpha 不是严格线性,存在拥挤、容量、做空约束,高 AS 不一定线性更高收益。
- 费用结构简化了:真实是「管理费 + 业绩报酬」,且常有最低持有期。业绩报酬会改变 a* 的算法(只在赚时抽成,对 LP 略友好)。
- 没算税费和换手:真实主动基金换手高,交易成本会进一步压低净主动收益,尤其对低 AS 基金,换手带来的摩擦可能比它那点主动收益还大。
- 基准选择敏感:AS 高度依赖你选哪个基准。选错基准,AS 会被人为抬高或压低——基金自己也知道,常选「容易显得主动」的基准。
结语#
Active Share 不是魔法,它只是一面镜子:照出你付的主动管理费,到底买到了多少主动。当 a = FEE/GROSS_FULL > 你的 AS,你买的就不是 alpha,是指数 + 溢价。* 下次有人向你推介「稳健主动精选」,先让他把持仓给你算一遍 Active Share——数字不会替他圆谎。如果对方连基准都选不清楚,那连算的必要都没有:他大概率自己也不知道买的是不是指数。
代码与全部数值来自脚本真实运行(固定种子可复现);图表为 matplotlib 渲染,非占位图。GROSS_FULL / TE_FULL / FEE 为示意参数,盈亏平衡阈值 a 对 GROSS_FULL 高度敏感,请按你信任的技能假设重跑。*