4、市场操纵检测:虚假申报、幌骗交易、对倒交易、收盘价操纵的识别技术与算法
市场操纵,说白了就是有人用不正当手段扭曲价格。我在量化交易这行干了十几年,见过太多花招了。有些手法很隐蔽,有些则粗暴得让人哭笑不得。今天咱们就聊聊四种最常见的操纵手法,以及怎么用算法把它们揪出来。
4.1 虚假申报:挂单不成交的猫腻
虚假申报,也叫“钓鱼单”。操纵者挂出大单,制造虚假的供需假象。等价格被拉起来或砸下去,他立马撤单,然后反向成交。
核心特征:高挂单量、高撤单率、极短存活时间。
我遇到过最夸张的一个案例,某只股票在3秒内挂了2000手买单,然后1秒内全撤了。价格被拉高了2%,他趁机把手里货出掉了。嗯,这种手法在流动性差的股票上特别管用。
- 计算订单存活时间(Order Lifetime)
- 统计撤单率(Cancel-to-Order Ratio)
- 分析订单簿不平衡度(Order Book Imbalance)
下面是一个简单的检测逻辑,我用Python写过类似的:
def detect_spoofing(order_book, threshold=0.8):
"""
检测虚假申报行为
order_book: 逐笔订单数据
threshold: 撤单率阈值
"""
suspicious_orders = []
for order in order_book:
cancel_rate = order.cancel_qty / order.total_qty
lifetime = order.cancel_time - order.submit_time
if cancel_rate > threshold and lifetime < 1000: # 1秒内撤单
suspicious_orders.append(order)
return suspicious_orders
4.2 幌骗交易:左手倒右手的把戏
幌骗交易和虚假申报有点像,但更“高级”。操纵者会同时挂出方向相反的订单。比如在买一挂大单,同时在卖二挂小单。等买一的大单把价格推上去,他立马撤掉买一,成交卖二。
核心特征:同一账户或关联账户的订单方向相反、时间高度重合。
你想想看,正常交易者谁会同时挂买入和卖出?除非是做市商。但做市商的价差是合理的,幌骗者的价差往往很小,甚至倒挂。
| 特征指标 | 正常交易 | 幌骗交易 |
|---|---|---|
| 买卖订单时间差 | 随机分布 | < 500ms |
| 撤单率 | < 30% | > 70% |
| 订单存活时间 | 数秒到数分钟 | < 2秒 |
4.3 对倒交易:自买自卖的独角戏
对倒交易,就是自己跟自己交易。操纵者控制多个账户,一个卖一个买,制造交易活跃的假象。目的是吸引跟风盘,或者拉高股价方便出货。
核心特征:交易量异常放大、价格波动小、买卖双方账户关联。
我习惯用图算法来检测对倒。把每个账户看作一个节点,交易关系看作边。如果两个账户之间频繁出现“你卖我买”的模式,而且没有其他账户参与,那基本就是有问题。
def detect_wash_trading(trades, threshold=0.9):
"""
检测对倒交易
trades: 逐笔成交数据
threshold: 关联交易占比阈值
"""
from collections import defaultdict
# 构建账户交易图
account_pairs = defaultdict(int)
total_trades = defaultdict(int)
for trade in trades:
buyer = trade.buyer_id
seller = trade.seller_id
pair = (min(buyer, seller), max(buyer, seller))
account_pairs[pair] += 1
total_trades[buyer] += 1
total_trades[seller] += 1
# 检测高度集中的交易对
suspicious = []
for (a, b), count in account_pairs.items():
ratio = count / (total_trades[a] + total_trades[b])
if ratio > threshold:
suspicious.append((a, b, ratio))
return suspicious
4.4 收盘价操纵:最后几分钟的疯狂
收盘价操纵,也叫“尾市操纵”。操纵者在收盘前几分钟大量买入或卖出,把收盘价拉到对自己有利的位置。为什么?因为很多基金的净值、期权行权价、质押平仓线都跟收盘价挂钩。
核心特征:尾盘成交量异常放大、价格偏离全天均价、买卖盘严重失衡。
我记得有个案例特别典型。某只股票全天成交清淡,最后3分钟突然涌入5000手买单,价格从10元拉到10.5元。第二天开盘直接低开,追进去的全被套了。
- 尾盘成交量占比(Last 5min Volume / Total Volume)
- 尾盘价格偏离度(Close Price / VWAP - 1)
- 尾盘买卖盘比(Last 5min Buy Volume / Sell Volume)
下面是我常用的一个检测模型:
def detect_close_manipulation(day_data, volume_ratio=0.3, price_dev=0.02):
"""
检测收盘价操纵
day_data: 当日逐笔数据
volume_ratio: 尾盘成交量占比阈值
price_dev: 价格偏离度阈值
"""
total_volume = sum(t.volume for t in day_data)
last_5min = [t for t in day_data if t.time >= '14:55:00']
last_volume = sum(t.volume for t in last_5min)
if last_volume / total_volume > volume_ratio:
# 计算尾盘价格偏离
vwap = sum(t.price * t.volume for t in day_data) / total_volume
close_price = last_5min[-1].price
deviation = abs(close_price / vwap - 1)
if deviation > price_dev:
return True, {
'volume_ratio': last_volume / total_volume,
'price_deviation': deviation
}
return False, None
4.5 知识体系总览
说了这么多,咱们用一张图来总结一下这四种操纵手法的检测逻辑:
这张图把四种操纵手法、它们的特征、检测方法和数据源串起来了。我个人习惯在实际项目中,先用规则引擎做初筛,再用统计模型做精排,最后用图算法做关联分析。这样效率最高,误报率也最低。
公众号:蓝海资料掘金营,微信deep3321