3、撤单频繁异常:定义与阈值、触发场景分析、实盘案例复盘、如何避免误触发
3.1 到底什么是「撤单频繁」?
撤单频繁,说白了就是你的交易系统在短时间内,对同一只股票或者同一个合约,反复地「挂单 → 撤单 → 再挂单 → 再撤单」。
交易所为什么盯着这个?因为这种行为会严重干扰市场秩序。你想想看,你挂了一笔大单,别人看到了以为有真实需求,结果你秒撤,这跟「虚假申报」有什么区别?
我个人习惯把撤单频繁分为两类:
- 主动型撤单:策略逻辑导致的,比如抢单没抢到、价格滑点太大、流动性瞬间消失。
- 被动型撤单:系统问题导致的,比如网络抖动、交易所拒单、风控拦截。
嗯,这里要注意,交易所处罚的通常是「主动型」中的恶意行为,但实盘中很多「被动型」也会被误判。
3.2 阈值到底怎么定?
交易所的规则其实很明确,但各家券商的风控系统会加码。我直接给你一个实战中常用的阈值参考表:
| 监控维度 | 交易所底线 | 券商常见阈值 | 我建议的内部阈值 |
|---|---|---|---|
| 单只股票日内撤单次数 | 无明确上限 | ≥ 50 次 | ≥ 30 次预警,≥ 50 次熔断 |
| 撤单率(撤单笔数/委托笔数) | ≥ 70% 可能触发关注 | ≥ 60% | ≥ 50% 预警,≥ 65% 熔断 |
| 连续撤单时间窗口 | 通常 5 分钟内 | 3 分钟 | 1 分钟 |
| 单笔撤单间隔 | 无明确要求 | ≥ 500ms | ≥ 1s |
为什么我建议的内部阈值比交易所还严?因为我在项目中遇到过,券商的风控系统会在交易所处罚之前,先把你给停了。你被券商停了,交易所那边照样会记录一笔异常。所以,宁可自己先掐断,也别等别人动手。
3.3 触发场景分析:哪些坑最容易踩?
我总结了三个最常见的触发场景,几乎每个量化团队都踩过:
场景一:高频抢单策略
这是重灾区。你的策略在盘口上看到有对手单,立刻挂单抢,结果对手单撤了,你的单子挂在上面成了「靶子」。你只能撤,然后继续抢。循环几次,撤单次数就爆了。
我曾经见过一个团队,他们的高频策略在 1 分钟内撤了 80 多次,直接被交易所发了警示函。后来他们加了一个「撤单冷却时间」,每次撤单后强制等待 2 秒,才把问题压下去。
场景二:流动性不足的品种
有些冷门股票或者期权合约,买卖盘口很薄。你挂一个单子,半天没人理你。你等不及撤了,换个价格再挂,还是没人理。这种「挂单-撤单-挂单」的循环,很容易被系统判定为异常。
我的建议是:对于流动性不足的品种,要么不做,要么把撤单阈值设得更低。比如我自己的系统,对于日均成交额低于 5000 万的股票,撤单率超过 30% 就直接报警。
场景三:网络抖动或交易所拒单
这个最冤。你的系统正常发单,但网络延迟导致你误以为没成交,于是又发了一笔撤单。结果撤单成功了,但原来的单子其实已经成交了。或者交易所因为某种原因拒了你的单,你以为是没成交,又撤了一次。
嗯,这里要注意,这种「被动撤单」虽然不是你主观恶意,但交易所只看结果。所以一定要在系统层面做好「订单状态同步」,确保你撤单之前,100% 确认这笔单子还在。
3.4 实盘案例复盘:一次真实的「撤单风暴」
去年我帮一个私募朋友处理过一次事故,很有代表性,我直接复盘给你看:
背景:某中频套利策略,交易沪深 300 成分股,日均委托量约 2000 笔。
事故经过:某天下午 2:30 左右,策略突然开始频繁撤单。监控显示,在 3 分钟内撤单了 120 次,撤单率高达 85%。
原因分析:
- 当天市场出现了一波快速拉升,策略的套利信号频繁触发。
- 但策略的「订单有效期」设置太短(只有 500ms),导致大量订单还没成交就被自动撤回了。
- 再加上网络延迟,撤单指令和成交回报的顺序乱了,系统以为没成交,又发了一轮撤单。
后果:被券商风控系统暂停交易 15 分钟,错过了后面一波行情,当天亏损约 2%。
这个案例告诉我们什么?很多时候撤单频繁不是策略逻辑错了,而是参数设置和系统架构的问题。
3.5 如何避免误触发?我的 5 条实战建议
避坑指南来了,这些都是我用真金白银换来的经验:
- 设置「撤单冷却期」:每次撤单后,强制等待至少 1 秒才能发下一笔委托。这个简单粗暴,但非常有效。
- 区分「主动撤单」和「被动撤单」:在日志里打上不同的标签。如果是网络抖动导致的被动撤单,不要计入撤单率统计。
- 动态调整阈值:根据市场波动率来调整。比如市场波动大的时候,撤单率阈值可以适当放宽 10%-20%。
- 订单状态机必须严谨:确保你的系统能准确区分「已报」、「已撤」、「已成交」、「部分成交」等状态。我曾经见过一个系统,因为状态机写错了,把「已成交」的订单又发了一次撤单,结果撤单失败,但撤单次数已经记上了。
- 做「撤单压力测试」:上线前,模拟极端行情,看看你的系统在 1 分钟内能承受多少次撤单。如果超过阈值,就提前优化。
一个小技巧:我习惯在风控系统里加一个「撤单次数计数器」,每撤一次就 +1,当达到预警阈值时,自动降低策略的委托频率。这样既不会完全停掉策略,又能控制风险。
警告:千万不要为了降低撤单率而故意不撤单。比如你的单子挂在错误的价格上,明明应该撤,但为了指标好看就不撤了。这种因噎废食的做法,最后亏的钱比被处罚还多。
3.6 核心逻辑流程图
下面这张图是我自己设计的撤单风控流程,你可以参考:
这个流程的核心思想是:先判断能不能撤,再判断该不该撤。冷却期是第一道防线,次数和率是第二道防线。两道防线都过了,才真正执行撤单。
好了,关于撤单频繁异常,我该讲的都讲了。记住一句话:撤单本身不是问题,频繁撤单才是问题。控制好频率,你的策略就能安全运行。