Omega 比率优化:用整条收益分布替代均值方差
Sharpe 比率把整条收益分布压缩成两个数:均值和标准差——第三阶矩以上的信息全被扔掉。本文构造了两个均值、波动率几乎完全相同的策略:一个偏度 -0.05 的正态型,一个偏度 -3.37 的卖期权型,Sharpe 说它们一样好,但后者藏着单日 -5% 级别的崩盘尾巴。Omega 比率的修复思路是不做任何压缩:给定阈值 θ,把分布切成两半,上半部分的概率加权面积除以下半部分——Omega(θ) 曲线本身就携带全部分布信息,两个矩相同的策略在曲线上一眼分开。用 SLSQP 做 Omega 最优组合权重扫描,揭示一个教科书很少讲的相变:θ=0 时优化器抱紧高 Sharpe 但偏度 -9.3 的卖波动策略,θ 抬到 3.5bp/日后权重瞬间 100% 切换到低 Sharpe 但正偏 +2.7 的趋势策略——阈值就是你对『什么算亏』的定义,定义变了最优组合跟着突变。打穿 Omega 优化的三个死穴:非凸性带来的局部最优陷阱、θ 选择的隐蔽自由度(本质是另一个可过拟合参数)、样本内 Omega 对尾部事件计数的极端敏感(进阶)。
先说结论: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 切成两半:
分子是超过 θ 部分的概率加权收益(可以理解为”期望超额盈利”),分母是低于 θ 部分的概率加权损失(“期望超额亏损”)。一个等价且更好算的离散形式:
def omega(returns, theta):
excess = returns - theta
gains = excess[excess > 0].sum() # 阈值之上的总盈利
losses = -excess[excess < 0].sum() # 阈值之下的总亏损
return gains / lossespython三个关键性质:
- 无损:Omega(θ) 作为 θ 的函数,与原分布一一对应。给我整条 Omega 曲线,我能还原出整条分布——均值、方差、偏度、峰度、所有分位数都在里面。
- 不动点:θ = 均值时 Omega 恒等于 1(对任何分布都成立)。所以单看某一点的 Omega 值意义有限,曲线的形状才是信息。
- 无分布假设:不要求正态,不要求任何参数族,直接对经验分布算。肥尾、偏斜、双峰,全都如实反映。
把 A 和 B 的 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/日) | Carry | Trend | 债券 |
|---|---|---|---|
| 0.0 | 34.2% | 18.1% | 47.7% |
| 1.0 | 60.7% | 39.3% | 0% |
| 2.0 | 50.6% | 49.4% | 0% |
| 3.0 | 19.6% | 80.4% | 0% |
| 3.5 | 0% | 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% 的权重跳变,就是这句话的定量版本。
参考文献#
- Keating, C., & Shadwick, W. F. (2002). A Universal Performance Measure. Journal of Performance Measurement, 6(3), 59-84.
- Mausser, H., Saunders, D., & Seco, L. (2006). Optimising Omega. Risk Magazine, November 2006.
- Kapsos, M., Zymler, S., Christofides, N., & Rustem, B. (2014). Optimizing the Omega Ratio using Linear Programming. Journal of Computational Finance, 17(4).
- Bernardo, A. E., & Ledoit, O. (2000). Gain, Loss, and Asset Pricing. Journal of Political Economy, 108(1), 144-172.