第四节:夏普比率与信息比率
说实话,做量化交易这几年,我见过太多人一上来就盯着收益率看。收益率高就觉得自己牛逼,收益率低就觉得策略不行。嗯,这种想法其实挺危险的。
你想想看,一个策略年化50%,但最大回撤40%,你敢重仓吗?另一个策略年化20%,回撤只有5%,哪个更香?
这就是我们今天要聊的核心——风险调整后收益。说白了,就是看你赚的每一分钱,背后扛了多少风险。
4.1 夏普比率:最经典的性价比指标
夏普比率,我习惯叫它「收益风险性价比」。公式其实不复杂:
夏普比率 = (策略收益率 - 无风险利率) / 策略波动率
分子是超额收益,分母是风险。比值越大,说明每承担一单位风险,换来的超额收益越多。
推导过程其实很有意思。我记得刚入行时,总觉得这公式是拍脑袋想出来的。后来仔细琢磨,才发现它背后是资本资产定价模型(CAPM)的逻辑——任何收益都要用风险来「贴现」。
举个具体例子:
- 策略A:年化收益25%,波动率15%
- 策略B:年化收益18%,波动率8%
- 无风险利率:3%
算一下:
- 策略A夏普 = (25% - 3%) / 15% = 1.47
- 策略B夏普 = (18% - 3%) / 8% = 1.88
看到了吗?策略A收益更高,但夏普比率反而更低。这就是风险调整后的真实水平。
核心要点:夏普比率大于1算及格,大于2算优秀,大于3就是顶级策略了。我在实盘中见过夏普4.0的策略,但通常活不过半年——因为容量太小,资金一进去就失效。
4.2 信息比率:更精细的「选股能力」度量
信息比率和夏普比率很像,但有一个关键区别——它比较的是相对于基准的超额收益。
信息比率 = (策略收益率 - 基准收益率) / 跟踪误差
这里的跟踪误差,就是策略与基准之间收益差的标准差。
应用场景很明确:
- 如果你做指数增强,信息比率就是核心指标
- 如果你做行业轮动,信息比率能告诉你是否真的跑赢了行业基准
- 如果你做多因子选股,信息比率可以衡量因子选股能力的稳定性
我曾经帮一家私募做归因分析,发现他们的策略夏普比率有1.8,看起来不错。但一算信息比率,只有0.3。为什么?因为他们的超额收益几乎全部来自市场贝塔,而不是选股能力。说白了,就是运气好,赶上了牛市。
我的经验:信息比率长期稳定在0.5以上,说明你真的有选股能力。低于0.3,建议先怀疑一下自己的策略是不是在「拟合噪声」。
4.3 用Python计算这两个指标
代码其实很简单,但有几个坑要注意。我直接上完整示例:
import numpy as np
import pandas as pd
def calculate_sharpe_ratio(returns, risk_free_rate=0.03, periods_per_year=252):
"""
计算年化夏普比率
returns: 日收益率序列
risk_free_rate: 年化无风险利率
periods_per_year: 年化周期数(日频=252,周频=52,月频=12)
"""
# 年化超额收益
excess_return = np.mean(returns) * periods_per_year - risk_free_rate
# 年化波动率
volatility = np.std(returns) * np.sqrt(periods_per_year)
sharpe = excess_return / volatility
return sharpe
def calculate_information_ratio(strategy_returns, benchmark_returns, periods_per_year=252):
"""
计算年化信息比率
strategy_returns: 策略日收益率
benchmark_returns: 基准日收益率
"""
# 超额收益序列
excess_returns = strategy_returns - benchmark_returns
# 年化超额收益均值
annual_excess = np.mean(excess_returns) * periods_per_year
# 跟踪误差(年化)
tracking_error = np.std(excess_returns) * np.sqrt(periods_per_year)
info_ratio = annual_excess / tracking_error
return info_ratio
# 示例数据
np.random.seed(42)
strategy_ret = np.random.normal(0.001, 0.02, 1000) # 模拟策略日收益
benchmark_ret = np.random.normal(0.0005, 0.015, 1000) # 模拟基准日收益
sharpe = calculate_sharpe_ratio(strategy_ret)
info_ratio = calculate_information_ratio(strategy_ret, benchmark_ret)
print(f"夏普比率: {sharpe:.4f}")
print(f"信息比率: {info_ratio:.4f}")
避坑指南:我曾经犯过一个低级错误——直接用日收益率算夏普,忘了年化。结果算出来0.08,差点把策略砍掉。后来发现是周期没对齐。记住:收益率和波动率必须用同一个时间尺度。
4.4 知识体系总览
下面这张图,是我自己整理的风险调整收益指标框架。你看一眼就能明白它们之间的关系:
这张图把两个指标拆解得很清楚。左边是夏普比率,右边是信息比率。它们的共同点是都用「收益/风险」这个框架,不同点在于「收益」和「风险」的定义。
4.5 实战中的选择建议
说了这么多,到底什么时候用哪个?我总结了一个简单的判断逻辑:
| 场景 | 推荐指标 | 原因 |
|---|---|---|
| 绝对收益策略(如CTA、期权卖方) | 夏普比率 | 没有基准,只看绝对回报和风险 |
| 指数增强、行业轮动 | 信息比率 | 需要衡量相对基准的超额能力 |
| 多策略组合 | 两者都看 | 夏普看整体,信息看各策略相对贡献 |
| 高频策略 | 夏普比率(高频版) | 高频通常无基准,但需注意周期对齐 |
最后说一句实在话:这两个指标都不是万能的。夏普比率假设收益正态分布,但实际中策略收益往往有肥尾。信息比率对基准选择很敏感,基准选错了,算出来就是自欺欺人。
我个人的习惯是:先用夏普筛一遍,再用信息比率做归因。两个指标结合起来看,基本能判断一个策略是「真功夫」还是「假把式」。
公众号:蓝海资料掘金营,微信deep3321