1930 字
10 分钟

组合风控体系:风险预算、压力测试与回撤控制

本课目标:把”感觉危险就减仓”升级为一套分层的风控体系——事前有预算、事中有监控、事后有复盘,并且每条规则都经过回测检验。

很多策略死掉不是因为信号失效,而是因为某一次风险事件把本金打掉了太多,从此再也回不到正常运转的状态。风控体系的意义在于:在事情发生之前就规定好你会怎么做,而不是在恐慌中临场发挥。本文是方法论讨论,不构成投资建议。

风控的三层结构:事前、事中、事后#

把风控动作按时间轴拆开,会清晰很多:

层次时点核心问题典型工具
事前建仓之前我最多愿意亏多少?亏在哪里?风险预算、仓位上限、集中度约束
事中持仓期间现在的风险和预算一致吗?实时敞口监控、回撤线、波动率目标
事后事件之后亏损来自哪里?规则有效吗?归因分析、风控规则复盘

三层缺一不可。只有事中监控而没有事前预算,就会陷入”跌了才想该不该卖”的被动;只有事前规则而没有事后复盘,规则会逐渐和市场脱节。

事后复盘值得多说两句,因为它最容易被省略。每一次显著回撤之后,至少回答三个问题:亏损来自哪个策略、哪类因子、哪些持仓?事前的风险预算有没有正确预估这次亏损的量级——如果实际亏损远超预算,说明风险模型漏掉了什么?事中的规则有没有被严格执行——如果没有,是规则不合理还是执行纪律出了问题?把答案写成简短的复盘记录,几次积累下来,你对自己组合的风险画像会远比任何模型输出更真切。

风险预算:先分配”亏损额度”再分配资金#

传统做法是分配资金(给策略 A 三成仓位),更合理的做法是分配风险(允许策略 A 贡献组合三成的波动或回撤)。两者的区别在于:低波动策略可以拿更多资金,高波动策略必须被压缩。

一个简化的风险预算流程:

  1. 确定组合层面的总风险目标,比如年化波动率目标或最大可容忍回撤;
  2. 按策略间相关性和各自波动率,把总风险拆分到每个子策略;
  3. 用目标风险除以子策略的实际波动率,反推出资金权重;
  4. 定期(如每月)根据滚动波动率重新校准。
import numpy as np
def vol_budget_weights(vols: np.ndarray, budgets: np.ndarray) -> np.ndarray:
"""按风险预算反推资金权重(忽略相关性的简化版)"""
raw = budgets / vols # 风险预算 / 波动率
return raw / raw.sum() # 归一化为资金权重
vols = np.array([0.25, 0.12, 0.08]) # 三个子策略的年化波动
budgets = np.array([0.4, 0.4, 0.2]) # 期望的风险贡献占比
print(vol_budget_weights(vols, budgets))

严格版本需要考虑相关性矩阵,但即使是这个简化版,也比按拍脑袋分资金要纪律得多。

压力测试与情景分析:问”如果……会怎样”#

波动率和 VaR 描述的是常态,压力测试关心的是非常态。设计压力测试有两条路径:

  • 历史情景重放:把组合当前的持仓放回历史上的极端阶段(如流动性危机、风格剧烈切换、单一板块崩塌的时期),看损益如何;
  • 假设情景构造:人为设定冲击组合,例如”中小市值因子单月大幅回撤 + 成交额萎缩一半 + 无法按收盘价成交”,检验组合在多重不利条件叠加下的表现。

好的压力测试有三个特征:情景要具体到可计算(每个资产跌多少、流动性折价多少);要覆盖你的策略最怕的那种市场,而不是泛泛的大盘下跌;要输出行动含义——如果测试结果不可接受,事前就应该降低相应敞口,而不是把报告存档了事。

回撤控制机制:规则、熔断与它们的代价#

事中风控最核心的是回撤控制。常见机制包括:

  • 分级降仓规则:回撤触及某一档位时按预定比例降低总仓位,例如每加深一档降一部分仓,直到最低仓位;
  • 熔断线:回撤触及深水线时全面降至底仓或空仓,进入冷静期,需满足恢复条件(如净值修复、波动回落)才能重新加仓;
  • 波动率目标:不直接盯回撤,而是让组合波动维持在目标水平,波动升高自动降杠杆。

必须诚实地面对代价:任何回撤控制都是用收益换路径。降仓规则会在 V 型反转中让你踏空修复段;熔断之后的再入场规则如果太保守,会长期把仓位锁在低位。不存在”只降低回撤不损失收益”的规则,只存在你是否愿意接受的取舍。

设计时还有两个细节值得注意。一是恢复路径要和触发路径不对称:降仓可以快,恢复要慢,避免在震荡市里被反复触发、来回摩擦;二是规则要作用在正确的层级——组合层面的熔断线和单策略层面的降仓规则应该分开设置,否则一个策略的局部回撤可能错误地触发全组合减仓。

风控规则也要回测#

这是本课最想强调的一点:风控规则本身就是策略的一部分,同样会过拟合,同样需要检验。

  • 把降仓、熔断规则写进回测引擎,比较”带风控”与”不带风控”两条净值曲线在收益、波动、最大回撤、恢复时间上的差异;
  • 对规则参数(触发线位置、降仓幅度、冷静期长度)做敏感性分析——如果结论对参数极其敏感,说明规则不稳健;
  • 检查规则在不同市场阶段的表现:牛市中它拖累多少,熊市中它保护多少,震荡市中它是否频繁误触发来回打脸。

一条没有回测过的风控规则,和一个没有回测过的因子一样不可信。

本课小结#

  • 风控分事前(预算)、事中(监控与执行)、事后(归因复盘)三层,缺一不可;
  • 优先分配风险而不是资金:让每个子策略的风险贡献匹配你的预算;
  • 压力测试要具体、要针对策略的软肋、要产生事前行动,而不是事后报告;
  • 回撤控制必然以牺牲部分收益为代价,关键是把取舍显式化、规则化;
  • 所有风控规则都必须回测和做参数敏感性检验,否则只是心理安慰。

动手练习:给你现有的一个回测策略加上两档降仓规则(回撤触及第一档降半仓、触及第二档降至两成仓,净值修复后逐步恢复),对比加规则前后的净值曲线、最大回撤和恢复时间,然后把两档触发线各移动一定幅度做敏感性分析,写下你对这套规则稳健性的判断。