3、大单识别算法:单笔大单阈值法、累计大单统计法、时间窗口大单检测

好,咱们进入正题。大单识别,说白了就是要把那些「不寻常」的交易给揪出来。什么叫不寻常?就是单子大得离谱,明显不是散户能干的活。我做了这么多年量化,见过太多人盯着K线瞎猜,其实真正的主力痕迹,都藏在成交明细里。

今天聊三种最实用的方法。这三种方法我都在实盘里跑过,各有各的脾气。你想想看,如果连大单都识别不准,后面的跟风分析全是白搭。

3.1 单笔大单阈值法

这是最直接的方法。设定一个金额阈值,超过就算大单。比如单笔成交超过50万,我就认为这是大单。

但阈值怎么定?我个人的习惯是,别拍脑袋。你得看这只股票的日常成交分布。举个例子,一只10块钱的股票,平时每笔成交也就几千块,突然来了一笔100万的单子,这肯定有问题。但如果是茅台,单笔100万可能只是毛毛雨。

核心思路: 阈值 = 平均每笔成交额 × N倍(N通常取3-5)

我在项目中遇到过一个问题:有些股票流动性差,偶尔一笔中等规模的单子就能把价格打飞。这时候阈值设低了,容易误判。所以我建议,最好结合个股的日均成交额来动态调整。

# 单笔大单阈值法示例(Python伪代码)
def detect_large_trade(trade_data, threshold_multiplier=4):
    avg_trade_size = trade_data['amount'].mean()
    threshold = avg_trade_size * threshold_multiplier
    
    large_trades = trade_data[trade_data['amount'] > threshold]
    return large_trades
小技巧: 我一般会把阈值设成两个档位——「明显大单」和「巨量单」。明显大单用3倍均值,巨量单用10倍。这样能区分主力的试探性买入和真正的扫货。

3.2 累计大单统计法

单笔大单阈值法有个硬伤:主力如果拆单呢?把一笔1000万的单子拆成20笔50万的,单笔看都不算大单,但累计起来就是个大动作。

累计大单统计法就是干这个用的。它把一段时间内(比如1分钟、5分钟)的所有成交汇总,看累计金额是否超过阈值。

嗯,这里要注意:时间窗口不能太长,否则会把不同方向的单子混在一起。我个人习惯用1分钟窗口,对于高频交易来说,1分钟已经能看出很多信息了。

# 累计大单统计法示例
def cumulative_large_trade(trade_data, window='1min', threshold=2000000):
    # 按时间窗口聚合
    grouped = trade_data.resample(window).agg({'amount': 'sum', 'side': 'first'})
    
    # 筛选累计金额超过阈值的窗口
    large_windows = grouped[grouped['amount'] > threshold]
    return large_windows
避坑指南: 我曾经吃过一次亏——把窗口设成5分钟,结果把主力在5分钟内先买后卖的对倒行为也算成了净买入。后来我加了方向判断,只统计同方向的累计金额。

3.3 时间窗口大单检测

这个方法更精细。它不光看金额,还看成交频率和价格变化。说白了,就是检测「异常活跃期」。

怎么理解?正常交易时,每分钟可能成交10笔,每笔几万块。突然有一分钟,成交了50笔,每笔都十几万,价格还往上窜——这大概率是主力在干活。

我常用的指标有三个:

  • 成交笔数异常比: 当前窗口笔数 / 过去N个窗口平均笔数
  • 金额异常比: 当前窗口金额 / 过去N个窗口平均金额
  • 价格冲击系数: 价格变动幅度 / 成交金额

这三个指标结合起来,能有效过滤掉「量大但价格不动」的垃圾单(比如对倒盘)。

# 时间窗口大单检测
def time_window_detection(trade_data, window='1min', lookback=20):
    # 计算滚动均值
    rolling_volume = trade_data['amount'].rolling(lookback).mean()
    rolling_count = trade_data['count'].rolling(lookback).mean()
    
    # 当前窗口数据
    current = trade_data.resample(window).last()
    
    # 异常判定
    current['volume_ratio'] = current['amount'] / rolling_volume
    current['count_ratio'] = current['count'] / rolling_count
    
    # 两个比值都超过2倍,才认为是异常窗口
    anomaly = current[(current['volume_ratio'] > 2) & (current['count_ratio'] > 2)]
    return anomaly
个人经验: 时间窗口大单检测最适合用在开盘和收盘时段。这两个时间段主力最喜欢动手,因为流动性好,容易隐藏。我一般会在开盘前15分钟和收盘前15分钟,把阈值调低20%,提高敏感度。

三种方法对比

方法 优点 缺点 适用场景
单笔大单阈值法 简单直观,计算快 无法识别拆单 流动性差的股票
累计大单统计法 能捕捉拆单行为 时间窗口选择敏感 主力吸筹/出货
时间窗口大单检测 综合判断,准确率高 参数多,调优复杂 高频交易、盘口分析

说实话,这三种方法没有绝对的好坏。我自己的策略里,通常是把它们结合起来用:先用单笔阈值法快速过滤,再用累计统计法确认,最后用时间窗口检测做精细判断。三层过滤下来,误报率能降到很低。

你想想看,主力再狡猾,也逃不过这三层网。关键是参数要调得合适,别太松也别太紧。这个度,就得靠历史数据回测来找了。

大单识别算法核心逻辑 原始成交数据 单笔大单阈值法 金额 > 阈值 累计大单统计法 窗口累计 > 阈值 时间窗口检测法 频率+金额+价格 三层过滤 → 最终大单识别结果

最后说一句:别迷信任何一种方法。市场在变,主力的手法也在变。我每三个月会重新回测一次参数,看看阈值是不是还合适。这个习惯,救过我不少次。

核心总结: 大单识别的本质,是找到「统计上的异常点」。单笔阈值法抓显性大单,累计统计法抓隐性拆单,时间窗口法抓综合异常。三者配合,才能把主力的尾巴揪出来。

专注资料整理