博客

风控的两种语言:Sizing 与 Safety 为什么绝不能混为一谈

2026年7月6日

English

想象一辆车的两套系统:油门和安全气囊。

油门是连续的——你根据路况、车速、目的地随时调整踩多深。安全气囊是离散的——它平时完全不参与驾驶,只在碰撞的那一毫秒无条件弹出,而且弹出时不征求你的意见。

现在想象一个工程师说:“既然都是安全相关,我们把它们合并吧——让气囊根据风险水平持续地部分充气,同时让油门在危险时自动变软。”你会立刻意识到这是灾难设计:气囊变成了一个迟钝的油门,油门变成了一个不可靠的气囊,两个系统都失去了自己的数学性质。

量化风控里,这个灾难设计随处可见。

两种语言

一个交易系统里所有的“风险控制”,其实分属两种完全不同的语言:

Sizing(仓位控制)回答“下多大注”。 它是连续的、由 edge 驱动的、永远在线的。Kelly 准则和它的各种保守变体、波动率目标、基于信号置信度的加减仓——这些都是 sizing。它的输入是你对优势的估计,输出是一个目标敞口。它是策略的一部分,是进攻的数学。

Safety(安全控制)回答“什么时候切断我”。 它是离散的、fail-safe 的、平时不激活的。日内亏损熔断、回撤触发的 reduce-only、总杠杆硬上限、kill switch——这些都是 safety。它的输入是“系统是否已经处于不该继续的状态”,输出是一个否决。它不属于任何策略,是生存的数学。

这两种语言的区分不是分类学趣味,而是有严格的工程后果。混淆它们的典型症状是:让一个安全信号去连续地缩放仓位目标——比如“波动率指数越高,仓位越小”这种看起来很合理的设计。

问题出在哪?这等于让两个 sizing 意见做乘法平均。你的策略说“基于 edge,目标敞口是 X”;你的风险指标说“基于恐慌程度,打个七折”。0.7X 是什么?它既不是 edge 最优的仓位,也不是安全要求的仓位——它是两个都对的答案平均出来的一个都不对的答案。更糟的是,这个连续缩放器整天都在工作,持续污染你的仓位序列,让归因变得不可能:业绩差了,是信号错了还是缩放器错了?没人说得清。

正确的设计是让每种语言说自己的话:sizing 给出目标,safety 要么放行、要么否决、要么强制降级——中间没有“打折”这个选项。安全控制平时的正确状态是“完全不激活”,就像气囊平时的正确状态是完全不充气。

✗ wrong — safety multiplied into sizingsizing (edge)target = X× risk scaler 0.7always on, always blending0.7X — whose call?attribution now impossible✓ right — two languages, each speaking its ownsignal / modellearning systemsizing (edge)continuous · target = XSAFETY GATEpass · VETO · reduce-onlydiscrete · fail-safe · no learningbrokerX or nothingthe gate is an architectural property: no physical path from strategy to broker around itits normal state is fully inactive — like an airbag, never “partially inflated”

市场中性不等于危机中性

这条分界线之所以重要,还有一个更深的原因:你必须先想清楚系统真正的失败模式,才知道 safety 该盯什么。而直觉给出的答案通常是错的。

以市场中性策略为例。直觉说:多空对冲了,市场涨跌不影响我,所以最大的风险是市场崩盘时波动放大——盯住恐慌指数就行。

历史给出的答案完全不同。市场中性策略史上最惨烈的日子——2007 年 8 月的 quant unwind——发生在一个波动率指数几乎没动的平静市场里。杀死那些组合的不是市场方向,而是同行的平仓:拥挤在相似因子上的资金被迫去杠杆,卖出彼此的多头、回补彼此的空头,让“中性”组合的两条腿同时反向。你的对冲保护你不受市场影响,但没有任何对冲能保护你不受“和你持有相同头寸的人”影响。

the crisis intuition prepares forthe one that actually kills neutral booksfear index spikeshedged book barely movesfear index: nothing to seecrowded peers deleverage —both legs bleed, quietlyheadline crisis · macro safety fires — correctlyquiet unwind · a fear-index-only safety never fires→ safety must also watch the strategy’s own vital signs: drawdown, signal decay, leg divergence

这就是“市场中性 ≠ 危机中性”的含义,它对 safety 设计的推论很具体:

  • 盯宏观恐慌指标的 safety,防的是流动性与融资的尾部——危机里相关性趋近于 1、对冲开始漏、杠杆的资金成本飙升。这一层有存在价值,但它是为“世界着火”准备的,不是为你的策略准备的。
  • 防策略自身失败模式的 safety,必须盯策略自己的生命体征——组合层面的持续回撤、信号预测力的衰减、多空两条腿的异常背离。这些指标在宏观平静的日子里同样会报警,而那正是它们的价值所在。

一个只装了前者的市场中性系统,等于给一栋楼装了地震仪却没装烟雾报警器——它防得住新闻头条里的灾难,防不住自己最可能的死法。

顺带说一个更微妙的推论:结构性的防御优于指标性的防御。 针对拥挤平仓这种失败模式,最好的防御其实不是任何一个报警器,而是组合本身的构造——持有大量失败时间彼此错开的独立信号,让“所有信号同时流血”在结构上难以发生。这又回到了上一篇讲的弱信号工厂:多元化做到位,safety 的触发概率本身就会下降。报警器是最后一道防线,不是第一道。

