mcpField
P
performance-metrics

performance-metrics

github.com/joellewis数据与数据库218716 次安装15 周前更新
代码仓库

关于 performance-metrics

面向投资组合分析的金融知识技能,说明风险调整后绩效指标的定义、公式和解读,并附有可运行的 Python 评分卡脚本。

主要功能

  1. 01解释 Sharpe、Sortino 等绩效比率
  2. 02涵盖基准比较与涨跌捕获指标
  3. 03提供计算示例与常见误区
  4. 04附带 Python 评分卡脚本

适用场景

  1. 01比较基金的风险调整后表现
  2. 02评估组合相对基准的主动收益
  3. 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)。

评论

支持 Markdown