← 返回博客列表

【魔码量化工程实战进阶 #21】风控规则与熔断:让策略死得慢一点

2026年08月31日 18:05 · 魔码数服 · 魔码量化工程实战进阶

【魔码量化工程实战进阶 #21】风控规则与熔断:让策略死得慢一点

模块三给了信号(#13–#17),模块四前面给了框架(#18)、仓位(#19)、成本(#20)。本篇加最后一道闸——风控:单票上限、行业中性、ATR 止损、最大回撤熔断。它的目标不是"多赚",是"别死":让一个坏策略的回撤有上限,给你留纠错与时间。

本文你将得到什么

  1. 四道风控闸:单票上限 / 行业中性 / ATR 止损 / 最大回撤熔断
  2. 熔断的工程写法(回撤触线 → 强制空仓)
  3. 本机复核(合成 252 日,seed=7):−10% 熔断把最大回撤从 −11.5% 锁到 −10.4%
  4. 三个熔断的副作用坑:触发滞后 / 跳空穿越 / 过度止损

一、痛点:没有风控,策略迟早送命

任何信号都有衰周期。满仓 + 无止损,遇到一波连跌,回撤 −40% 不止——不仅本金重伤,更可能触发强平、心态崩盘、在底部砍仓。风控是"安全带":不让你跑更快,但让你撞车时活下来。


二、工程方案:四道闸

2.1 单票上限(组合层)

weight = weight.clip(upper=0.10)    # 单票 ≤ 10% 持仓

2.2 行业中性

# 按行业分组,组内权重归一,避免全仓单一行业
weight = weight.groupby(industry, axis=1).transform(lambda x: x/x.sum())

2.3 ATR 止损(个股层,#14)

stop_price = entry - 2 * atr14
exit_sig = (s < stop_price).astype(int)   # 跌破止损价出局

2.4 最大回撤熔断(组合层)

equity = np.exp(pnl.cumsum())
drawdown = equity / equity.cummax() - 1
stop = sig.copy()
stop[drawdown < -0.10] = 0            # 回撤破 -10% → 强制空仓
pnl_stop = stop.shift(1).fillna(0) * ret - cost

三、本机复核(合成 252 日,seed=7)

加 −10% 回撤熔断前后:

无熔断: 最大回撤 = -11.5%   收益 = -6.1%
-10% 熔断: 最大回撤 = -10.4%   收益 = -6.2%

熔断把回撤从 −11.5% 锁到 −10.4%——本样本里效果有限,因为下跌是"单日跳空"式(一天就破 −10%,熔断来不及在破之前出局)。这正说明:日线级熔断有滞后,真正防跳空要靠盘中止损(#07 实时快照触发)。熔断的价值在"慢刀子割肉"的连跌里最明显。


四、原理深挖:三个熔断副作用坑

  1. 触发滞后:日线收盘才算回撤、次日才空仓,跳空日已经跌穿。要防跳空,必须盘中止损(用实时快照 #07,盘中破位立即出)。
  2. 跳空穿越止损:一字跌停/复牌补跌,价格直接跳过止损价,止损单无法成交。应对:仓位上限 + 分散,不押单票。
  3. 过度止损亏手续费:止损设太紧(如 −1%),震荡市频繁止损,手续费吃掉本金。止损位用 ATR 自适应(波动大放宽),别拍脑袋固定百分比。

五、小结

风控四道闸:单票上限防孤注一掷、行业中性防风格踩雷、ATR 止损防个股深套、回撤熔断防组合崩盘。它们不增收益,但给回撤设上限——让坏策略"死得慢一点",留给你纠错和时间。日线熔断有滞后,盘中止损才是防跳空的真防线。

盘中风控(实时快照触发止损)依赖全市场实时数据;魔码量化 Pro 包(全市场实时)让"盘中熔断"从设想变可行。详见文末。


免责声明:本文所有示例数据仅用于接口演示,不构成任何投资建议;市场有风险,投资需谨慎。

系列持续更新中。 想要亲手跑通上面的代码?前往 魔码证书申请页 免费领取你的专属证书,复制即用、按次计费、稳定可用。

想亲自试一下?免费获取证书
客服微信
客服微信二维码