3. 回撤的数学表达
在De-Risking体系中,回撤不是一个模糊的“亏了多少”的直觉,而是一套可计算、可比较、可约束的数学对象。只有把回撤写成明确的公式,才能把它嵌入风控规则、仓位调整和止损触发逻辑。本节从最基础的单次回撤定义出发,逐步过渡到滚动最大回撤、回撤分布与尾部特征,建立完整的量化表达框架。
一、核心原理:从峰值到谷值的严格定义
回撤描述的是资产净值从某个历史高点回落到后续低点的幅度。设净值序列为 \(N_t\),定义截至时刻 \(t\) 的历史峰值为:
Peak_t = max(N_0, N_1, ..., N_t)
则时刻 \(t\) 的回撤为:
Drawdown_t = (Peak_t - N_t) / Peak_t
该值恒为非负,表示当前净值相对历史峰值的损失比例。若 \(N_t\) 本身创出新高,则回撤为0。一次完整的回撤事件由“峰值—谷值—恢复”三段构成:峰值是回撤起点,谷值是回撤最深点,恢复点是净值重新回到前高的时刻。最大回撤(Max Drawdown, MDD)即整个区间内所有回撤的最大值:
MDD = max(Drawdown_t), t ∈ [0, T]
二、方法流程:滚动最大回撤的计算
静态最大回撤只给出一个全局数字,无法反映回撤随时间的变化。滚动最大回撤(Rolling Max Drawdown)在固定窗口内重复计算MDD,形成时间序列,用于监控回撤的动态演化。其计算流程如下:
- 确定滚动窗口长度 \(W\),例如60个交易日、120个交易日或1年。
- 对每个时点 \(t\),取窗口 \([t-W+1, t]\) 内的净值子序列。
- 在窗口内计算历史峰值序列与逐点回撤。
- 取窗口内回撤最大值,作为该时点的滚动最大回撤。
- 将各时点结果拼接,得到滚动最大回撤曲线。
def rolling_max_drawdown(nav, window):
results = []
for t in range(len(nav)):
start = max(0, t - window + 1)
sub = nav[start:t+1]
peak = sub[0]
mdd = 0.0
for v in sub:
peak = max(peak, v)
dd = (peak - v) / peak
mdd = max(mdd, dd)
results.append(mdd)
return results
滚动窗口的选择决定了监控的敏感度:窗口越短,对近期回撤越敏感,适合高频De-Risking;窗口越长,越能捕捉结构性回撤,适合战略资产配置。实践中常同时监控20日、60日、120日三档滚动回撤,形成短中长三层预警。
三、回撤分布与尾部特征
最大回撤是一个极值统计量,仅看单一数字会丢失大量信息。将滚动回撤序列视为随机变量,可以构建回撤分布,进而提取尾部特征。常用统计量包括:
| 统计量 | 含义 | De-Risking用途 |
|---|---|---|
| 回撤频率 | 回撤超过某阈值的次数占比 | 设定预警触发频率 |
| 回撤分位数 | 如95%分位回撤 | 确定极端情景下的仓位上限 |
| 回撤均值 | 回撤事件的平均深度 | 评估常态风险预算 |
| 回撤持续期 | 从峰值到恢复的时间 | 评估资金占用成本 |
| CVaR of DD | 超过VaR阈值后的平均回撤 | 尾部风险资本计提 |
回撤分布通常呈现右偏厚尾:大多数回撤较浅,但少数极端回撤深度远超均值。这意味着基于正态假设的风险模型会系统性低估回撤风险。在De-Risking中,必须直接使用经验分布的分位数或极值理论(EVT)来设定约束,而非依赖标准差倍数。
四、案例与误区复盘
假设某策略净值序列在120日窗口内,滚动最大回撤从3%逐步升至12%。若仅看全局MDD为12%,可能认为风险可控;但滚动曲线显示回撤在持续加深,且已突破95%分位阈值8%。此时De-Risking应已触发,而非等待全局MDD进一步扩大。
复盘时应同时检查:滚动窗口选择是否与调仓频率匹配;回撤分布是否随市场状态切换而漂移;尾部分位数是否稳定。只有将回撤从单一数字扩展为“峰值—谷值—滚动—分布—尾部”的完整表达,De-Risking规则才能既灵敏又稳健。