收益评价指标:夏普、索提诺、卡玛
直觉
光看「赚了多少」不够——同样赚 10%,平稳赚到和坐过山车赚到完全是两回事。评价指标把「收益」和「风险」放在一起称量。本节用全站共用的 quant 引擎,一次性算出三个最常用的风险调整收益指标。
三个核心指标
夏普比率(Sharpe)
收益减无风险利率,除以全部波动。波动越大分母越大、夏普越低。年化乘 。
索提诺比率(Sortino)
分母只算下行波动(亏损那部分的波动)——因为上涨的波动是「好的」,不该惩罚。
卡玛比率(Calmar)
分母换成最大回撤,衡量「每承受一单位极端亏损,换来多少年化收益」。
「人话」解释:什么时候用哪个?
- 夏普:通用基准,对称看待涨跌波动。
- 索提诺:当收益分布偏斜(跌得猛、涨得缓)时更公道,只惩罚亏损侧。
- 卡玛:最关注「最惨会亏多少」时用它——它直接用最大回撤当风险。 三者都「越高越好」,但各自的风险定义不同,别直接横比数值。
可运行案例:用 quant 引擎一键算指标
读取 spy_daily.csv,构造「买入持有」的权益与收益序列,调用 quant 的指标函数与 performance_summary。
import quant
import numpy as np
import pandas as pd
df = pd.read_csv('/data/spy_daily.csv', parse_dates=['date']).set_index('date')
price = df['adj_close'] # 用前复权价算总收益
ret = price.pct_change().fillna(0.0)
equity = (1 + ret).cumprod()
print("—— 单项指标(年化) ——")
print(f"年化波动 : {quant.volatility(ret, freq=252):.4f}")
print(f"夏普 : {quant.sharpe(ret, freq=252):.3f}")
print(f"索提诺 : {quant.sortino(ret, freq=252):.3f}")
print(f"最大回撤 : {quant.max_drawdown(equity):.4f}")
print(f"卡玛 : {quant.calmar(equity, ret, freq=252):.3f}")
print("\n—— 一键汇总(performance_summary) ——")
summary = quant.performance_summary(equity, ret, freq=252)
print(summary.round(4))
动手改一改
把价格换成未复权 close(不含分红)再算一次——你会发现各项指标略低,体现「分红对长期总收益」的影响。
小结
- 夏普 = 超额收益 / 全波动(对称惩罚);
- 索提诺 = 超额收益 / 下行波动(只惩罚亏损);
- 卡玛 = 年化收益 / 最大回撤(关注极端亏损);
- 全站统一用
quant引擎计算,保证可比较。
小测验
1. 夏普比率的分母是?
2. 索提诺比率相对夏普的区别是?
3. 卡玛比率的分母是?