跳转至

最大回撤

定义

净值相对它自己此前高点的最大跌幅。卡玛比率用这段的年化收益去除这个跌幅的绝对值。

公式

\[ \mathrm{MDD}=\min_t \frac{V_t}{\max_{s\le t} V_s}-1,\qquad \mathrm{Calmar}=\frac{\mathrm{CAGR}}{|\mathrm{MDD}|} \]

教学例子:年化 10%、最大回撤 25% 时,卡玛比率是 0.40。这不是 SPY 均线那次回撤的数字。

直觉

回撤问的是「从最好的时候掉下去多少」,不是「最后一年赚了多少」。中间创新高会把起算点往后挪。

实务要点 / 常见误区

  • 入金不抬高水位。水位只跟策略净值走。
  • 袖套单位净值的回撤约束,可以严于回测里那一次最大回撤。
  • 触发之后要人来复位,程序不会自己把闸门打开。

相关概念

代码

def max_drawdown(nav: list[float]) -> float:
    # 高点只使用当时及之前的净值,后面的新高不能改写更早的跌幅。
    peak = nav[0]
    worst = 0.0
    for value in nav:
        peak = max(peak, value)
        worst = min(worst, value / peak - 1.0)
    return worst

教材:M01 数理统计工具箱