3. 大单识别算法:大单定义与阈值设定、基于成交量的识别方法、基于成交金额的识别方法、基于委托单大小的识别方法

聊到大单识别,很多新手第一反应就是:「看到大单就跟着买呗」。嗯,事情要是这么简单,那满大街都是股神了。我做了这么多年量化,踩过的坑比吃过的盐还多。今天咱们就把大单识别这事儿掰开揉碎了讲清楚。

3.1 大单的定义与阈值设定

什么叫大单?说白了,就是一笔交易的单量或者金额,明显超过了市场正常的交易规模。但这里有个关键问题——「明显超过」到底是多少?

我个人习惯把大单分成两类:绝对大单相对大单

  • 绝对大单:比如单笔成交超过500手、1000手这种固定阈值。适合大盘股,因为流动性好。
  • 相对大单:根据个股的日均成交量动态计算。比如单笔成交量超过日均成交量的0.5%。适合小盘股,因为盘子小,绝对阈值容易失真。

阈值怎么定?我建议用「分位数法」。举个例子:

import pandas as pd
import numpy as np

# 假设df是某只股票的历史逐笔成交数据
# 计算每笔成交量的90%分位数
threshold_volume = df['volume'].quantile(0.90)
print(f"90%分位数阈值: {threshold_volume}手")

# 也可以用成交金额
threshold_amount = df['amount'].quantile(0.90)
print(f"90%分位数阈值: {threshold_amount}元")

你想想看,为什么用90%分位数?因为正常情况下,90%的交易都是散户的零碎单子。超过这个线,大概率是机构在动手。

我的经验: 不同股票要单独算阈值。我曾经在同一个策略里用统一阈值,结果茅台和工商银行的识别结果完全没法看。茅台一手20万,工商银行一手2000块,能一样吗?

3.2 基于成交量的识别方法

这是最直观的方法。单笔成交量突然放大,说明有大资金在进出。但这里有个坑——拆单

机构现在都学精了,大单拆成几十笔小单,你按成交量阈值根本抓不到。怎么办?我一般用「累计成交量法」:

  1. 设定一个时间窗口,比如1分钟。
  2. 统计窗口内的累计成交量。
  3. 如果累计成交量超过阈值,就认为这1分钟内有「大单行为」。
# 1分钟累计成交量识别
window = 60  # 60秒
df['cum_volume'] = df['volume'].rolling(window).sum()
df['is_big_order'] = df['cum_volume'] > threshold_volume * 3

为什么要乘以3?因为1分钟的正常成交量大概是单笔阈值的2-3倍。这个系数我调了整整两周才找到感觉。

避坑指南: 我曾经在2015年股灾期间用这个策略,结果频繁触发。后来发现是市场整体放量,不是机构在操作。记得要剔除市场整体波动的影响,用「相对成交量」——即个股成交量除以市场总成交量。

3.3 基于成交金额的识别方法

成交量法有个硬伤——不同股票的价格差异太大。你想想看,100手茅台和100手工商银行,金额差了100倍。所以成交金额法更普适。

我个人习惯用「金额阈值 + 价格波动」的组合:

股票类型 单笔金额阈值 价格波动要求
大盘股(市值>1000亿) 100万元以上 价格变动>0.3%
中盘股(市值100-1000亿) 50万元以上 价格变动>0.5%
小盘股(市值<100亿) 20万元以上 价格变动>1.0%

为什么加价格波动要求?因为有些机构会用「对倒」手法——自己买自己卖,制造成交量假象。但价格没动,说明是假的。

# 成交金额 + 价格波动识别
price_change = df['price'].pct_change()
amount_threshold = 500000  # 50万

df['is_real_big'] = (df['amount'] > amount_threshold) & (abs(price_change) > 0.005)
核心逻辑: 真的大单一定会推动价格。如果金额大但价格不动,十有八九是陷阱。

3.4 基于委托单大小的识别方法

这个方法更「前瞻」——成交是已经发生的事,而委托单是还没成交的。通过监控「挂单」的大小,可以提前预判大资金的意图。

我常用的指标是「委比」和「大单挂单占比」:

  • 委比 = (买一量 - 卖一量) / (买一量 + 卖一量)。正值说明买方强势。
  • 大单挂单占比 = 挂单中超过阈值的大单数量 / 总挂单数量。

举个例子:

# 计算大单挂单占比
def big_order_ratio(order_book, threshold=100):
    big_bids = sum(1 for bid in order_book['bids'] if bid['size'] > threshold)
    big_asks = sum(1 for ask in order_book['asks'] if ask['size'] > threshold)
    total = len(order_book['bids']) + len(order_book['asks'])
    return (big_bids + big_asks) / total

嗯,这里要注意:委托单是可以撤的。有些机构会挂大单「虚晃一枪」,等你跟进去,他立马撤单反向操作。我吃过这个亏,后来加了一个「挂单稳定性」指标——挂单后至少保持3秒不撤,才算有效。

我的小技巧: 把三种方法结合起来用。成交量法抓「量」,金额法抓「钱」,委托单法抓「意图」。三者同时触发时,准确率能到80%以上。

知识体系总览

下面这张图是我自己梳理的大单识别框架,你一看就明白了:

大单识别算法知识体系 大单识别算法 基于成交量识别 单笔成交量阈值(分位数法) 累计成交量窗口法(防拆单) 基于成交金额识别 金额阈值(按市值分类) 金额+价格波动双重验证 基于委托单识别 委比 + 大单挂单占比 挂单稳定性检测(防撤单) 三者联合触发 → 准确率80%+ 阈值设定原则:绝对大单(固定值) + 相对大单(动态分位数) 避坑:剔除市场整体波动、识别对倒交易、防范虚假挂单

最后说一句:没有完美的算法,只有不断迭代的策略。我自己的大单识别系统已经迭代了7个版本,每次回测都能发现新的问题。你刚开始做,别追求一步到位,先把基础框架搭起来,慢慢优化。

记住三个核心: 量要够大、钱要够多、意图要够真。三者缺一不可。

公众号:蓝海资料掘金营,微信deep3321