3. 回撤控制指标体系构建
板块轮动策略的回撤控制,不能只盯一个“最大回撤”数字。最大回撤告诉你“最坏有多深”,却不告诉你“跌了多久”“多久能回来”“下跌是否伴随异常波动”“亏损是否集中在少数板块”。要真正管住回撤,需要把回撤拆成一组互相补充的指标,并让它们在同一时间轴上联动观察。本节围绕五个核心指标展开:最大回撤、回撤持续时间、恢复周期、波动率、下行风险,最后落到一个可落地的监控仪表盘设计。
五个指标各自回答什么问题
先明确参照约定:以下所有指标均以策略净值序列为基准,净值取每日收盘后的组合市值除以初始市值,回撤以历史最高净值为参照,取负值表示下跌幅度,例如 -12% 表示从峰值回撤 12%。
最大回撤(MDD)回答“最坏有多深”。计算方式是遍历净值序列,维护历史峰值,逐日计算当前净值相对峰值的跌幅,取最小值。它对应一个“峰—谷”区间,峰值日与谷底日之间的净值落差就是最大回撤幅度。对板块轮动策略而言,MDD 往往出现在风格切换或系统性下跌叠加持仓集中的时段。
回撤持续时间回答“跌了多久”。从净值创出峰值那天起,到净值重新回到该峰值那天止,这段区间长度就是一次完整回撤的持续时间。若尚未恢复,则计算到当前日期为止。它衡量的是“水下时间”,对资金占用和心理压力影响极大。
恢复周期回答“多久能回来”。严格说,恢复周期是回撤持续时间中“从谷底回到前高”的那一段,即谷底日到收复峰值日之间的天数。它与回撤持续时间配合使用:持续时间长但恢复周期短,说明下跌缓慢、修复迅速;持续时间短但恢复周期长,说明急跌后长期爬不出来。
波动率回答“日常颠簸有多大”。通常用日收益率的标准差年化,乘以 √252。它不直接等于回撤,但高波动往往放大回撤的深度和触发频率,是回撤的“背景噪声”。
下行风险回答“只算下跌那部分有多凶”。常用下行标准差:只取收益率小于目标收益(常设为 0 或无风险利率)的样本计算标准差,再年化。相比总波动率,它更贴近投资者真实感受到的亏损压力,也常作为索提诺比率的风险分母。
指标之间的联动关系
这五个指标不是并列的清单,而是有因果和时序关系的。下图展示了它们在一次典型回撤事件中的位置与联动:净值从峰值下行,波动率与下行风险在下跌段抬升,谷底之后进入恢复周期,最终收复峰值完成一次完整回撤。
从图中可以读出关键联动:波动率是全程背景,下行风险在下跌段集中抬升,二者共同影响回撤深度;最大回撤是“深度”指标,回撤持续时间和恢复周期是“时间”指标。只看深度会低估长期水下的伤害,只看时间会忽略单次急跌的冲击,必须成组解读。
计算实现要点
实际落地时,建议用一段可复用的计算逻辑统一产出全部指标,避免各指标口径不一致。以下为示例实现(Python 风格伪代码,参数与结果均为教学示例):
import numpy as np
def drawdown_metrics(nav, rf=0.0, periods=252):
nav = np.asarray(nav, dtype=float)
peak = np.maximum.accumulate(nav)
dd = nav / peak - 1.0 # 逐日回撤,负值
mdd = dd.min() # 最大回撤
trough = int(dd.argmin()) # 谷底位置
peak_idx = int(np.argmax(nav[:trough+1])) # 对应峰值位置
# 回撤持续时间:峰值到收复峰值(未收复则到末尾)
recover_idx = None
for i in range(trough, len(nav)):
if nav[i] >= nav[peak_idx]:
recover_idx = i
break
duration = (recover_idx if recover_idx is not None else len(nav)-1) - peak_idx
recovery = (recover_idx - trough) if recover_idx is not None else None
ret = np.diff(nav) / nav[:-1]
vol = ret.std(ddof=1) * np.sqrt(periods) # 年化波动率
downside = ret[ret < rf]
downside_risk = downside.std(ddof=1) * np.sqrt(periods) # 年化下行风险
return {"MDD": mdd, "duration": duration,
"recovery": recovery, "vol": vol,
"downside_risk": downside_risk}
几个容易踩坑的口径问题需要提前约定:其一,净值序列必须包含分红再投资,否则回撤会被高估;其二,峰值取“截至当日的历史最高”,不能用全样本最高,否则会破坏时序;其三,恢复周期在尚未收复峰值时应返回空值而非 0,仪表盘上要显示“未恢复”状态;其四,下行风险的目标收益阈值要与策略基准一致,股票型板块轮动通常取 0,若与无风险利率比较则需同步调整。
监控仪表盘设计
指标算出来只是原料,仪表盘要解决“一眼看出是否越界”。建议按三层组织:顶部为状态灯,用红黄绿三色显示当前回撤是否触及预警线;中部为趋势图,把净值曲线与回撤曲线叠放在同一时间轴,标注历史峰值、谷底与当前水下深度;底部为指标卡,并排展示 MDD、当前回撤、回撤持续时间、恢复周期、年化波动率、下行风险六个数值,并各自附带阈值与近 20 日变化方向。
阈值设定应结合策略历史分布而非拍脑袋。一个可参考的示例做法:取滚动 3 年 MDD 的 80 分位作为黄色预警线,取历史极值作为红色线;波动率超过近一年均值 1.5 倍触发黄色;下行风险连续 5 日高于阈值触发关注。以下为示例参数表(数值为教学假设,非实测):
| 指标 | 示例阈值(黄) | 示例阈值(红) | 观察频率 |
|---|---|---|---|
| 当前回撤 | -8% | -15% | 每日 |
| 回撤持续时间 | 40 个交易日 | 80 个交易日 | 每日 |
| 年化波动率 | 18% | 25% | 每周 |
| 年化下行风险 | 12% | 18% | 每周 |
最后强调解读顺序:先看当前回撤是否越线,再看回撤持续时间是否拉长,然后看恢复周期是否恶化,最后用波动率与下行风险判断是“噪声型回撤”还是“结构性回撤”。若回撤深度不大但持续时间与恢复周期同步拉长,往往意味着轮动信号失效或持仓风格漂移,这比单次深跌更值得警惕。指标成组看,才能把回撤从“事后数字”变成“事中可管的状态”。