关于 performance-metrics
面向投资组合分析的金融知识技能,说明风险调整后绩效指标的定义、公式和解读,并附有可运行的 Python 评分卡脚本。
主要功能
- 01解释 Sharpe、Sortino 等绩效比率
- 02涵盖基准比较与涨跌捕获指标
- 03提供计算示例与常见误区
- 04附带 Python 评分卡脚本
适用场景
- 01比较基金的风险调整后表现
- 02评估组合相对基准的主动收益
- 03检查绩效比率的计算假设
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ joellewis/ finance_skills --skill performance-metrics安装后在 Claude Code 中输入/performance-metrics确认已加载。
附带文件scripts/performance_metrics.py
详细介绍
绩效指标
核心概念
夏普比率
应用最广泛的风险调整后绩效指标。它用超额收益(高于无风险利率的收益)除以总波动率。
SR = (R_p - R_f) / sigma_p
- R_p:年化投资组合收益
- R_f:年化无风险利率
- sigma_p:年化投资组合波动率(收益的标准差)
夏普比率越高,表示单位总风险带来的收益越高。常见基准:SR < 0.5 表现较差,0.5-1.0 尚可,> 1.0 表现强劲,> 2.0 表现卓越。
**年化:**如果根据月度数据计算,SR_annual = SR_monthly * sqrt(12)。
索提诺比率
以下行偏差取代总波动率,只惩罚有害波动(低于最低可接受收益的收益)。
Sortino = (R_p - R_f) / sigma_downside
其中 sigma_downside = sqrt((1/n) * sum(min(R_i - MAR, 0)^2))。
常见的 MAR 选择:0%、无风险利率或目标收益。务必说明使用了哪种 MAR,并在分子中使用与下行偏差相同的基准点:如果 MAR 不是无风险利率,分子应为 (R_p - MAR),而非 (R_p - R_f)。混用基准点会导致比率内部不一致。
信息比率
衡量相对于基准的主动收益(alpha)与主动风险(跟踪误差)之比。
IR = (R_p - R_b) / TE
其中 TE = std(R_p - R_b) * sqrt(N)。
IR 高于 0.5 通常被认为表现良好;高于 1.0 则表现卓越,但难以持续。
特雷诺比率
衡量单位系统性风险(beta)的超额收益,而非单位总风险的超额收益。
Treynor = (R_p - R_f) / beta_p
适用于评估已通过分散投资消除非系统性风险的多元化投资组合。对于未分散的持仓,夏普比率更合适。
卡玛比率
衡量年化收益与最大峰谷回撤的关系。
Calmar = CAGR / |MaxDrawdown|
卡玛比率高于 1.0 表示年化收益超过最大回撤。CTA 和对冲基金投资者常用此比率。通常按 3 年窗口计算。
欧米茄比率
一种盈亏比率,用于考察收益分布在阈值 tau 上方和下方的整体情况。
Omega(tau) = integral from tau to +inf of [1 - F(r)] dr
/ integral from -inf to tau of F(r) dr
其中 F(r) 是收益的累积分布函数。
实际计算时,公式如下:
Omega(tau) = sum(max(R_i - tau, 0)) / sum(max(tau - R_i, 0))
Omega > 1 表示 tau 上方的预期收益超过 tau 下方的预期损失。与夏普比率不同,欧米茄比率能反映分布的完整形态(偏度、峰度)。
上行和下行捕获率
衡量投资组合在基准市场上涨和下跌时的参与程度。
Up Capture = R_p(in up months) / R_b(in up months) * 100
Down Capture = R_p(in down months) / R_b(in down months) * 100
Capture Ratio = Up Capture / Down Capture
理想状态:上行捕获率 > 100%,下行捕获率 < 100%,捕获比率 > 1。“上涨月份”和“下跌月份”分别指基准收益为正和为负的月份。
M 平方(莫迪利亚尼-莫迪利亚尼)
通过加杠杆或去杠杆,使投资组合波动率与基准波动率一致,并以与收益相同的单位表示风险调整后收益。
M^2 = R_f + SR_p * sigma_b
= R_f + ((R_p - R_f) / sigma_p) * sigma_b
解读:“如果将该投资组合调整至与基准相同的波动率,其收益将达到 M 平方。”因此可以直接与基准收益比较。
关键公式
| 公式 | 表达式 | 用途 |
|---|---|---|
| 夏普比率 | (R_p - R_f) / sigma_p | 单位总风险的收益 |
| 索提诺比率 | (R_p - R_f) / sigma_downside | 单位下行风险的收益 |
| 信息比率 | (R_p - R_b) / TE | 单位主动风险的主动收益 |
| 特雷诺比率 | (R_p - R_f) / beta_p | 单位系统性风险的收益 |
| 卡玛比率 | CAGR / |MaxDD| | 单位回撤风险的收益 |
| 欧米茄比率 | sum(max(R_i - tau, 0)) / sum(max(tau - R_i, 0)) | 完整分布的盈亏比率 |
| 上行捕获率 | R_p(up) / R_b(up) * 100 | 参与市场上涨的程度 |
| 下行捕获率 | R_p(down) / R_b(down) * 100 | 参与市场下跌的程度 |
| M 平方 | R_f + SR_p * sigma_b | 以收益单位表示的风险调整后收益 |
示例
示例 1:夏普比率计算
已知: 一只基金的年化收益率为 12%,无风险利率为 4%,基金的年化波动率为 15%。
计算: 夏普比率。
解答:
SR = (0.12 - 0.04) / 0.15
= 0.08 / 0.15
= 0.533
这只基金每单位风险获得了 0.533 个单位的超额收益。这处于“可接受”范围内,但低于 1.0。
示例 2:使用夏普比率和索提诺比率比较基金
已知:
- 基金 A:夏普比率 = 0.8,索提诺比率 = 1.2
- 基金 B:夏普比率 = 0.7,索提诺比率 = 1.5
计算: 对于厌恶下行风险的投资者,哪只基金更好?
解答:
基金 A 的夏普比率更高(0.8 对比 0.7),表明其总风险调整后表现更好。不过,基金 B 的索提诺比率明显更高(1.5 对比 1.2),意味着它每单位下行风险带来的收益显著更多。
这种差异表明基金 B 的波动更偏向上行——其总波动中包含更多“有利”波动(收益),而下行波动则相对有限。
对于厌恶下行风险的投资者,基金 B 更合适,因为索提诺比率更能反映他们关注的风险(亏损),而基金 B 更高的索提诺比率表明其下行风险管理更出色。
示例 3:信息比率
已知: 某投资组合的年化收益率为 10%,其基准收益率为 8%,跟踪误差为 4%。
计算: 信息比率。
解答:
IR = (0.10 - 0.08) / 0.04
= 0.02 / 0.04
= 0.50
该经理每单位主动风险创造了 0.50 个单位的主动收益。通常认为这是不错的信息比率,表明相对于基准偏离,经理持续创造了阿尔法。
常见误区
- 年化夏普比率的计算有误: 夏普比率按 sqrt(N) 缩放,其中 N 为每年的周期数。SR_annual = SR_monthly * sqrt(12),而不是 * 12。相除前,超额收益和波动率必须使用一致的单位。
- 无风险利率的频率错误: 如果计算月度夏普比率,应使用月度无风险利率(年利率 / 12),而不是直接使用年利率。
- 索提诺比率的 MAR 含义不明确: 根据 MAR = 0、MAR = 无风险利率或 MAR = 某个目标收益率,索提诺比率的结果会有显著变化。务必明确说明所采用的 MAR 假设。
- 样本量过小导致比率不可靠: 根据少于 36 个月度观测值计算出的比率在统计上并不可靠。根据 12 个月数据计算出的夏普比率,其标准误约为 sqrt((1 + SR^2/2) / 12),区间非常宽。
- 比较不同时期的夏普比率: 低波动环境下的夏普比率 1.0 与高波动环境下的 1.0 并不相同。绩效比率具有时期特异性,不能直接用于比较不同市场环境。
交叉引用
- historical-risk(wealth-management 插件):提供这些绩效比率分母所用的风险度量(波动率、回撤、下行偏差、跟踪误差)。
- performance-reporting(wealth-management 插件)和 return-calculations(core 插件):有关 TWR/MWR 的计算方法和报告呈现方式,请参阅 performance-reporting 和 core/return-calculations。
- forward-risk(wealth-management 插件):前瞻性风险度量(VaR、CVaR)通过估算未来潜在损失,补充回顾性绩效评估。
- volatility-modeling(wealth-management 插件):GARCH 或 EWMA 的波动率预测可用于计算前瞻性或条件夏普比率。
- factor-investing(wealth-management 插件):因子回归可分解这些比率背后的阿尔法;排他性指数筛查会使用跟踪误差和盈亏平衡信息比率
运行脚本
使用 uv run scripts/performance_metrics.py 运行(PEP 723 标头会自动解析 numpy),或先运行 pip install numpy scipy,再使用 python3 scripts/performance_metrics.py。直接运行会基于带固定种子的模拟投资组合和基准数据,输出完整的评分卡(Sharpe、Sortino、Information Ratio、Calmar、Treynor、Omega、捕获率、胜率、盈亏情况)。使用 --verify 可断言输出与本技能中的示例及演示的预期值一致(通过时退出代码为 0),使用 --help 可查看类的概览。此文件主要用于作为模块导入(例如,from performance_metrics import PerformanceScorecard)。