信号定义:大单买入/卖出信号、连续撤单信号、价量异动信号
做量化交易这些年,我越来越觉得——信号定义是整个盘口系统的灵魂。你想想看,策略再花哨,如果信号定义不清晰,那就像开车没有仪表盘,全凭感觉。今天我们就来聊聊三种最核心的信号:大单、撤单、价量异动。
我个人习惯把信号定义分成两个层面:逻辑层面和代码层面。逻辑层面解决「是什么」,代码层面解决「怎么抓」。咱们一个一个来。
一、大单买入/卖出信号
什么叫大单?说白了,就是单笔成交金额显著超过当前盘口平均水平的订单。我在项目中遇到过不少新手,上来就定义「大于100手就算大单」——这其实不靠谱。不同股票、不同时间段,流动性差异巨大。
我建议用动态阈值:
# 动态大单判定逻辑
def is_large_order(trade_volume, recent_avg_volume, multiplier=3):
"""
trade_volume: 当前单笔成交量
recent_avg_volume: 最近N笔平均成交量(比如过去20笔)
multiplier: 倍数阈值,默认3倍
"""
return trade_volume > recent_avg_volume * multiplier
嗯,这里要注意:大单信号还要区分方向。怎么区分?看成交价格相对于买卖盘口的位置:
- 大单买入信号:成交价在卖一价或以上,且成交量超过阈值
- 大单卖出信号:成交价在买一价或以下,且成交量超过阈值
核心要点:大单信号的价值不在于「看到大单」,而在于「大单出现后的价格行为」。如果大单买入后价格不涨反跌,那可能是主力在出货。
我曾经踩过一个坑:只抓大单买入信号,结果频繁被诱多。后来加了「大单后的价格确认」逻辑——大单出现后3秒内价格必须突破前高,才算有效信号。
二、连续撤单信号
连续撤单,是盘口里最「阴」的信号之一。你想想看,一个订单挂上去又撤掉,挂上去又撤掉——他在干嘛?大概率是在试探市场深度,或者制造虚假的买卖压力。
我一般这样定义连续撤单:
- 同一价位:同一档位(比如卖一)在短时间内(如5秒内)出现3次以上撤单
- 累计撤单量:撤单总量超过该档位当前挂单量的50%
- 方向性:买单侧连续撤单 → 可能是假支撑;卖单侧连续撤单 → 可能是假压力
实战技巧:连续撤单信号最好配合「挂单存活时间」一起看。如果一笔订单只挂了0.5秒就撤了,那基本可以断定是试探性挂单。
代码实现上,我习惯维护一个「撤单计数器」:
# 连续撤单检测(简化版)
class CancelDetector:
def __init__(self, window_seconds=5, threshold=3):
self.window = window_seconds
self.threshold = threshold
self.cancel_log = [] # 存储 (时间戳, 价位, 方向)
def on_cancel(self, price, side, timestamp):
# 清理过期记录
self.cancel_log = [c for c in self.cancel_log
if timestamp - c[0] < self.window]
# 添加新记录
self.cancel_log.append((timestamp, price, side))
# 统计同一价位的撤单次数
count = sum(1 for c in self.cancel_log
if c[1] == price and c[2] == side)
return count >= self.threshold
为什么连续撤单值得关注?因为真正的机构订单很少频繁撤单。频繁撤单的,十有八九是短线游资或者量化做市商在搞事情。
三、价量异动信号
价量异动,是我个人认为最有「含金量」的信号。它不只看价格,也不只看成交量,而是看两者的背离关系。
常见的价量异动模式:
| 模式 | 价格行为 | 成交量行为 | 含义 |
|---|---|---|---|
| 放量上涨 | 快速拉升 | 显著放大 | 多头强势,趋势可能延续 |
| 放量下跌 | 快速下挫 | 显著放大 | 空头主导,注意风险 |
| 缩量上涨 | 缓慢上行 | 持续萎缩 | 上涨乏力,可能见顶 |
| 缩量下跌 | 缓慢下行 | 持续萎缩 | 下跌动能减弱,可能见底 |
| 价平量增 | 价格横盘 | 突然放大 | 多空分歧加大,即将变盘 |
注意:价量异动信号不能单独使用。我见过太多人看到「放量上涨」就追进去,结果被套在山顶。一定要结合盘口深度和订单流来综合判断。
检测价量异动的核心指标,我常用的是「成交量Z-score」和「价格加速度」:
# 价量异动检测
def detect_price_volume_anomaly(price_series, volume_series, z_threshold=2.0):
# 计算成交量Z-score
vol_mean = np.mean(volume_series[-20:])
vol_std = np.std(volume_series[-20:])
vol_z = (volume_series[-1] - vol_mean) / (vol_std + 1e-8)
# 计算价格变化率
price_change = (price_series[-1] - price_series[-5]) / price_series[-5]
# 异动判定
if vol_z > z_threshold and abs(price_change) > 0.002:
direction = "上涨" if price_change > 0 else "下跌"
return f"价量异动:{direction},成交量Z-score={vol_z:.2f}"
return None
知识体系总览
下面这张图,是我梳理的三种信号之间的关系。你看完应该能明白,它们不是孤立的,而是互相验证的:
你看这张图就清楚了:大单信号、撤单信号、价量异动信号,最终要汇聚到「信号融合与验证」这个环节。单一信号就像盲人摸象,只有三者共振,才是真正值得出手的机会。
我的经验:刚开始做盘口信号时,我恨不得把所有信号都抓一遍。后来发现,信号越多,噪音越大。真正有效的,往往就是这三类信号的组合。少即是多,这句话在量化交易里同样适用。
好了,信号定义这块就聊到这儿。记住:定义清晰了,代码实现才有方向。别急着写代码,先把逻辑想透。