第四章:风控体系架构设计
做量化交易这些年,我见过太多团队把风控当成「事后补丁」来打。说实话,这是最要命的思路。风控体系应该是整个交易系统的骨架,而不是最后贴上去的创可贴。今天我就把我在实战中打磨出来的风控架构设计思路,掰开了讲给你听。
4.1 风控系统分层设计
我个人习惯把风控系统分成四层。为什么是四层?因为我在项目中踩过坑——两层太粗糙,六层又太冗余。四层刚刚好。
| 层级 | 名称 | 延迟要求 | 核心职责 |
|---|---|---|---|
| L1 | 网关层风控 | < 10μs | 订单格式校验、重复单过滤、黑白名单 |
| L2 | 交易引擎层风控 | < 100μs | 资金校验、持仓校验、价格偏离检查 |
| L3 | 策略层风控 | < 1ms | 策略参数校验、回扣率检查、流动性阈值 |
| L4 | 全局风控层 | < 10ms | 熔断决策、全局敞口管理、报表审计 |
你可能会问:「为什么要把风控拆这么细?」嗯,原因很简单——每一层的故障模式不一样。网关层挂了,最多丢几个订单;全局风控层挂了,那整个系统都得停摆。分开设计,才能分开保护。
核心原则:每一层只做自己该做的事,不要越级。L1 别去算策略参数,L3 也别管网络校验。各司其职,出了问题才好定位。
4.2 实时监控与预警
监控这件事,我吃过不少亏。早期我做的监控系统,报警阈值设得太敏感,结果每天收到上千条告警,最后大家直接把告警群屏蔽了——这跟没监控有啥区别?
后来我总结了一套「三级预警」机制:
- 黄色预警(注意):指标偏离正常范围 1-2 个标准差。比如回扣率突然从 0.5bps 跳到 0.8bps。这时候系统自动记录日志,不需要人工介入。
- 橙色预警(关注):偏离 2-3 个标准差,或者连续 3 次触发黄色预警。这时候会推送消息到值班人员的手机。我记得有一次,就是橙色预警帮我抓住了某个做市商在偷偷改报价频率。
- 红色预警(立即处理):偏离超过 3 个标准差,或者触发了硬性风控阈值。这时候系统会直接电话呼叫值班人员,同时自动启动熔断流程。
监控指标方面,我重点关注这几个:
// 流动性回扣交易的核心监控指标
监控指标 = {
"回扣率": "实时计算,每笔订单都要算",
"成交率": "滑动窗口 5 分钟统计",
"报价偏离度": "与市场中间价的偏差",
"订单取消率": "高频取消可能是恶意行为",
"资金周转率": "防止资金链断裂"
}
我的小技巧:监控指标不要超过 7 个。超过 7 个,人的注意力就分散了。我见过有人设了 20 多个监控指标,结果哪个都没看住。少即是多。
4.3 阈值管理
阈值怎么设?这是个技术活,也是个艺术活。太松了,风险敞口大;太紧了,正常交易都被卡住。
我一般分三步走:
- 历史数据回测:拿过去 3-6 个月的数据,跑一遍所有交易,看看正常情况下的指标分布。比如回扣率,95% 的订单都在 0.3-0.7bps 之间,那阈值就设在 1.0bps。
- 压力测试:人为制造极端行情,看看阈值会不会被误触。我曾经在测试中发现,某个阈值在正常行情下没问题,但一遇到闪电波动就频繁触发——后来我加了时间窗口过滤。
- 动态调整:阈值不是一成不变的。市场波动率变了,阈值也得跟着变。我习惯用「移动平均 + 标准差」的方式,每周自动更新一次阈值。
| 指标 | 静态阈值 | 动态阈值(当前市场) | 调整频率 |
|---|---|---|---|
| 最大回扣率 | 1.5 bps | 1.2 bps | 每日 |
| 最小成交率 | 60% | 72% | 每周 |
| 最大订单取消率 | 30% | 25% | 实时 |
注意:动态阈值一定要有上下限保护。我曾经见过一个系统,动态阈值在市场极度波动时自动放宽到几乎没限制——那跟没有风控有啥区别?设个硬性天花板,比如最大回扣率绝对不能超过 2.0 bps。
4.4 熔断机制
熔断,说白了就是「打不过就跑」。但怎么跑、什么时候跑、跑多久,这里面门道很多。
我设计的熔断机制分三级:
- 一级熔断(软熔断):暂停某个策略或某个交易对手的交易。比如发现某个做市商的回扣率异常,就只停掉跟它的交易,其他照常。持续时间 30 秒,自动恢复。
- 二级熔断(硬熔断):暂停整个流动性回扣交易模块。比如市场出现剧烈波动,或者系统检测到数据源异常。持续时间 5 分钟,需要人工确认后才能恢复。
- 三级熔断(全局熔断):暂停所有交易活动。这是最后的手段,只有在系统被攻击、或者出现重大故障时才启用。恢复需要风控委员会投票决定。
这里我画了一张熔断决策的流程图,你看一眼就明白了:
熔断恢复这块,我特别想强调一点:不要自动恢复二级和三级熔断。为什么?因为自动恢复可能会让系统反复「抽风」——熔断了又恢复,恢复了又熔断,最后把市场都搞乱了。我见过一个交易所,就是因为自动恢复机制没做好,一天之内熔断了 12 次,被监管点名批评。
避坑指南:我曾经在某个项目中,把熔断恢复时间设成了固定值。结果有一次熔断后,问题还没解决就自动恢复了,导致二次熔断。后来我改成「熔断时长 = 基础时长 × 熔断次数」,第一次 30 秒,第二次 1 分钟,第三次 2 分钟...这样指数增长,给问题排查留出足够时间。
4.5 架构落地要点
说了这么多理论,最后聊聊落地。我建议你从这三个方面入手:
- 解耦:风控系统一定要跟交易系统解耦。我见过有人把风控逻辑直接写在交易代码里,结果每次改风控都要重新部署交易系统——这不是给自己找麻烦吗?用独立的风控服务,通过 RPC 或消息队列通信。
- 降级:风控系统自己也会出问题。设计时要考虑「风控降级」——如果风控系统挂了,交易系统是继续运行还是停止?我个人建议:默认停止。宁可少赚钱,不能多亏钱。
- 审计:所有风控决策都要记录日志。谁触发了熔断?阈值是多少?恢复时间是什么时候?这些数据不光是为了复盘,更是为了应付监管检查。我每次做审计,都能从日志里发现一些之前没注意到的问题。
好了,风控体系架构设计就聊到这儿。记住一句话:风控不是成本,是保险。你花在风控上的每一分钱,都是在给未来的自己买保险。
公众号:蓝海资料掘金营,微信deep3321