Q-CodeQ-Code 打开工作台

回撤控制模块

风险控制A股风险 低进阶更新 2026-09-24#回撤控制#仓位管理#风控模块

组合层面的回撤熔断:净值回撤超过分档阈值时强制降仓,按防抖规则分档恢复,限制最大亏损深度。

模块目标

回撤深度是投资者体感最直接的风险指标,学术上对回撤施加约束的最优投资问题有严格解 [1]:控制回撤等价于随净值相对高点的关系动态调整风险敞口。本模块是组合层风控件:回撤越深、仓位越轻,强制截断亏损的复利式扩大。与波动率目标模块互补——一个看波动速度,一个看亏损深度。

分档参数

  • 回撤 10%:降至基准仓位的 70%;
  • 回撤 15%:降至 50%;
  • 回撤 20%:降至 0(空仓观察);
  • 恢复规则:净值自本轮高点回撤收窄至当前档位触发深度的一半时,恢复一档;
  • 恢复节奏:逐档递进,禁止跳档;
  • 评估频率:日频,信号次日执行。

全部阈值可参数化,示例值须实测标定。

回撤与档位映射

回撤深度:

DDt=1−NAVtmax⁡s≤tNAVsDD_t = 1 - \frac{NAV_t}{\max_{s \le t} NAV_s}

档位映射(示例):

kt={1.0DDt<10%0.710%≤DDt<15%0.515%≤DDt<20%0DDt≥20%k_t = \begin{cases} 1.0 & DD_t < 10\% \\ 0.7 & 10\% \le DD_t < 15\% \\ 0.5 & 15\% \le DD_t < 20\% \\ 0 & DD_t \ge 20\% \end{cases}

恢复时按防抖规则逐档回调 ktk_t,不随回撤收窄立即跳变。

执行规则

每日收盘后计算回撤深度,次日按档位调整风险资产与现金比例。降仓动作立即执行,恢复动作必须满足防抖条件(回撤收窄至触发深度的一半以上)且逐档进行。模块不干预持有什么,只决定总共留多少仓位;标的与信号完全交给上层策略。

风险与失效场景

  • V 型反转踏空:熔断降仓后市场急速反弹,逐档恢复会系统性错过反弹初段,这是该模块的固有代价;
  • 阈值主观:分档过浅则形同虚设,过深则一次都没有触发过就没有存在感,必须与所挂策略的历史回撤分布匹配;
  • 反复横跳:回撤在阈值附近徘徊时档位反复切换,防抖与滞后恢复就是为此设计,不可为了灵敏而移除;
  • 高点漂移:新高会把回撤基准抬高,慢牛中的正常回调也可能触发浅档降仓;
  • 与波动率模块叠加:两个风控件同时作用会双重降仓,叠加使用时必须核对总敞口下限。

验证状态

待验证。需要完成:分档阈值组合的对照;恢复防抖系数敏感性;2015、2018、2024 等极端年份的熔断及时性与反弹踏空成本核算;与波动率目标模块叠加时的总敞口行为。本文不提供任何未实测的收益或回撤数字。

参考文献与延伸

[1] Grossman, S. J., & Zhou, Z. (1993). Optimal Investment Strategies for Controlling Drawdowns. Mathematical Finance, 3(3).(回撤约束下最优投资策略的严格解)

[2] Q-Code 量化策略工作台

策略逻辑结构

  1. 组合净值序列 — 净值或持仓市值动态计算
  2. 回撤深度 — 净值距历史高点的回撤
  3. 分档降仓 — 10%/15%/20% 三档熔断
  4. 恢复防抖 — 收窄至触发深度一半才恢复
  5. 分档恢复 — 逐档递进禁止跳档

AI 生成提示词

复制以下提示词,打开 Q-Code 工作台粘贴到 AI 对话框,即可自动生成该策略的 QMT 策略代码(单个完整 .py 文件,支持 QMT 回测与实盘)。

请生成一个 QMT 兼容的回撤控制模块。输入为组合净值序列(或由持仓市值动态计算),跟踪净值距历史高点的回撤深度:回撤达到 10% 降至 70% 仓位、15% 降至 50%、20% 降至 0(全部参数可配置);降仓后净值自低点反弹至阈值区间一半时恢复一档,逐档递进,禁止一次性恢复满仓。模块不产生标的信号,只缩放既有策略的总敞口;所有阈值写入 init,禁止未来函数,兼容回测与实盘分支,输出单个完整 Python 文件并包含详细日志。
用自然语言,生成你的 QMT 策略
注册即赠 200 积分,约可生成 5 次 · 支持 Kimi / GLM / DeepSeek
打开 Q-Code 工作台