4. 风险调整收益指标:夏普比率、索提诺比率、卡玛比率、信息比率

做量化交易,光看收益率是远远不够的。

我见过太多人,一上来就盯着年化50%、80%的策略两眼放光。结果呢?回撤一来,直接打回原形。说白了,收益率只是故事的一半,另一半是风险。

今天咱们聊的这四个指标——夏普比率、索提诺比率、卡玛比率、信息比率——就是用来衡量「你每承担一单位风险,到底换来了多少收益」。它们才是评估策略质量的硬通货。

核心思想: 风险调整收益 = 收益 / 风险。分母不同,指标不同。

4.1 夏普比率:最通用的风险收益标尺

夏普比率是量化圈里最常用的指标,没有之一。它的公式很简单:

夏普比率 = (策略年化收益率 - 无风险利率) / 策略年化波动率

嗯,这里要注意:分子是超额收益,分母是总风险(波动率)。

我个人习惯把夏普比率理解成「性价比」。夏普比率1.0,意味着每承担1%的波动,能换来1%的超额收益。2.0以上,那就是顶级策略了。

实战经验: 我在做CTA策略时,发现夏普比率对高频策略特别友好。因为高频策略波动小,夏普容易做得高。但中低频趋势策略,夏普能到1.5就已经很不错了。别盲目追求高夏普,要看策略类型。

夏普比率的局限性:

  • 它把上涨波动和下跌波动一视同仁。但咱们做交易的,谁在乎上涨波动?涨得猛是好事啊!
  • 它假设收益是正态分布。但真实市场的收益分布,尾部很厚,极端行情频发。

所以,夏普比率是个好起点,但不是终点。

4.2 索提诺比率:只惩罚下行风险

索提诺比率就是夏普比率的「升级版」。它只考虑下行波动,忽略上行波动。

索提诺比率 = (策略年化收益率 - 无风险利率) / 下行标准差

下行标准差怎么算?只取收益率低于某个目标(通常是0或无风险利率)的部分来计算波动率。

你想想看,一个策略如果经常小涨、偶尔大跌,它的夏普比率可能还行,但索提诺比率会很难看。反过来,一个策略如果经常小跌、偶尔大涨,索提诺比率就会比夏普比率漂亮得多。

避坑指南: 我曾经踩过一个坑——用索提诺比率去评估一个期权卖方策略。卖方策略胜率高、回撤小,索提诺比率高得离谱。但一旦遇到黑天鹅,一次爆仓就全没了。所以,索提诺比率好,不代表策略安全。它只是告诉你「日常表现不错」,但防不住尾部风险。

4.3 卡玛比率:关注最大回撤

卡玛比率,我个人觉得是最贴近实战的指标。它用最大回撤代替了波动率。

卡玛比率 = (策略年化收益率 - 无风险利率) / 最大回撤

为什么说它贴近实战?因为对于大多数交易者来说,最大回撤才是真正让人睡不着觉的东西。波动率是数学概念,回撤是真金白银的亏损。

卡玛比率大于1,说明你的年化收益超过了历史最大回撤。大于2,那就是非常优秀的策略了。

卡玛比率 策略质量 我的评价
< 0.5 较差 收益覆盖不了回撤,需要优化
0.5 - 1.0 一般 勉强可用,但心里不踏实
1.0 - 2.0 良好 我比较满意的范围
> 2.0 优秀 值得重点关注

小技巧: 卡玛比率对回撤期的长度也很敏感。一个策略如果最大回撤只有5%,但回撤持续了两年,那它的实际体验其实很差。我一般会同时看「最大回撤幅度」和「回撤修复时间」,两个维度一起评估。

4.4 信息比率:衡量超额收益的稳定性

信息比率是专门用来评估「主动管理能力」的指标。它衡量的是策略相对于基准的超额收益是否稳定。

信息比率 = (策略收益率 - 基准收益率) / 跟踪误差

这里的跟踪误差,就是超额收益的标准差。说白了,信息比率看的是「你跑赢基准的能力稳不稳」。

举个例子:你跑赢沪深300每年5%,但有时候跑赢10%,有时候跑输5%,那信息比率就低。如果你每年稳稳跑赢5%,信息比率就高。

信息比率 vs 夏普比率:

  • 夏普比率:你的策略 vs 无风险利率
  • 信息比率:你的策略 vs 某个基准(比如沪深300、中证500)

