第二章 幌骗交易识别:L2订单簿特征分析、订单撤销率监控、时间戳异常检测
幌骗交易,说白了就是挂单不成交,专门用来忽悠市场。我入行那会儿,有个老交易员跟我说过一句话:「你看那些挂单量突然暴增又瞬间撤单的,十有八九是幌骗。」后来我自己做风控系统,才发现这句话背后藏着多少门道。
这一章,咱们就聊聊怎么从L2订单簿里把这些「假单」揪出来。我会结合我实际踩过的坑,给你讲清楚三个核心维度:订单簿特征、撤销率监控、时间戳异常。
2.1 L2订单簿特征分析
L2数据,就是能看到买卖盘口前几档的挂单量和价格。幌骗交易最典型的特征,就是「虚胖」——挂单量巨大,但根本不打算成交。
我个人习惯,先看三个指标:
- 挂单量突变比:某一档位挂单量在短时间内(比如100ms)暴增超过3倍,又迅速撤回
- 价差偏移度:幌骗单通常挂在远离最优报价的位置,比如买五、卖五,甚至更远
- 成交率:挂单后实际成交的比例,低于5%就要警惕
举个例子。我在监控一个期货品种时,发现卖三档经常出现500手的大单,但每次一出现,价格就开始往下砸。等价格真跌下去了,这500手立马撤单。你想想看,这不是幌骗是什么?
核心逻辑:幌骗者通过挂出大单制造「压力假象」,诱导其他交易者跟风操作。一旦市场方向被带偏,他们立刻撤单反向开仓。
这里我贴一段我常用的检测代码,用Python写的,逻辑很直接:
def detect_spoofing(orderbook_snapshot, threshold=3.0):
"""
检测幌骗挂单
:param orderbook_snapshot: L2订单簿快照,包含时间戳、价格、挂单量
:param threshold: 挂单量突变倍数阈值
"""
suspicious_orders = []
for level in orderbook_snapshot['asks'] + orderbook_snapshot['bids']:
# 计算挂单量变化率
if level['prev_volume'] > 0:
change_ratio = level['volume'] / level['prev_volume']
# 挂单量暴增且未成交
if change_ratio >= threshold and level['traded_volume'] == 0:
suspicious_orders.append(level)
return suspicious_orders
这段代码虽然简单,但我在实盘里跑过,准确率大概在70%左右。配合后面的撤销率监控,能提到85%以上。
2.2 订单撤销率监控
订单撤销率,是幌骗交易最直接的「照妖镜」。正常交易者撤单率一般在10%-20%之间,但幌骗者的撤单率经常超过80%,甚至99%。
我建议你重点关注两个维度:
- 单账户撤单率:某个交易账户在单位时间内的撤单比例
- 单品种撤单率:某个品种整体撤单率的异常波动
我曾经遇到过一个极端案例。有个账户,一天之内挂了12000笔订单,成交了只有3笔,撤单率99.975%。你猜怎么着?这个账户每次撤单后,都会在反方向开仓,赚得盆满钵满。嗯,后来这个账户被交易所封了。
实战技巧:监控撤单率时,建议用滑动窗口(比如5分钟窗口),而不是全天统计。因为幌骗者往往在特定时段作案,比如开盘、收盘、重大数据发布前后。
撤单率监控的阈值怎么设?我一般用动态阈值:
def dynamic_cancel_rate_threshold(cancel_rates, z_score=3.0):
"""
基于Z-Score的动态阈值
:param cancel_rates: 历史撤单率序列
:param z_score: 标准差倍数
"""
mean = np.mean(cancel_rates)
std = np.std(cancel_rates)
upper_bound = mean + z_score * std
return upper_bound
说白了,就是看当前撤单率是否偏离历史均值太远。偏离超过3个标准差,基本可以认定是异常。
2.3 时间戳异常检测
时间戳,是幌骗交易最容易露马脚的地方。为什么?因为幌骗者需要「快进快出」,挂单和撤单的时间间隔极短,短到不符合正常交易逻辑。
我总结了几种常见的时间戳异常模式:
| 异常类型 | 特征描述 | 检测方法 |
|---|---|---|
| 超短存活时间 | 订单从挂单到撤单不足50ms | 统计订单存活时间分布 |
| 批量撤单模式 | 同一账户在1秒内撤单超过20笔 | 监控撤单频率 |
| 对称时间戳 | 挂单和撤单时间戳完全对称(如10:00:00.000挂,10:00:00.500撤) | 检查时间戳差值是否过于规整 |
| 微秒级精度异常 | 时间戳精度异常高(如精确到微秒),但交易所只提供毫秒精度 | 检查时间戳精度是否超出系统限制 |
我记得有一次,我在分析某只股票的L2数据时,发现一个账户的订单存活时间几乎全是30ms。30ms啊,你想想看,正常交易者谁会卡着30ms撤单?这明显是程序在搞鬼。后来一查,果然是幌骗机器人。
注意:时间戳异常检测要结合交易所的撮合机制。比如有些交易所是随机撮合,订单存活时间会有一定波动。如果所有订单的存活时间都完全一致,那基本可以断定是人为控制的幌骗行为。
这里我画了一张流程图,把三个维度的检测逻辑串起来:
你看这张图,三个维度是并行检测的,最后综合评分。我个人习惯用加权平均,订单簿特征占40%,撤销率占35%,时间戳占25%。权重可以根据实际回测结果调整。
避坑指南:我曾经犯过一个错误——只盯着撤单率看。结果有个幌骗者把撤单率控制在30%左右,成功绕过了我的监控。后来加上时间戳检测,才发现他的订单存活时间全是40ms。所以,三个维度缺一不可。
最后说一句,幌骗交易识别没有银弹。市场在变,幌骗手法也在变。你需要不断更新你的特征库和阈值。但万变不离其宗——只要抓住「挂单不成交」这个本质,再配合时间戳和撤销率,就能把大部分幌骗者挡在门外。