第四章 交易前风控体系:订单检查、价格偏离检测、最大订单量限制、自成交预防
交易前风控,说白了就是订单还没飞到交易所之前,先把那些“坏单”拦下来。
我见过太多团队,策略赚钱的时候觉得风控是累赘,等爆仓了才后悔没早做。嗯,今天咱们就把这四个核心模块拆开揉碎了讲。
4.1 订单检查:第一道防线
订单检查是最基础的,但也是最容易被忽视的。我个人习惯把它分成三层:
- 格式检查:字段不能为空,价格不能是负数,数量不能是零
- 逻辑检查:买入价不能高于卖出价(除非你是做市商策略)
- 权限检查:这个账户能不能交易这个品种?
核心原则:检查失败就拒绝,不要尝试“修正”订单。你永远不知道修正后的订单会捅出什么篓子。
我在项目中遇到过一件事:有个同事觉得“价格填错了就自动改成最新价吧”。结果那天行情剧烈波动,系统把一堆废单全改成了市价单,直接打穿了风控阈值。从那以后,我们团队定了个死规矩——只拒绝,不修改。
4.2 价格偏离检测:别让订单飞太远
价格偏离检测,就是防止你的订单价格离谱到天上或地下。
为什么会发生价格偏离?常见原因有:
- 行情数据源异常,拿到错误的最新价
- 策略逻辑bug,算错了理论价格
- 人为误操作,多敲了一个零
我建议的做法是设置双重阈值:
| 阈值类型 | 定义 | 典型值 |
|---|---|---|
| 绝对偏离 | 订单价与参考价的绝对差值 | 比如不超过最新价的5% |
| 相对偏离 | 订单价与参考价的百分比 | 比如不超过N个标准差 |
避坑指南:我曾经把参考价设成了“上一笔成交价”。结果那天流动性枯竭,半小时没成交,参考价还是半小时前的。新订单全被误杀了。后来改成了“最新买一卖一中间价 + 时间衰减权重”,问题才解决。
4.3 最大订单量限制:别一把梭哈
最大订单量限制,就是防止你的策略一次性把家底全押上。
这里要区分两个概念:
- 单笔最大量:一笔订单最多能下多少手
- 累计最大量:一段时间内(比如1秒、1分钟)累计下单总量
你想想看,如果只限制单笔,策略完全可以拆成100笔小单,照样能把市场砸穿。所以两个限制必须同时上。
注意:最大订单量不是拍脑袋定的。我一般建议用历史回测数据来算:取过去30天策略最大下单量的3倍作为硬上限。太松了没意义,太紧了策略跑不动。
我记得有一次,一个做市商策略在回测时表现完美,上线第一天就把单笔最大量设成了1000手。结果那天行情突变,策略在0.5秒内下了800手买单,直接把价格推高了2%。嗯,还好风控拦住了后面的200手,不然就成市场操纵了。
4.4 自成交预防:别自己跟自己玩
自成交,就是你的买单和你的卖单互相成交了。这在高频交易里特别容易发生,尤其是多个策略同时跑的时候。
自成交的危害:
- 浪费交易成本(手续费、滑点)
- 可能被交易所认定为“虚假交易”
- 严重的会被吊销交易资格
我常用的自成交预防策略有三种:
- 订单ID标记法:每个订单带上策略ID,风控系统检查买卖双方ID是否相同
- 价格交叉检查:如果当前有未成交的买单,新来的卖单价格不能低于买单价格
- 延迟撮合法:同一策略的订单,强制间隔N毫秒才能发出
实战经验:我曾经见过一个团队,用了“订单ID标记法”但没检查子账户。结果两个子账户的策略互相成交,交易所直接发了警告函。所以记住:自成交检查要覆盖到所有关联账户。
4.5 整体架构图
下面这张图,是我自己画的风控检查流程。你可以把它当成一个参考模板:
这张图的核心逻辑是:四步检查,一步都不能少。任何一步失败,订单直接拒绝并触发告警。只有全部通过,才能发往交易所。
个人建议:告警系统一定要做分级。格式错误这种低级问题,发个日志就行。自成交这种高风险事件,必须电话+短信+邮件三管齐下。我曾经因为告警太频繁被运维同事骂过,后来改成分级告警,大家都舒服了。
4.6 性能考量
做高频交易的,最怕的就是风控拖慢速度。我见过有些团队把风控做得比策略还慢,那还不如不做。
几个性能优化技巧:
- 用位运算代替比较:比如检查价格范围,用位掩码比if-else快一个数量级
- 预计算阈值:不要在每次检查时都算一遍阈值,启动时算好存着
- 无锁队列:风控模块和策略模块之间用无锁队列通信,避免锁竞争
警告:性能优化不能牺牲正确性。我见过有人为了快,把价格偏离检查改成了“只检查最后一位数字”,结果漏掉了一个大单。记住:风控可以慢,但不能错。
好了,交易前风控的四个核心模块就讲到这里。下一章咱们聊聊交易中监控,那又是另一番天地了。
公众号:蓝海资料掘金营,微信deep3321