halo 的技术博客

返回

先说结论:Sharpe 比率丢掉了收益分布第三阶矩以上的所有信息,而 Omega 比率一个矩都不丢——它以阈值 θ 为切点,用分布上半部分的概率加权收益除以下半部分的概率加权损失,整条 Omega(θ) 曲线与收益分布一一对应。代价是优化问题从凸的二次规划变成非凸的比值规划,且阈值 θ 本身成了一个新的、极易被滥用的自由度。本文用两个”Sharpe 双胞胎”策略和一次权重相变实验,把 Omega 的价值和陷阱都算给你看。

一、Sharpe 的信息瓶颈:两个数概括不了一条分布#

均值方差框架(以及它的直接产物 Sharpe 比率)有一个从 1952 年就埋下的假设:投资者只关心收益分布的前两阶矩。这个假设在两种情况下无害——收益服从正态分布,或者投资者的效用函数恰好是二次的。现实中两条都不成立。

看一个具体的构造。我生成了两个策略各 2520 天(十年)的日收益:

import numpy as np
rng = np.random.default_rng(42)
n = 2520

# 策略A:正态型
retA = rng.normal(0.0004, 0.010, n)

# 策略B:卖期权型——多数日子小赚,偶尔单日大亏
base = rng.normal(0.0009, 0.006, n)
crash = rng.random(n) < 0.012                      # 1.2% 的天数触发崩盘
base[crash] -= rng.exponential(0.035, crash.sum()) # 平均额外亏 3.5%
retB = base
# 标准化:让 B 的均值和标准差与 A 完全对齐
retB = (retB - retB.mean()) / retB.std() * retA.std() + retA.mean()
python

对齐之后,两个策略的均值相同、标准差相同、Sharpe 相同。但偏度是 A:-0.05,B:-3.37。B 是典型的卖尾部风险形态:常年稳定赚小钱,每年有几天单日亏 3%~6%。做过期权卖方或高杠杆 carry 的人都认识这条曲线——它在爆掉之前的每一天都比 A 好看。

均值方差几乎相同的两个分布

直方图上肉眼可见:B 的主体更窄更高(日常波动更小),但左侧拖着一条延伸到 -6% 的尾巴。均值方差框架把这两个分布判为等价——这不是近似误差,是结构性信息丢失:从分布到 (μ, σ) 的映射是多对一的,逆映射不存在。

二、Omega 的定义:不压缩,直接比面积#

Keating 和 Shadwick 在 2002 年提出的 Omega 比率走了另一条路。给定一个阈值 θ(你自己定义的”及格线”),把收益分布 F 切成两半:

Ω(θ)=θ[1F(x)]dxθF(x)dx\Omega(\theta) = \frac{\int_\theta^{\infty} [1 - F(x)]\,dx}{\int_{-\infty}^{\theta} F(x)\,dx}

分子是超过 θ 部分的概率加权收益(可以理解为”期望超额盈利”),分母是低于 θ 部分的概率加权损失(“期望超额亏损”)。一个等价且更好算的离散形式:

def omega(returns, theta):
    excess = returns - theta
    gains  = excess[excess > 0].sum()    # 阈值之上的总盈利
    losses = -excess[excess < 0].sum()   # 阈值之下的总亏损
    return gains / losses
python

三个关键性质:

  1. 无损:Omega(θ) 作为 θ 的函数,与原分布一一对应。给我整条 Omega 曲线,我能还原出整条分布——均值、方差、偏度、峰度、所有分位数都在里面。
  2. 不动点:θ = 均值时 Omega 恒等于 1(对任何分布都成立)。所以单看某一点的 Omega 值意义有限,曲线的形状才是信息
  3. 无分布假设:不要求正态,不要求任何参数族,直接对经验分布算。肥尾、偏斜、双峰,全都如实反映。

把 A 和 B 的 Omega 曲线画出来:

Omega 曲线对比

在 θ=0 附近两条曲线几乎重合(Omega 都在 1.00 左右——因为均值都接近零附近的水平),但斜率和两翼的形态完全不同:B 的曲线在 θ 向负方向移动时抬升得更慢——因为它的左尾又长又重,那部分”深度亏损”的面积在分母里赖着不走。均值方差看不见的差异,在 Omega 曲线上是肉眼可分的。

一个实用的读法:Omega 曲线在 θ=0 右侧衰减得越慢,策略在”要求更高回报”时的相对优势越强;左翼抬升越快,说明深度亏损越少。斜率本身近似反映分布在该点附近的密度集中度。

三、Omega 最优组合:一次教科书不讲的相变实验#

Omega 不只是诊断工具,可以直接作为组合优化的目标函数。我构造三个风格刻意对立的资产(各 2520 天):

资产年化收益年化波动Sharpe偏度
Carry 卖波动型8.5%10.0%0.85-9.29
Trend 趋势型16.5%15.4%1.07+2.68
债券2.4%3.1%0.75+0.10

Carry 是典型的”负偏高胜率”:日常赚 8bp,偶发单日 -4.5% 级别的崩盘。Trend 是”正偏低胜率”:日常不赚钱甚至小亏,靠 1.2% 天数里的大幅跳升盈利——这正是趋势跟踪 CTA 的收益形态。

用 SLSQP 分别求 Sharpe 最优和 Omega 最优(θ 从 0 扫到 8bp/日):

from scipy.optimize import minimize

def neg_omega(w, theta):
    r = R @ w
    ex = r - theta
    return -(ex[ex > 0].sum() / -ex[ex < 0].sum())

