撤单策略基础:撤单的时机选择、撤单对盘口的影响、虚假挂单识别
撤单,听起来很简单对吧?
点一下取消就完事了。但在我眼里,撤单才是盘口博弈中最见功力的地方。挂单谁都会,什么时候撤、怎么撤、撤完怎么走——这才是区分新手和老手的分水岭。
我刚开始做量化那会儿,觉得撤单就是个“取消操作”。后来被市场狠狠教育了几次,才明白:撤单不是认输,是策略的一部分。说白了,撤单本身就是一种信号。
撤单的时机选择
时机这东西,差一秒结果可能天差地别。我个人习惯把撤单时机分成三类:
- 被动撤单:挂单后长时间没成交,主动放弃
- 主动撤单:发现盘口异动,立刻撤回重新布局
- 策略撤单:按预设条件自动触发,比如时间阈值、价格偏移
我在项目中遇到过最典型的场景:某只股票在买一挂了500手大单,看着像是有资金在托底。但过了3分钟,这单子纹丝不动,价格反而往下压了2个tick。嗯,这时候就该撤了——明显是假托单,等着散户往上冲呢。
核心原则:挂单超过30秒未成交,且价格朝不利方向移动,优先考虑撤单。
你想想看,如果真是大资金要吃货,不会让单子挂在那里当靶子。真正的大单,要么瞬间吃掉,要么挂上去就撤,根本不会给你反应时间。
撤单对盘口的影响
撤单不是孤立行为。你撤了,盘口就变了,别人看到的变化又会反过来影响你。这就是博弈。
我总结了几种常见影响:
| 撤单类型 | 盘口表现 | 市场解读 |
|---|---|---|
| 买一撤单 | 买盘厚度骤降 | 支撑消失,价格可能下探 |
| 卖一撤单 | 卖盘压力减轻 | 抛压减弱,价格可能反弹 |
| 大单撤单 | 深度图出现断层 | 主力意图不明,观望情绪加重 |
我记得有一次做回测,发现一个很有意思的现象:某只股票在拉升前,卖五位置频繁出现大单挂上又撤掉。反复三次后,价格突然拉涨停。后来我才明白,那是主力在测试上方抛压——挂上去看有没有人跟着卖,没人卖就撤,然后自己拉。
实战技巧:如果发现某价位反复出现“挂单-撤单”循环,且每次撤单后价格都往同一方向移动,大概率是主力在试盘。这时候跟着方向走,胜率会高很多。
虚假挂单识别
虚假挂单,行话叫“托单”或“压单”。说白了就是挂上去不打算成交,纯粹为了影响别人判断。
怎么识别?我总结了三个关键点:
- 挂单时间短:真正的交易单,挂上去要么成交要么等。虚假单子往往挂几秒就撤,尤其是大单。
- 挂单位置刁钻:比如买一挂大单,但买二到买五全是小单。这种结构很不自然,大概率是托单。
- 撤单后价格反向:虚假买单撤掉后价格不跌反涨,说明那单子本身就是假的,市场根本没把它当支撑。
我曾经踩过一个坑:某只股票买一挂了2000手,看着特别稳。我跟着挂了500手在买二,想着有人托底不怕。结果那2000手突然撤了,价格瞬间砸下来3个点,我的单子直接成交在最低点。嗯,从那以后我再也不盲目跟大单了。
避坑指南:我曾经以为挂单量越大越安全,后来发现恰恰相反。真正的大资金,不会让你看到它的底牌。那些明晃晃挂在那里的“大单”,十有八九是诱饵。
核心逻辑框架
下面这张图,是我自己整理的一套撤单决策流程。每次做策略前,我都会过一遍这个逻辑:
这个流程看起来简单,但实际跑起来很考验盘感。我一般会在策略里加两个参数:一个是max_hold_time,控制单子最长挂多久;另一个是price_deviation,价格偏离多少就触发撤单。这两个参数调好了,胜率能提升不少。
代码示例:撤单策略核心逻辑
def should_cancel(order, market_data, config):
"""
判断是否应该撤单
order: 当前挂单信息
market_data: 实时盘口数据
config: 策略参数
"""
# 1. 时间检查
hold_time = time.time() - order['timestamp']
if hold_time > config['max_hold_time']:
return True, "超时撤单"
# 2. 价格偏移检查
current_price = market_data['last_price']
order_price = order['price']
deviation = abs(current_price - order_price) / order_price
if deviation > config['price_deviation']:
return True, "价格偏移过大"
# 3. 盘口异常检查
bid_depth = market_data['bid_depth'] # 买盘厚度
ask_depth = market_data['ask_depth'] # 卖盘厚度
# 如果挂的是买单,但买盘突然变薄
if order['side'] == 'buy' and bid_depth < config['min_depth']:
return True, "买盘支撑不足"
# 如果挂的是卖单,但卖盘突然变厚
if order['side'] == 'sell' and ask_depth > config['max_depth']:
return True, "卖盘压力过大"
return False, "继续持有"
这段代码是我早期策略的核心。你可能会问:为什么还要检查盘口深度?
因为有时候价格没变,但盘口结构已经变了。比如买一还是那个价,但下面的单子全撤了——这时候你的单子就悬空了,不撤等着被砸吗?
个人习惯:我一般会把撤单逻辑和重新挂单逻辑写在一起。撤完不是结束,而是新一轮博弈的开始。撤单后3秒内,我会根据新的盘口结构决定下一步动作。
撤单这东西,说白了就是“认错要快”。市场不会给你第二次机会。你犹豫的那一秒,可能已经错过了最佳撤单窗口。嗯,这句话是我亏出来的经验。
公众号:蓝海资料掘金营,微信deep3321