halo 的技术博客

返回

资本资产定价模型(CAPM)有一个干净的结论:E[R_i] = R_f + β_i·(E[R_m]−R_f)β 越高,预期收益越高——想多赚,就得敢冒风险。这几乎是每个金融学生的第一课。

但 1970 年代以来,一堆实证论文(Frazzini & Pedersen 2014 的「下注对抗 beta」、Ang 等的特质波动异象、以及无数「最小方差指数」的实盘表现)反复指出同一件怪事:低风险股票长期跑赢高风险股票。低波动组合 Sharpe 更高、回撤更浅,有时连裸收益都更好。理论说「高风险高收益」,数据说「低风险高收益」。这一篇,我们把这个异象从数据里亲手揪出来。

结论先放:在 200 只股票、240 个月(20 年)的模拟里,按实现波动分五组,最低波动组(Q1)年化 15.8%、Sharpe 1.06、回撤仅 −13%最高波动组(Q5)年化 9.3%、Sharpe 0.32、回撤 −48%。把个股收益对 β 回归,理论该是正的「市场预期溢价斜率 6.6%/年」,实际拟合出来只有 1.7%/年——几乎平的。风险与收益的正相关,破了。

β vs 年化收益:CAPM 理论线(虚线正斜率)vs 实际拟合线(红线近平)

一、数据:怎么造出(并揪出)这个异象#

为演示机制,我们合成 200 只股票、20 年月度收益。每只股票服从「市场 + 特质」结构,并显式嵌入低波动异常(即低波动股票被赋予更高的截距 α):

import numpy as np
rng = np.random.default_rng(20260713)
N, T = 200, 240
mu_m, sig_m = 0.005, 0.040             # 市场月均超额收益、波动
beta = rng.uniform(0.5, 1.5, N)        # 个股 beta
idio  = rng.uniform(0.020, 0.075, N)   # 特质月度波动
true_vol = np.sqrt((beta * sig_m) ** 2 + idio ** 2)
alpha = 0.0030 - 0.25 * (true_vol - true_vol.mean())  # 低波动 -> 高 alpha(异常核心)
mkt = rng.normal(mu_m, sig_m, T)
ret = (alpha[None, :] + beta[None, :] * mkt[:, None]
       + rng.standard_normal((T, N)) * idio)

ann_ret = ret.mean(0) * 12
ann_vol = ret.std(0, ddof=1) * np.sqrt(12)
sharpe  = ann_ret / ann_vol
python

关键那行 alpha = 0.0030 − 0.25·(σ_i − mean σ):波动越低的股票,截距越高。市场仍按 β 给正补偿,但低波动股票的特质 α 足以让它的风险调整后收益反超。这就是异象的「种子」。

诚实声明:真实世界里这个 α 不是我手工塞进去的,而是数据自己长出来的。下面第四节讲它为什么「自然」出现。

二、检验 1:CAPM 回归——理论斜率 vs 实际斜率#

把每只股票的年化收益对 β 做 OLS,对比两条线:理论线斜率 = 市场预期溢价(6.6%/年,正的);实际拟合线斜率 = 回归系数。

A = np.vstack([np.ones(N), beta]).T
capm_slope = np.linalg.lstsq(A, ann_ret, rcond=None)[0][1]   # 实际:1.7%/年
python

结果:理论该 +6.6%,实际只有 +1.7%。图1 里红线几乎是平的——β 翻三倍,预期收益几乎没动。这正是低波动异象在截面上的指纹:风险的价格被严重压低,甚至可能为负

三、检验 2:波动率五分位——低波动组全面占优#

按实现波动把股票分成五组(Q1 最低 → Q5 最高),看每组的平均表现:

order = np.argsort(ann_vol)
qs = np.array_split(order, 5)
q_ret = [ann_ret[q].mean() for q in qs]
q_vol = [ann_vol[q].mean() for q in qs]
q_shp = [sharpe[q].mean() for q in qs]
python
分组年化收益年化波动Sharpe
Q1 低波动15.8%15.4%1.06
Q213.6%19.6%0.70
Q314.0%22.4%0.63
Q49.0%25.5%0.35
Q5 高波动9.3%29.6%0.32

