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 四个指标的关系与选择
这四个指标,各有侧重。我一般这样用:
- 夏普比率:快速筛选,看策略整体性价比
- 索提诺比率:排除那些「上涨波动大」的伪优质策略
- 卡玛比率:评估实盘体验,看你能不能拿得住
- 信息比率:做相对收益策略时必看
没有哪个指标是完美的。我建议你四个都算一遍,综合判断。如果一个策略四个指标都优秀,那基本可以放心了。
再次提醒: 所有风险调整指标,都依赖于历史数据。历史不代表未来。一个策略过去三年夏普比率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