← Quant 101 总览
第 02 关 · 风险

风险与收益的度量Risk & Reward

上一关你问“年化26%但单日跌8%拿不拿得住”。这一关给答案:光看赚多少会骗你,收益必须配着风险一起看

1高收益 ≠ 好策略

把三只风格不同的票放一起体检,真相立刻浮现:

年化夏普最大回撤
茅台26.8%0.94-47%
宁德33.6%(最高)0.86-61%
平安2.1%0.22-62%

宁德涨最多,但夏普反而输茅台、坑还更深——它是“提心吊胆地赚”。平安则是反面教材:几乎不赚还坐了大过山车。所以“年化最高”常常不是最优选择。下面是四个该刻进脑子的指标。

2波动率:赚得稳不稳

日收益率的标准差,年化(× √252)。越大,上蹿下跳越厉害。它本身不分好坏,但是后面所有“风险调整”的基础。

vol = ret.std() * np.sqrt(252)     # 年化波动率

3夏普比率:性价比(最常用)

夏普 = 年化超额收益 / 年化波动率——每承担一份风险,换来多少收益。同样赚 20%,波动小的夏普高、更值得。经验档位:

sharpe = ret.mean()*252 / (ret.std()*np.sqrt(252))

4最大回撤:能不能扛(最戳心)

历史上从某个高点最惨跌了多少。回撤 = 当前净值 / 历史最高净值 − 1,取最小值。-50% 意味着本金腰斩——这才是“拿不拿得住”的真考验,多数人会在深坑里割肉离场。看下图那条“水下曲线”:坑越深、在水下待越久,越熬人。

nav = (1 + ret).cumprod()              # 净值曲线
mdd = (nav / nav.cummax() - 1).min()   # 最大回撤

5卡玛比率:为这点收益要受多大痛

卡玛 = 年化收益 / |最大回撤|。茅台 ≈ 0.57,即每承受 1% 的最大回撤换来 0.57% 年化。直观衡量“痛苦性价比”。

回到你上一关的问题

“单日跌 8% 拿不拿得住”——答案:单日波动不可怕,可怕的是最大回撤(连续的深坑)。所以评价任何东西,永远收益 + 风险一起看,而夏普和最大回撤是最该先看的两个。

✍ 动手做

1. 换成你关心的几只票,看谁夏普最高(不一定是涨最多那只)。
2. 把区间改成 2021–2024(下跌市),看夏普和回撤怎么恶化——“牛市人人股神,熊市才见真章”。

小结

波动率=稳不稳;夏普=性价比(>1不错);最大回撤=能不能扛(-50%即腰斩);卡玛=痛苦性价比。最高收益常常不是最好选择。

三只票:上=净值曲线,下=回撤“水下”图(离历史高点跌了多少)。
动手做 · 解题过程 + 参考答案先自己写,再点开对答案
1几只票里,谁夏普最高(不一定是涨最多的)
思路 · 夏普 = 年化收益 ÷ 年化波动,衡量“每担一份风险换多少收益”。对每只票算收益率→套夏普公式→排序。注意涨最多的不一定夏普最高。
import numpy as np
def sharpe(r):
    r = r.dropna()
    return r.mean()*252 / (r.std()*np.sqrt(252))     # 年化收益/年化波动
for code, name in [("600519.SH","茅台"),("300750.SZ","宁德"),("002594.SZ","比亚迪"),
                   ("600036.SH","招行"),("000001.SZ","平安")]:
    r = ts.pro_bar(ts_code=code, api=pro, adj="qfq",
                   start_date="20190101", end_date="20240101"
                   ).sort_values("trade_date")["close"].pct_change()
    print(name, f"夏普{sharpe(r):.2f}")
结果 · 茅台 0.94 > 宁德 0.86 ≈ 比亚迪 0.86 > 招行 0.36 > 平安 0.22。宁德涨得比茅台多,夏普反而低——它是“提心吊胆地赚”,这就是风险调整的意义。
2把茅台换到熊市区间 2021–2024,看夏普和回撤怎么恶化
思路 · 加一个最大回撤函数:净值除以历史最高净值减1,取最小值。再把区间换成 2021–2024,对比同一只票在牛/熊里的体检表。
def max_dd(r):
    nav = (1 + r.dropna()).cumprod()
    return (nav / nav.cummax() - 1).min()            # 最深的坑
r = ts.pro_bar(ts_code="600519.SH", api=pro, adj="qfq",
               start_date="20210101", end_date="20240101"
               ).sort_values("trade_date")["close"].pct_change()
print(f"夏普{sharpe(r):.2f}  最大回撤{max_dd(r)*100:.0f}%")
结果 · 茅台 2021–2024:夏普从 0.94 暴跌到 0.05,最大回撤 −47%。同一只票,牛市像股神、熊市原形毕露——所以绝不能只拿一段牛市回测下结论。
← 上一关
看懂一只股票
下一关 →
第一个策略:双均线交叉