cons = [{"type": "eq", "fun": lambda w: w.sum() - 1}]
# 非凸问题:必须多起点重启,取最优
best = min(
    (minimize(neg_omega, rng.dirichlet(np.ones(3)), args=(theta,),
              bounds=[(0,1)]*3, constraints=cons, method="SLSQP")
     for _ in range(10)),
    key=lambda res: res.fun
)
python

结果是一场干净利落的相变:

权重随阈值的相变

θ (bp/日)CarryTrend债券
0.034.2%18.1%47.7%
1.060.7%39.3%0%
2.050.6%49.4%0%
3.019.6%80.4%0%
3.50%100%0%

三段式解读:

  • θ=0(只要不亏就算赢):优化器愿意抱紧 Carry ——它 98.8% 的日子在零轴之上,尾部崩盘在”面积比”里被高胜率摊薄了。注意这里 Omega 最优组合的偏度是 -2.89,比 Sharpe 最优组合的 -0.56 更负。这是第一个反直觉结论:低阈值下的 Omega 优化不惩罚尾部风险,反而拥抱它——因为分母只算”亏损面积”,不管亏损集中在一天还是摊在一百天。
  • θ=1~3bp(要求跑赢现金/低门槛):债券第一个出局(它的日收益几乎全在 θ 之下,分子归零),Carry 与 Trend 此消彼长。
  • θ≥3.5bp(要求日均 9%+ 年化才算赢):100% 切换到 Trend。高阈值下,日常小赚的 Carry 全军覆没在分母里,只有靠大幅跳升的正偏资产还能给分子供货。θ 越高,Omega 优化越偏爱正偏、越像一个彩票偏好者

这就是 Omega 相对均值方差的真正增量:它让”你如何定义亏损”显式地进入了优化目标。Sharpe 只有一个版本;Omega 有无穷多个版本,每个 θ 对应一种风险态度。

四、三个死穴#

死穴一:非凸性——你找到的可能只是局部最优#

均值方差优化是凸二次规划,全局最优有保证。Omega 是两个分段线性函数的比值,非凸。SLSQP 单起点求解在我的实验里有约三成概率停在劣解上(相差可达 10% 权重)。上面代码里的 10 次 Dirichlet 随机重启不是防御性编程,是必需品。资产数上到 20+ 时,建议改用 Mausser 等人的线性化技巧(在 Omega>1 区域可转化为 LP)或直接上全局优化器,否则你优化出的”Omega 最优组合”可能只是初值的函数。

死穴二:θ 是一个可过拟合的自由度#

θ 名义上代表”投资者的最低可接受回报”,实践里它常被倒过来用:先看哪个 θ 让自己的策略排名最高,再宣称那就是合理阈值。从上面的相变表可以看出 θ 从 3.0 到 3.5bp 会让最优组合发生 80% 的权重跳变——结论对 θ 的敏感度远高于对数据的敏感度时,θ 就成了比参数更隐蔽的过拟合入口。纪律:θ 必须在看数据之前由资金成本或负债端要求外生给定(比如融资利率、负债成本、目标年化的日频折算),并汇报 θ±50% 范围内的权重稳定性。

死穴三:样本内 Omega 是尾部事件的计数器#

Carry 资产十年里只有约 15 个崩盘日,这 15 个观测贡献了分母的大头。换一颗随机种子、或者真实数据里少发生一次 2015 年 8 月式的闪崩,Omega(0) 可以移动 20% 以上。对比之下 Sharpe 的估计误差主要来自方差项,收敛速度是 √n 级别的;Omega 的分母收敛速度受制于尾部事件的到达率,对短样本极不友好。五年以内的日频样本算出的 Omega,置信区间宽到几乎没有排名意义——要么用 bootstrap 给出区间,要么老老实实承认样本不够。

顺带一个容易被忽略的关系:θ=0 且分布对称时,Omega 与 Sharpe 单调等价,排名完全一致。Omega 的增量信息恰恰只存在于分布不对称的时候——如果你的资产池全是接近对称的指数类资产,换用 Omega 只是自我感动。

五、什么时候值得用#

给一个直接的决策清单:

  • 资产池里有明显偏斜的策略(期权卖方、CTA、可转债、尾部对冲):Omega 提供 Sharpe 看不见的排序信息,值得用。
  • θ 能被负债端外生锚定(保险资金、目标日期基金):Omega 的阈值机制天然匹配,值得用。
  • 样本短于五年、或资产接近对称分布:Omega 的估计噪声和信息增量都不划算,留在均值方差框架里。
  • 任何情况下:不要只报一个点的 Omega 值。报曲线,或至少报三个 θ(0、无风险利率、目标回报)下的值——单点 Omega 和单点 Sharpe 一样,都是压缩过度的产物,只是压缩方式不同。

Omega 的本质不是”更好的 Sharpe”,而是把一个被均值方差框架隐藏了七十年的问题重新摆上台面:风险的定义权在你手里,而不同的定义会导出完全不同的最优组合。相变图里那条 100% 的权重跳变,就是这句话的定量版本。

参考文献#

  1. Keating, C., & Shadwick, W. F. (2002). A Universal Performance Measure. Journal of Performance Measurement, 6(3), 59-84.
  2. Mausser, H., Saunders, D., & Seco, L. (2006). Optimising Omega. Risk Magazine, November 2006.
  3. Kapsos, M., Zymler, S., Christofides, N., & Rustem, B. (2014). Optimizing the Omega Ratio using Linear Programming. Journal of Computational Finance, 17(4).
  4. Bernardo, A. E., & Ledoit, O. (2000). Gain, Loss, and Asset Pricing. Journal of Political Economy, 108(1), 144-172.
Omega 比率优化:用整条收益分布替代均值方差
https://blog.halo26812.eu.org/blog/omega-ratio-optimization
Author halo
Published at 2026年7月25日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