第三章 撤单行为拆解:撤单的动机分析
撤单,说白了就是订单还没成交就被取消了。很多新手觉得撤单就是操作失误,或者网络卡了。但在我眼里,撤单才是盘口里最值得玩味的行为。
为什么?因为成交是结果,撤单是意图。成交了你只能看到价格,撤单却能暴露对手的想法。我做了这么多年量化,有个习惯——每天复盘时,第一件事就是看撤单数据,而不是成交数据。
3.1 撤单的四大动机
撤单不是随机的。每一笔撤单背后,都有人在动心思。我个人把撤单动机分成四类:试盘、诱多、诱空、隐藏意图。
3.1.1 试盘
试盘是最常见的撤单动机。主力想测试市场的承接力,就会挂一笔大单,然后迅速撤掉。
举个例子。某只股票在10.00元的位置,突然出现一笔500手的买单。几秒后,这笔单子消失了。如果你盯着盘口看,会发现撤单后价格往往会有个小波动。
为什么会这样?因为市场看到了那笔大单,散户跟风了。主力一看跟风盘够多,就撤单——他根本不想成交,只是想看看市场反应。
关键判断标准:
- 挂单时间极短,通常不超过3秒
- 挂单量级明显大于当前盘口平均单量
- 撤单后价格反向运动
我在项目中遇到过一只期货品种,每天开盘前5分钟,总有几笔大单在关键价位上挂出来又撤掉。后来我写了个脚本专门抓这种模式,发现胜率能到65%以上。
3.1.2 诱多
诱多就有点坏了。主力在卖盘上挂大单,制造抛压假象,然后撤单,让价格往上冲。
你想想看,如果你看到卖一位置压了1000手,是不是觉得上方压力很大?但突然这1000手撤了,价格瞬间往上跳。那些等着回调买入的人,就不得不追高。
嗯,这里要注意。诱多撤单有几个特征:
- 挂单在卖盘,而且是整数价位
- 挂单时间比试盘长一些,大概5-15秒
- 撤单后价格快速拉升,但很快又回落
避坑指南:我曾经在螺纹钢上吃过亏。看到卖一挂了2000手,以为要跌,结果人家撤单后价格直接拉了两个点。后来我学乖了——看到大卖单先不急着做空,等3秒看看它撤不撤。
3.1.3 诱空
诱空和诱多正好相反。主力在买盘上挂大单,制造支撑假象,然后撤单,让价格往下砸。
我记得有一次做股指期货,IF主力合约在3800点挂了500手买单。很多散户看到这个支撑,纷纷跟多。结果那笔单子突然撤了,价格直接跌破3800,那些跟多的人全被套了。
诱空撤单的特征:
- 挂单在买盘,同样在整数价位
- 挂单时间通常比诱多长,因为需要更多时间吸引跟风盘
- 撤单后价格快速下跌,且伴随成交量放大
3.1.4 隐藏意图
这个最隐蔽。主力想建仓或者出货,但不想让别人看出来,就会用撤单来掩盖真实意图。
比如主力想买入,他会先挂一笔卖单,然后撤掉。这样盘口上就留下了"有人在卖"的假象。实际上他是在用撤单测试市场的卖压,为真正的买入做准备。
我个人习惯把这种撤单叫做"烟雾弹"。它的特点是:
- 撤单频率高,但单笔量不大
- 撤单后价格没有明显方向
- 伴随小单频繁成交
3.2 撤单率与撤单速度
光看动机还不够,还得看数据。撤单率和撤单速度,是我每天必看的两个指标。
3.2.1 撤单率
撤单率 = 撤单量 / 总挂单量。这个指标能告诉你市场的"诚意"。
| 撤单率范围 | 市场含义 | 我的应对 |
|---|---|---|
| < 10% | 正常交易,挂单诚意高 | 跟随盘口方向 |
| 10% - 30% | 有试探行为,需警惕 | 观望,不追单 |
| 30% - 50% | 主力活跃,大概率有动作 | 准备反向操作 |
| > 50% | 极端情况,可能是陷阱 | 暂停交易,等信号明确 |
我曾经用这个指标抓过一只股票的涨停板。那天撤单率突然从15%飙到45%,我判断主力要拉升,果断跟进,当天吃了7个点。
3.2.2 撤单速度
撤单速度,就是挂单到撤单的时间间隔。这个数据能告诉你主力的"耐心"。
我一般把撤单速度分成三档:
- 超快撤单(< 1秒): 程序化交易,大概率是试盘
- 中速撤单(1-5秒): 人工操作,可能是诱多/诱空
- 慢速撤单(> 5秒): 犹豫不决,或者是在等跟风盘
实战技巧:我个人习惯把撤单速度和撤单率结合起来看。比如撤单率30%+超快撤单,基本可以确定是程序化试盘。这时候我会反向挂单,吃主力的流动性。
3.3 核心逻辑框架
说了这么多,我画张图帮你理清思路。
3.4 实战代码示例
光说不练假把式。我写了个简单的Python脚本,用来抓取和分析撤单行为。
import pandas as pd
import numpy as np
from datetime import datetime
def analyze_cancel_behavior(order_book):
"""
分析撤单行为
order_book: DataFrame,包含挂单和撤单记录
"""
# 计算撤单率
total_orders = len(order_book)
canceled_orders = len(order_book[order_book['status'] == 'canceled'])
cancel_rate = canceled_orders / total_orders
# 计算撤单速度(秒)
order_book['cancel_speed'] = (
order_book['cancel_time'] - order_book['order_time']
).dt.total_seconds()
# 分类撤单动机
def classify_motivation(row):
if row['cancel_speed'] < 1 and row['order_size'] > 100:
return '试盘'
elif row['side'] == 'sell' and row['cancel_speed'] < 5:
return '诱多'
elif row['side'] == 'buy' and row['cancel_speed'] < 5:
return '诱空'
else:
return '隐藏意图'
order_book['motivation'] = order_book.apply(classify_motivation, axis=1)
# 输出结果
print(f"撤单率: {cancel_rate:.2%}")
print(f"平均撤单速度: {order_book['cancel_speed'].mean():.2f}秒")
print(f"动机分布:\n{order_book['motivation'].value_counts()}")
return order_book
# 使用示例
# df = pd.read_csv('order_data.csv')
# result = analyze_cancel_behavior(df)
个人建议:这个脚本我用了两年,迭代了十几个版本。核心逻辑没变,但参数一直在调。比如试盘的阈值,不同品种差异很大——股指期货我设0.5秒,商品期货设1秒,股票设3秒。你拿到代码后,一定要先跑历史数据,找到适合你品种的参数。
撤单行为,说白了就是主力的"小动作"。你把这些小动作看懂了,盘口在你眼里就不再是杂乱无章的数字,而是一场精心设计的博弈。
嗯,今天就先聊到这。记住一句话:成交是结果,撤单是意图。多花点时间在撤单上,你会发现一个全新的世界。
公众号:蓝海资料掘金营,微信deep3321