⚠️ 免责声明:本章仅为教育与研究方法展示,不构成任何投资建议。 所有回测结果来自历史数据,不代表未来表现。投资有风险,决策需独立判断。
第十课:夏普比——每单位风险的回报¶
本章代码:
code/lesson10_sharpe.py运行方式:python lesson10_sharpe.py
10.0 策略概述¶
这是什么策略¶
前九课里你学会了看收益、看风险、看估值、看动量。现在该问一个整合性问题了:哪个指数性价比最高?
夏普比 = (年化收益 - 无风险利率) / 年化波动率。
翻译:每承受 1% 的颠簸,你额外赚了多少。就像买西瓜算"多少钱一斤"——不是只问总价,是问单价。
它回答什么问题¶
| 问题 | 方法 |
|---|---|
| 哪个指数"性价比"最高? | 夏普比排名 |
| 夏普比最高的指数一定最值得买吗? | 不一定——夏普比惩罚上涨波动 |
| 夏普比为负 = 什么? | 买理财比买这个指数更好 |
10.1 16 指数夏普比排名¶
跑 python code/lesson10_sharpe.py,你会得到(1990—2026 全数据,无风险利率 3.5%):
排名 指数 夏普比 年化收益 波动率
1 中证 500 0.24 10.3% 28.8%
2 深证红利 0.23 9.9% 27.4%
3 深证 100 0.23 9.8% 27.7%
4 上证指数 0.21 11.1% 36.1%
5 中证 800 0.18 8.2% 25.4%
...
15 深证价值 -0.03 2.7% 23.4%
16 深证成长 -0.09 1.2% 25.7%
图 10-1:16 指数夏普比排名柱状图。 绿柱(>0.5)= 优秀,橙柱(0—0.5)= 一般,红柱(<0)= 不如存银行。注意垫底的深证价值(-0.03)和深证成长(-0.09)——买理财比买它们好。上证 50 的夏普只有 0.05,排在倒数第四——"上证 50 最稳"是常见错觉。

10.2 夏普比的死穴¶
夏普比把"上涨波动"和"下跌波动"同等对待。一个指数如果暴涨 50% 再跌 10%,波动率会很大——夏普比会很低。但这个指数的持有者赚了 35%。
Sortino 比率修正了这个缺陷——只计算下跌波动。但大多数资料引用的还是夏普比,所以你要知道它的局限。
10.3 这一课教了你什么¶
- 夏普比 = "性价比"——每单位风险的超额回报。
- 中证 500 是 26 年综合性价比冠军(夏普 0.24),深证价值/深证成长垫底(负值)。
- 上证 50 夏普仅 0.05——"大盘蓝筹最稳"需要数据检验,不能靠感觉。
- 夏普比惩罚上涨波动——这不是 bug,但使用时要意识到。
- 夏普比最大的用处不是选指数——是排除。夏普比 < 0 的指数直接跳过。
10.3 课堂问答¶
问:夏普比 0.24 的指数,和夏普比 0.18 的指数,我应该选前者吗?
不一定。夏普比的差异在统计上可能不显著——0.24 和 0.18 之间的差距,换一个数据窗口可能就反转了(本课代码里沪深300 的 3 年滚动夏普在 -1.09 到 +2.78 之间波动)。夏普比最大的价值在排除——夏普比 < 0 的指数(深证价值 -0.03、深证成长 -0.09),你可以确定它"不如存银行"。但夏普比 0.24 和 0.18 之间——需要结合其他因素(估值、动量、你自己的信息优势)综合判断。
问:为什么不用 Sortino 比率?
应该用。Sortino 只计算下跌波动——它不会因为一个指数涨得太好而惩罚它。但因为大多数资料和基金报告引用的是夏普比,你要先学会看夏普比——然后自己心里默默算 Sortino。
动手练习(第 10 课)¶
- 入门:实现 Sortino 比。把分母从"总波动"改成"下行波动" (只取负收益的标准差),重新排名。谁上升了?谁下降了? 想想为什么(惩罚上涨波动的夏普,对谁最不公平)。
- 进阶:改无风险利率。把 3.5% 改成 2% 和 5%,16 个指数的排名变化大吗? 如果排名对无风险利率不敏感,说明结论稳;如果敏感,说明结论脆。
- 挑战:找"从未为负"的指数。写代码算每个指数 3 年滚动夏普的历史最低值—— 有没有一个指数在任何 3 年窗口都没亏过钱?如果答案是"没有", 你就理解了为什么"过去表现好"不能推导"未来表现好"。
下节预告: 最后一课——强弱势策略。不是"涨了还是跌了",是"涨了多少个标准差"。跃升等级,第十一课。