风险管理
系统化交易的风控:先活下来,再谈收益
量化系统的风控不只是止损,而是仓位、相关性、流动性、执行异常和策略失效监控的组合。
系统化交易容易让人把注意力放在信号上:什么时候买,什么时候卖,哪个因子更强,哪个模型更准。但长期结果往往由风控决定。信号负责创造机会,风控负责限制错误的代价。没有风控的策略,只是在等待一次足够大的事故。
真正的风控不是“亏了就止损”这么简单。它覆盖研究、下单、持仓、组合、执行、监控和人工介入。一个策略可以有亏损交易,但不能让单次错误、单个模型、单个交易所或单个市场环境把账户带出可恢复范围。
风控的目标不是消灭波动,而是让错误的规模、速度和传染范围都被提前限制。
仓位是第一层风控
止损很重要,但仓位更早决定风险。如果单笔仓位过大,再好的止损也可能在跳空、滑点或接口延迟中失效。仓位设计应该从可承受亏损反推,而不是从想赚多少钱出发。
常见做法是给每笔交易设定固定风险预算,例如账户权益的 0.5% 或 1%。然后根据入场价、止损距离和合约价值计算数量。这样不同波动环境下的名义仓位会变化,但每次错误对账户的伤害保持可控。
假设账户权益为 100,000 USDT,单笔风险预算为 0.5%,也就是 500 USDT。如果入场价距离止损价为 2%,那么理论名义仓位不应超过 25,000 USDT;如果止损距离扩大到 5%,名义仓位就要降到 10,000 USDT。这样做会牺牲部分顺风行情的仓位,但能避免在高波动阶段无意中放大风险。
仓位还要考虑策略胜率和盈亏比。高胜率低盈亏比策略通常害怕尾部亏损,不能因为历史胜率高就放大单笔风险;低胜率高盈亏比策略会经历更长连续亏损,需要更低的单笔风险和更充足的心理预算。
止损不是一个价格,而是一套退出机制
很多人把止损理解成一个固定价格,但实盘里更重要的是退出机制。价格触发后用市价单还是限价单?部分成交怎么办?交易所拒单怎么办?网络延迟时是否重复下单?止损失败时谁接管?这些问题决定了止损能不能真正执行。
系统化风控应该把止损拆成三层。第一层是策略止损,例如价格触及无效点或信号反转。第二层是账户止损,例如日内回撤达到阈值后停止开新仓。第三层是灾难止损,例如数据源异常、订单连续失败或交易所不可用时进入只减仓模式。
- 策略级:每笔交易必须有入场理由、无效条件和退出规则。
- 账户级:日内、周内和月度回撤达到阈值后降低交易频率或暂停。
- 系统级:行情延迟、订单失败、余额异常、持仓不一致时触发保护模式。
止损设计还要避免过度贴近噪声。如果止损距离小于正常波动,策略会不断被市场噪声扫出;如果止损距离过宽,单笔亏损会吞掉过多风险预算。合理做法是把止损距离和波动率、结构位、流动性共同考虑。
相关性会放大真实风险
很多组合表面上持有多个标的,实际却暴露在同一个风险因子上。多个加密货币多头、多个科技股多头、多个美元流动性敏感资产,在压力环境下可能一起下跌。分散持仓不等于分散风险。
风控系统应该监控组合层面的净敞口、方向集中度、行业或资产类别集中度,以及持仓之间的相关性。当相关性快速上升时,单个策略看起来没有超限,组合却可能已经过度拥挤。
相关性最危险的时候,往往不是平静期,而是压力期。平时看起来不相关的资产,在去杠杆、流动性收缩或重大消息冲击下会一起下跌。回测如果只使用长期平均相关性,会低估组合在极端环境下的同步亏损。
一个实用规则是设置组合风险上限。例如:同方向风险暴露不得超过账户权益的某个倍数;高度相关标的合并计算风险预算;当 30 日滚动相关性超过历史 90 分位数时,新仓按更严格的集中度规则处理。
流动性风险不能靠回测想象
回测里的成交通常很干净,真实市场不会这样配合。盘口深度不足、价差扩大、部分成交、交易所限频、极端行情中的接口异常,都会让理论止损变成更大的实际亏损。
因此,风控需要把流动性纳入规则。低流动性时降低仓位,价差异常时暂停开仓,成交率下降时限制策略频率,订单超时后触发撤单或降级逻辑。执行质量不是交易系统的外围问题,而是收益曲线的一部分。
流动性规则要尽量具体。比如,入场前检查目标下单量是否超过盘口可见深度的一定比例;买卖价差超过近 30 日 95 分位数时不开新仓;订单超过预期成交时间仍未成交时撤单;实际滑点超过回测假设两倍时降低仓位。
还要警惕容量问题。一个策略用 1,000 USDT 交易时表现很好,不代表用 100,000 USDT 也能保持同样收益。容量上升会改变成交价格、成交时间和市场冲击,最终让原本存在的边际优势消失。
策略失效比单笔亏损更重要
单笔亏损不一定说明策略有问题,连续盈利也不一定说明策略健康。更关键的是策略行为是否偏离预期:信号频率是否异常,持仓时间是否变长,滑点是否上升,收益是否只来自少数交易,回撤是否超过历史压力测试范围。
这些指标应该被自动监控。只在账户亏损很大之后才检查策略,相当于把风控推迟到事故发生以后。成熟系统会在异常变小的时候就提醒人介入,而不是等异常变成灾难。
策略失效监控可以分为三类。第一类是市场环境变化,例如趋势强度下降、波动率结构改变、相关性上升。第二类是策略行为变化,例如信号数量异常、胜率和盈亏比持续偏离。第三类是执行环境变化,例如滑点、拒单率、延迟和成交率恶化。
这些监控指标必须有历史基准。没有基准,“滑点变大”“频率变低”只是主观感受;有了滚动分位数和阈值,系统才能判断当前异常是否超出正常波动。
风控规则必须可执行
很多风控方案写得很好,但实盘中没人执行。原因通常是规则不够具体:什么叫波动过大,什么叫相关性过高,什么叫暂停交易,暂停多久,谁有权限恢复。模糊规则在压力环境下会变成临场争论。
更好的做法是把规则写成阈值和动作。例如:日内回撤达到 3% 停止开新仓;滑点超过近 30 日 95 分位数降低一半仓位;数据源延迟超过两个周期时暂停信号;连续三次订单失败后切换只减仓模式。
- 回撤规则:账户日内亏损达到阈值后停止新开仓,只允许减仓。
- 执行规则:连续订单失败或滑点异常时暂停自动交易并通知人工复核。
- 数据规则:行情延迟、缺失或多数据源不一致时不生成新信号。
- 恢复规则:暂停后必须满足明确条件,不能因为“感觉没事了”就恢复。
规则还需要演练。没有经过演练的风控,很可能在真正需要时才发现权限不足、通知失败、脚本没部署、手动流程没人熟悉。风控不是写在文档里的安慰剂,而是应该能在系统里被触发、记录、审计和复盘的动作。
风控复盘要覆盖未发生的风险
复盘不应该只看已经亏损的交易,也要看那些差点出问题的地方。例如订单是否出现过超时但最终成交,数据源是否有短暂延迟,某个标的是否一度接近流动性阈值,组合相关性是否接近上限。这些 near miss 能帮助系统在真正事故前变得更稳。
每周或每月复盘可以固定三个问题:本期最大风险来自哪里,哪些风控规则被触发或接近触发,哪些风险在当前系统里还没有被监控。第三个问题尤其重要,因为账户最容易被尚未命名的风险击穿。
系统化交易的目标不是消灭亏损,而是让亏损保持在账户和心理都能承受的范围内。先活下来,才有资格等待优势兑现。