信号定义:大单买入/卖出信号、连续撤单信号、价量异动信号

做量化交易这些年,我越来越觉得——信号定义是整个盘口系统的灵魂。你想想看,策略再花哨,如果信号定义不清晰,那就像开车没有仪表盘,全凭感觉。今天我们就来聊聊三种最核心的信号:大单、撤单、价量异动。

我个人习惯把信号定义分成两个层面:逻辑层面代码层面。逻辑层面解决「是什么」,代码层面解决「怎么抓」。咱们一个一个来。

一、大单买入/卖出信号

什么叫大单?说白了,就是单笔成交金额显著超过当前盘口平均水平的订单。我在项目中遇到过不少新手,上来就定义「大于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秒内价格必须突破前高,才算有效信号。

二、连续撤单信号

连续撤单,是盘口里最「阴」的信号之一。你想想看,一个订单挂上去又撤掉,挂上去又撤掉——他在干嘛?大概率是在试探市场深度,或者制造虚假的买卖压力。

我一般这样定义连续撤单:

  1. 同一价位:同一档位(比如卖一)在短时间内(如5秒内)出现3次以上撤单
  2. 累计撤单量:撤单总量超过该档位当前挂单量的50%
  3. 方向性:买单侧连续撤单 → 可能是假支撑;卖单侧连续撤单 → 可能是假压力

实战技巧:连续撤单信号最好配合「挂单存活时间」一起看。如果一笔订单只挂了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

知识体系总览

下面这张图,是我梳理的三种信号之间的关系。你看完应该能明白,它们不是孤立的,而是互相验证的:

盘口信号定义知识体系 大单买入/卖出 动态阈值 · 方向判定 价格确认 · 诱多过滤 连续撤单信号 同一价位 · 时间窗口 撤单计数 · 方向识别 价量异动信号 Z-score · 价格加速度 背离检测 · 模式识别 信号融合与验证 多信号共振 → 高胜率交易机会 交易决策输出 买入信号 | 卖出信号 | 观望信号 三种信号互相验证,单一信号不构成交易依据

你看这张图就清楚了:大单信号、撤单信号、价量异动信号,最终要汇聚到「信号融合与验证」这个环节。单一信号就像盲人摸象,只有三者共振,才是真正值得出手的机会。

我的经验:刚开始做盘口信号时,我恨不得把所有信号都抓一遍。后来发现,信号越多,噪音越大。真正有效的,往往就是这三类信号的组合。少即是多,这句话在量化交易里同样适用。

好了,信号定义这块就聊到这儿。记住:定义清晰了,代码实现才有方向。别急着写代码,先把逻辑想透。


专注资料整理