否决权必须是架构属性,不是代码约定

现在到了最工程的部分。假设你完美地设计了两层控制——谁来保证 safety 真的切得断?

这里有一条我们视为不可协商的原则:安全控制的否决权必须是架构属性,而不是代码约定。 区别在于:代码约定是“策略应该尊重风控的返回值”;架构属性是“策略在物理上没有绕过风控直达券商的通路”。

前者在 99% 的日子里和后者表现一致。区别只在最坏的 1% 显现:策略代码有 bug、模型输出了极端值、某个组件在压力下行为异常——恰恰是 safety 最需要工作的时刻,也恰恰是“约定”最容易被意外绕过的时刻。安全系统的价值只在它被需要的那一刻兑现,所以它的可靠性必须不依赖被它监管的对象行为正常。

Dnalyaw 的架构里,这体现为独立于策略层的风险引擎:每一笔订单必经、拥有无条件否决权、运行在自己的进程和语言运行时里,连熔断后的紧急平仓都有一条不依赖上游编排层的直连通路。策略层——包括跑在那一层的任何 ML 模型——被设计成物理上无法产生一笔未经风险检查的订单。

veto power is an architectural property, not a code conventionstrategy layerincl. any learned modelmay misbehave off-distributionRISK ENGINEown process · own language runtimeevery order, no exceptionsunconditional vetobrokerorder or nothingno such path exists — physically, not by conventionspacereven emergency flatten routes through a direct wire that does not depend on the orchestration layer abovethe gate's reliability cannot depend on the monitored system behaving normally

这一点在 AI 深入交易系统的时代变得空前重要。当仓位目标来自一个学习出来的模型,你必须假设它会在某个训练分布之外的日子输出你从未见过的东西。这不是对模型悲观——恰恰因为我们持续用更强的学习器(包括在执行层探索强化学习这类会自主寻找策略空间边界的方法),才更需要一个不学习、不聪明、不灵活的 safety 层。学习系统探索,非学习系统兜底——两层的智能梯度是刻意设计的,兜底层的“笨”是一种能力。读过我《神经网络的四重境界》的读者会认出这个分工:兜底层甘于停留在最低的境界,正是因为最高境界(观测即扰动、系统自己也在被自己的动作改变分布)留给了学习系统去趟——两层各自守住自己该在的那一境,谁也别越界。

顺便回答一个常见问题:“为什么不让 safety 也智能一点,用模型预测风险来提前干预?”因为那会让它变成另一个 sizing——一个基于预测的连续控制器,带着预测固有的全部误差。safety 的定义性特征就是它不预测,只响应已经发生的事实。它宁可迟一点、笨一点,也要确定。这两种系统没有优劣,只有分工。

Sizing 的谦逊:知道自己的输入有多噪

最后回到 sizing 这一侧,讲一个反方向的纪律。

Kelly 准则告诉你,给定胜率和赔率,存在一个增长最优的下注比例。数学是对的。但它假设你知道自己的胜率和赔率——而在真实市场里,edge 的估计误差常常和 edge 本身一个量级。对着噪声做最优化,输出的是被放大的噪声:Kelly 对参数误差的惩罚是超线性的,高估一倍 edge,下场远比低估一倍惨。

Kelly punishes overestimated edge harder than it rewards correct edgetrue edgeedge estimation error (true → assumed)expected growth ratespacercorrectly estimatedunderestimate → growth gives back gentlyoverestimate → growth collapses, can go deeply negativespacerthe curve is not symmetric — a conservative fixed fraction sits safely left of the peak, never past it

所以成熟的 sizing 层有一种刻意的谦逊:当 edge 估计的置信度不足时,主动退回到一个远低于理论最优的固定保守比例,让 Kelly 类的公式引而不发。让精密机制待命而不启用,不是工程上的未完成——那个“不启用”本身就是一个经过论证的决策:错误的精确比诚实的粗糙危险得多。

什么时候升级?当 edge 估计的质量真正提高时——更长的实盘记录、更稳定的信号族、以及(这是我们研究管线里持续推进的方向)当组合层面的资本分配本身可以被当作一个学习问题来对待时。但升级的举证责任永远在“更复杂”这一侧:新机制必须在样本外证明它优于那个朴素的固定比例,而不是反过来。

进攻的数学允许你谦虚地错;生存的数学不允许你侥幸地错——sizing 可以谨慎地少赚,safety 不可以谨慎地少防。

结语

把这篇文章压缩成三句话:

  1. Sizing 说“下多大注”,safety 说“切断我”——一个连续、一个离散,让它们说自己的语言,永远不要让安全信号去乘你的仓位。
  2. Safety 必须针对策略真实的失败模式设计,而直觉给出的失败模式通常是错的——市场中性不等于危机中性。
  3. 否决权是架构属性:安全层的可靠性,不能依赖被它监管的系统行为正常——尤其当那个系统在学习。

风控设计的成熟度,不体现在规则的数量上,而体现在每一条规则是否清楚自己属于哪种语言。进攻的数学和生存的数学都很深,但它们不通约。尊重这条分界线的系统,才配得上在两边同时做深。

本文是 Dnalyaw 量化系列的第四篇。前篇:弱信号的数学Dnalyaw:从零工程化一个 AI 量化交易系统