Sharpe 单调随波动下降:低波动组 1.06 是高波动组 0.32 的 3 倍多。裸收益上,Q1(15.8%)也高于 Q5(9.3%)——低风险不仅更稳,还更赚。

波动率五分位:低波动组收益最高、Sharpe 单调下降

四、检验 3 & 4:净值与「低波动云」#

把 Q1 等权做成低波动组合、Q5 等权做成高波动组合,再和等权全市场比:

low_ret  = ret[:, qs[0]].mean(1)
high_ret = ret[:, qs[4]].mean(1)
eq_low, eq_high = np.cumprod(1 + low_ret), np.cumprod(1 + high_ret)
python

低波动 vs 高波动 vs 市场净值:低波动终点更高、回撤更浅

低波动组合年化 15.8%、最大回撤 −13%;高波动组合年化 9.3%、回撤 −48%;等权全市场居中(12.3% / −30%)。低波动组合和全市场相关性高达 0.99——它不是对冲工具,而是「更好的 β」:跟市场走,但走得又稳又远。

最后那张标志性散点图:横轴波动、纵轴 Sharpe,点云向右下塌,五分位均值连成一条干净的下坡线。

波动 vs Sharpe 散点:波动越往右,Sharpe 越往下塌

五、它为什么「真实」存在(不止是模拟设定)#

我上面是手工塞了异常,但实盘里它有坚实的行为与制度根源:

  1. 杠杆约束:CAPM 要套利低波动异象,得「杠杆买入低波动股、做空高波动股」。可大多数机构(养老金、共同基金、散户)被法规或章程禁止大幅杠杆。无法套利 → 错误定价不消失。
  2. 彩票偏好 / 注意力:散户爱买高波动的「彩票股」,愿意为波动付溢价(博小概率暴富),推高高波动股价格、压低其未来收益。这是 Baker & Haugen、Kumar 等反复验证的。
  3. 波动率反馈与崩盘恐惧:高波动股在危机里跌得最狠,投资者要求的风险补偿理论上该很高,但「崩盘恐慌」反而让一些人追高波动博反弹,进一步扭曲定价。
  4. 相对业绩排名:基金经理怕跑输指数,被迫持高 β 仓位,变相为高波动付溢价。

所以低波动异象本质是市场不完美(杠杆受限 + 行为偏差)的定价影子,不是统计噪音。

六、真实陷阱:想用它赚钱得避开这些坑#

  • 和市值因子混淆:低波动股常偏大盘(公用事业、消费),高波动股常偏小盘。不控制市值,低波动溢价可能只是市值溢价的马甲。实盘务必做中性化。
  • 换手与税费:按月重排序有真实换手成本;低波动组合换手其实低于动量,但仍要扣交易费、冲击成本。
  • 利率 regime:低波动股久期长,利率上行期可能跑输;它是「类债券」资产,不是全天候。
  • 做空约束:纯多头低波动策略能吃到一个方向的溢价;完整「下注对抗 beta」需要做空高 β,受融券限制。
  • 样本区间依赖:异象在 2000 年后被大量发掘后有所衰减( crowding),样本外要打折扣,务必做 walk-forward 而非单次回测。

七、小结#

低波动异象给主动管理人两个朴素启示:一是「少亏就是赚」,低波动组合用更浅的回撤换来了不输甚至更高的复利;二是 CAPM 的「风险价格」在截面上是塌的,高 β 没换来高收益。对实战最干净的应用是最小方差 / 低波动指数化——不预测方向,只把「波动税」从组合里抠掉。下一篇我们聊熵池化,看怎么把「我觉得要跌」这种主观观点,严谨地织进概率分布里。

(本文收益为自洽合成以演示机制;真实异象来自杠杆约束与行为偏差,落地请用真实价格序列、控制市值/行业暴露并做样本外验证。)

低波动异象:低风险股票为何长期跑赢高风险
https://blog.halo26812.eu.org/blog/low-volatility-anomaly
Author halo
Published at 2026年7月13日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