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. 设置「撤单冷却期」:每次撤单后,强制等待至少 1 秒才能发下一笔委托。这个简单粗暴,但非常有效。
  2. 区分「主动撤单」和「被动撤单」:在日志里打上不同的标签。如果是网络抖动导致的被动撤单,不要计入撤单率统计。
  3. 动态调整阈值:根据市场波动率来调整。比如市场波动大的时候,撤单率阈值可以适当放宽 10%-20%。
  4. 订单状态机必须严谨:确保你的系统能准确区分「已报」、「已撤」、「已成交」、「部分成交」等状态。我曾经见过一个系统,因为状态机写错了,把「已成交」的订单又发了一次撤单,结果撤单失败,但撤单次数已经记上了。
  5. 做「撤单压力测试」:上线前,模拟极端行情,看看你的系统在 1 分钟内能承受多少次撤单。如果超过阈值,就提前优化。

一个小技巧:我习惯在风控系统里加一个「撤单次数计数器」,每撤一次就 +1,当达到预警阈值时,自动降低策略的委托频率。这样既不会完全停掉策略,又能控制风险。

警告:千万不要为了降低撤单率而故意不撤单。比如你的单子挂在错误的价格上,明明应该撤,但为了指标好看就不撤了。这种因噎废食的做法,最后亏的钱比被处罚还多。

3.6 核心逻辑流程图

下面这张图是我自己设计的撤单风控流程,你可以参考:

撤单频繁风控核心流程 收到撤单指令 是否在冷却期? 拒绝撤单 撤单次数超阈值? 触发熔断,暂停策略 撤单率超阈值? 预警:降低委托频率 执行撤单 结束

这个流程的核心思想是:先判断能不能撤,再判断该不该撤。冷却期是第一道防线,次数和率是第二道防线。两道防线都过了,才真正执行撤单。

好了,关于撤单频繁异常,我该讲的都讲了。记住一句话:撤单本身不是问题,频繁撤单才是问题。控制好频率,你的策略就能安全运行。


专注资料整理