看懂收益与风险:年化收益、最大回撤与夏普比率
本课目标:掌握评价一条净值曲线的三把尺子——年化收益、最大回撤、夏普比率,理解它们各自度量什么,并能用 pandas 亲手算出来。
累计收益与年化收益
累计收益率回答”这段时间总共赚了多少”:期末净值除以期初净值减一。但”三年赚 40%“和”一年赚 40%“显然不是一回事,所以需要年化——把不同时长的收益折算到统一的”每年”口径上,才能互相比较。
年化的正确方式是几何年化(复利口径),而不是简单地除以年数:
total_return = nav.iloc[-1] / nav.iloc[0] - 1 # 累计收益n_years = len(nav) / 252 # 约 252 个交易日/年ann_return = (1 + total_return) ** (1 / n_years) - 1 # 几何年化为什么必须用复利口径?因为收益是叠乘关系:先亏 50% 再赚 50%,结果不是回到原点,而是净亏 25%。简单平均会掩盖这种不对称,几何年化才如实反映资金的真实增长速度。
两个注意点:一是时间太短不要年化。把一个月的收益年化成”年化百分之几十”,是数字游戏,没有统计意义。二是年化收益抹平了过程——它不告诉你中途经历了什么,这正是接下来两个指标要补的课。
波动率:过程有多颠簸
波动率是日收益率的标准差,通常乘以 √252 折算成年化口径:
daily_ret = nav.pct_change().dropna()ann_vol = daily_ret.std() * (252 ** 0.5)直觉上,波动率高意味着净值曲线上蹿下跳,持有体验差,也意味着你在任意一天被迫卖出时,价格可能很不利。两条年化收益相同的曲线,波动率低的那条几乎在所有意义上更好。
要注意波动率不是一成不变的:市场平静期和剧烈波动期的数值可能差好几倍。所以除了看整段样本的波动率,也可以用 rolling 算滚动波动率,观察策略在不同市场环境下的风险水平是否稳定。
最大回撤:最痛的一段经历
最大回撤(Max Drawdown)回答一个非常具体的问题:如果我不幸买在历史最高点,之后最惨的时候亏了多少? 它是净值从任意历史高点回落的最大幅度。
计算思路分三步:对净值序列求”截至每一天的历史最高值”;用当天净值除以历史最高值减一,得到当天的回撤;取整个序列中最深的那个值。
peak = nav.cummax() # 截至当天的历史最高净值drawdown = nav / peak - 1 # 每天的回撤(负数或零)max_dd = drawdown.min() # 最大回撤最大回撤的价值在于它贴近真实痛感:它直接对应”账户从最高点缩水多少”,是普通人最容易感知、也最容易导致中途放弃的数字。评估策略时问自己一句:回测里的最大回撤如果真实发生在我的账户上,我拿得住吗?拿不住,再高的年化收益也和你无关。
除了深度,还要看回撤持续时间:从净值创下高点到重新收复这个高点,中间隔了多久。有些策略回撤不算深,但一套就是一两年,对持有人的心理消耗同样巨大。用上面算出的 drawdown 序列找出连续为负的最长区间,就能得到这个数字。
夏普比率:每承担一份风险换来多少收益
夏普比率把收益和风险放进同一个数字:超额收益(相对无风险利率)除以波动率。
rf_daily = 0.02 / 252 # 假设年化无风险利率示意值excess = daily_ret - rf_dailysharpe = excess.mean() / excess.std() * (252 ** 0.5)直觉理解:夏普比率衡量的是”性价比”——每承担一个单位的波动,换来多少超额收益。同样赚到 10%,一条曲线平稳爬升、另一条大起大落,前者夏普更高,说明它的收益更”便宜”。
夏普比率也有局限:它把向上和向下的波动同等对待,而投资者真正讨厌的只是向下的波动;对收益分布极端不对称的策略,它可能给出误导性的高分。所以夏普适合当第一道筛子,而不是唯一标准。
使用夏普时还要注意可比性:比较两个夏普比率,前提是它们用同样的时间区间、同样的数据频率、同样的无风险利率假设算出来。拿别人报告里的夏普和自己算的直接比大小,经常是在比较两个口径不同的数字。
只看收益不看风险的坑
把上面的指标合起来看一个对比:
| 指标 | 策略 A | 策略 B |
|---|---|---|
| 年化收益 | 较高 | 中等 |
| 年化波动率 | 很高 | 较低 |
| 最大回撤 | 很深 | 较浅 |
| 夏普比率 | 较低 | 较高 |
只看第一行,策略 A 完胜;四行一起看,策略 B 很可能才是多数人真正能坚持持有的那个。收益率排行榜只展示第一行,这就是”冠军基金第二年常令人失望”的一个结构性原因:高收益样本里混着大量高风险策略,运气成分被当成了实力。
另一个常见坑是用短期收益外推长期:某策略最近三个月表现出色,不代表它的长期年化就是那个水平。看指标时永远配上时间长度和期间的市场环境——一个只覆盖单边上涨行情的回测,无论指标多漂亮,都没有经历过真正的考验。
最后提醒一句:所有指标都应该在扣除交易成本之后计算。佣金、印花税和滑点会同时拉低收益、加深回撤,一个换手频繁的策略在扣费前后可能是两个完全不同的结论。本文不构成投资建议。
本课小结
- 年化收益用几何(复利)口径计算,时间太短的收益不要年化。
- 波动率度量过程的颠簸程度,同等收益下越低越好。
- 最大回撤是”买在最高点后最惨亏多少”,直接对应持有人的真实痛感。
- 夏普比率衡量单位风险换来的超额收益,适合做第一道筛子但不是唯一标准。
- 评价任何策略或基金,收益、波动、回撤、夏普四个数字要一起看。
动手练习:用前几课下载的股票(或一只宽基 ETF)近三年的后复权数据,构造”买入并持有”的净值曲线,计算年化收益、年化波动率、最大回撤和夏普比率四个指标,并找出最大回撤对应的起止日期,回想那段时间市场发生了什么。