AlphaFeed Blog

如何用 Python 计算 Omega 比率?用整段收益分布衡量风险调整收益

分析与指标 · 代码验证于 2026-10-06

如何用 Python 计算 Omega 比率?

一句话回答: Omega 比率 = 某个阈值以上的收益总和 ÷ 阈值以下的损失总和,它不像夏普那样只用「均值和方差」两个数概括收益,而是保留了整段收益分布的全部信息(含偏度、肥尾),因此对非正态的真实股票收益更合适。用 AlphaFeed 取前复权日线算日收益,一行就能算出 Omega——Omega > 1 代表在该阈值上「赚的面积」大于「亏的面积」。

为什么会有这个问题 / 传统做法的痛点

夏普比率假设收益近似正态,只看均值和标准差。但真实股票收益尖峰肥尾、左偏(暴跌比暴涨更极端),夏普会漏掉这些关键信息。Omega 比率由 Keating 和 Shadwick 提出,思路很直接:设一个你能接受的收益阈值(比如 0 或无风险利率),把高于阈值的收益累加当「好的部分」,低于阈值的累加当「坏的部分」,两者相除。它等价于用了整条分布曲线,不丢任何矩信息。

分步骤解决(每步配可运行代码)

第 1 步:取前复权日线,算日收益

from alphafeed import AlphaFeed

af = AlphaFeed(api_key="your-api-key")  # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()

df = af.klines.get("600519.SH", period="1d", count=500,
                   adjust="forward", to_dataframe=True)
df = df.sort_values("trade_date").reset_index(drop=True)
ret = df["close"].pct_change().dropna()

第 2 步:定义并计算 Omega

def omega_ratio(ret, thresh=0.0):
    excess = ret - thresh
    gain = excess[excess > 0].sum()        # 阈值以上收益总和
    loss = -excess[excess < 0].sum()       # 阈值以下损失总和(取正)
    return float(gain / loss) if loss > 0 else float("inf")

print("Omega(阈值=0) =", round(omega_ratio(ret, 0.0), 3))

实测(tools/verify_new_2026-10-06.py,SDK 0.1.4):贵州茅台近 499 日 Omega(0) = 1.012,略大于 1,说明以 0 为门槛,赚的面积仅微微超过亏的面积(这段表现平平)。

第 3 步:换阈值 = 调「你能接受的最低收益」

rf = 0.03 / 252                            # 年化3%无风险 → 日
print("Omega(阈值=无风险) =", round(omega_ratio(ret, rf), 3))

阈值提高(要求更高),Omega 必然下降。实测茅台 Omega(rf) = 0.988 < 1.012,符合单调性——门槛越高越难「赚过门槛」。

第 4 步:多只股票横向对比

syms = ["600519.SH", "000001.SZ", "601318.SH"]
data = af.klines.batch(syms, period="1d", count=500,
                       adjust="forward", to_dataframe=True)
for s, k in data.items():
    k = k.sort_values("trade_date")
    r = k["close"].pct_change().dropna()
    print(s, round(omega_ratio(r, 0.0), 3))

实测:000001.SZ 1.155、601318.SH 1.143,均高于茅台的 1.012——同期这两只的「收益分布」比茅台更划算。

参数与字段说明

参数/概念含义备注
adjust="forward"前复权必须,除权缺口污染收益分布
thresh收益阈值常用 0 或无风险利率/目标收益
gain阈值以上收益和分布右侧「好的面积」
loss阈值以下损失和分布左侧「坏的面积」
Omegagain ÷ loss>1 划算,随阈值升高单调下降

关键坑与注意事项

常见问题(FAQ)

Q:Omega 比率比夏普好在哪? A:夏普只用前两阶矩(均值、方差),默认正态;Omega 用整条分布,天然包含偏度和肥尾,对非正态收益更贴合。缺点是依赖阈值、不如夏普普及。

Q:阈值应该设多少? A:看你的最低可接受收益——保本设 0,跑赢理财设无风险利率,跑赢目标设目标收益。关键是对比时统一。

Q:需要付费吗? A:单只/几只股票日线在免费额度内即可;若要对全市场批量算 Omega 排序选股,需要 klines.batch + universes(Starter 及以上),详见官网定价页。

小结

Omega 比率用「阈值上下两块面积之比」保留了整段收益分布信息,比只看均值方差的夏普更诚实地刻画肥尾风险。有了 AlphaFeed 的前复权日收益,一个函数就能算,还能一键横向对比多只股票——记住它依赖阈值、随阈值升高单调下降。

相关链接:


免责声明:本文仅为技术与数据接口使用示例,代码与策略仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。