我个人做多因子选股时,最看重的就是信息比率。因为我的目标是稳定跑赢指数,而不是追求绝对收益。信息比率能告诉我,我的因子是否真的有效,还是只是运气好。

关键点: 信息比率大于0.5算合格,大于1.0算优秀。但要注意,基准的选择很关键。选一个不合适的基准,信息比率会失真。

4.5 四个指标的关系与选择

这四个指标,各有侧重。我一般这样用:

  1. 夏普比率:快速筛选,看策略整体性价比
  2. 索提诺比率:排除那些「上涨波动大」的伪优质策略
  3. 卡玛比率:评估实盘体验,看你能不能拿得住
  4. 信息比率:做相对收益策略时必看

没有哪个指标是完美的。我建议你四个都算一遍,综合判断。如果一个策略四个指标都优秀,那基本可以放心了。

再次提醒: 所有风险调整指标,都依赖于历史数据。历史不代表未来。一个策略过去三年夏普比率2.5,不代表明年还能保持。我见过太多人拿着历史回测结果就上实盘,结果被市场教育得服服帖帖。回测是起点,不是终点。

4.6 知识体系结构图

下面这张图,帮你理清这四个指标的核心逻辑:

风险调整收益指标 夏普比率 收益 / 总波动 最通用,但忽略方向 索提诺比率 收益 / 下行波动 只惩罚下跌,更合理 卡玛比率 收益 / 最大回撤 最贴近实战体验 信息比率 超额收益 / 跟踪误差 评估主动管理能力 选择建议 快速筛选用夏普 → 排除伪优质用索提诺 → 评估体验用卡玛 → 相对收益用信息 四个指标综合判断,不要迷信任何一个

4.7 代码实现:一键计算四个指标

最后,附上一段Python代码。你可以直接拿去用,计算这四个指标。

import numpy as np
import pandas as pd

def calculate_risk_adjusted_metrics(returns, risk_free_rate=0.03, benchmark_returns=None):
    """
    计算四个风险调整收益指标
    
    参数:
        returns: 策略日收益率序列 (Series)
        risk_free_rate: 无风险年化利率,默认3%
        benchmark_returns: 基准日收益率序列 (Series),计算信息比率时需要
    
    返回:
        dict: 包含四个指标的字典
    """
    # 年化因子(假设日频数据)
    annual_factor = 252
    
    # 年化收益率
    annual_return = returns.mean() * annual_factor
    
    # 年化波动率
    annual_vol = returns.std() * np.sqrt(annual_factor)
    
    # 夏普比率
    sharpe = (annual_return - risk_free_rate) / annual_vol
    
    # 索提诺比率
    # 只考虑下行波动(收益率 < 0 的部分)
    downside_returns = returns[returns < 0]
    downside_std = downside_returns.std() * np.sqrt(annual_factor)
    sortino = (annual_return - risk_free_rate) / downside_std if downside_std != 0 else np.nan
    
    # 卡玛比率
    # 计算最大回撤
    cumulative = (1 + returns).cumprod()
    running_max = cumulative.cummax()
    drawdown = (cumulative - running_max) / running_max
    max_drawdown = drawdown.min()
    calmar = (annual_return - risk_free_rate) / abs(max_drawdown) if max_drawdown != 0 else np.nan
    
    # 信息比率(需要基准收益率)
    if benchmark_returns is not None:
        excess_returns = returns - benchmark_returns
        tracking_error = excess_returns.std() * np.sqrt(annual_factor)
        information_ratio = (excess_returns.mean() * annual_factor) / tracking_error if tracking_error != 0 else np.nan
    else:
        information_ratio = np.nan
    
    return {
        '夏普比率': round(sharpe, 3),
        '索提诺比率': round(sortino, 3),
        '卡玛比率': round(calmar, 3),
        '信息比率': round(information_ratio, 3)
    }

# 使用示例
# 假设你有一个策略的日收益率序列
# strategy_returns = pd.Series(...)
# benchmark_returns = pd.Series(...)
# metrics = calculate_risk_adjusted_metrics(strategy_returns, benchmark_returns=benchmark_returns)
# print(metrics)

使用建议: 代码中的无风险利率我设了3%,你可以根据实际情况调整。另外,计算信息比率时一定要传入基准收益率,否则返回NaN。

好了,这四个指标就讲到这里。记住,指标是工具,不是真理。用它们来发现问题,而不是用它们来证明策略有多好。做量化,保持怀疑,保持敬畏。


公众号:蓝海资料掘金营,微信deep3321