大单交易明细管道实战用bigdeal接口构建超大单动向监控 IG50免费开源股票数据API接口
逐笔数据颗粒度最细但体量太大,L2指标开箱即用但口径是黑盒,介于两者之间的大单交易明细是我用得最顺手的资金观察数据:交易所撮合出的大单成交逐条落盘,带成交方向和时间戳,既能做资金画像又不用背负全量逐笔的清洗成本。这篇文章记录我把大单明细管道化的完整过程:数据结构解析、超大单的动态定义、流向聚合、以及和逐笔数据的口径校验,代码全部是生产版本。
先看数据结构。大单交易在本地接口 time/real/trace/bigdeal/加股票代码,返回数组,每条记录四个核心字段:t 成交时间、v 成交量(股)、p 成交价、ts 交易方向(0 中性盘、1 买入、2 卖出),另有 d 字段标注数据归属日期。注意它已经过滤掉了小单,所以单条记录的量级显著高于逐笔,直接拿金额排序就能定位超大单,这是它对逐笔最大的工程优势。
第一步,读取与金额标准化。价格乘数量得到每笔金额,再按方向符号化,这一步没啥花样,关键是把 d 字段的日期校验做严------跨日文件拼接时以 d 为准,避免把隔日数据混进当日序列。
python
import json
import pandas as pd
def load_bigdeal(fp: str) -> pd.DataFrame:
"""读取大单明细并标准化"""
rows = json.loads(open(fp, encoding='utf-8').read())
df = pd.DataFrame(rows)
# 字段: t 时间 v 成交量 p 成交价 ts 方向(0中性/1买/2卖) d 归属日期
df = df[(df['v'] > 0) & (df['p'] > 0)].sort_values('t').reset_index(drop=True)
df['amt'] = df['p'] * df['v'] # 单笔金额
df['sign'] = df['ts'].map({0: 0.0, 1: 1.0, 2: -1.0})
return df
第二步,超大单的动态定义。固定金额阈值(比如一百万)在流动性分层明显的市场里会失真:小票全天可能没几笔百万单,大票百万单只是零头。我的方案是双维度动态阈值:单日金额分位数乘流通规模系数。具体做法是取当日大单金额的 98 分位作为超大单下限,再要求单笔金额不低于当日成交额的千分之三,两个条件取交集。这样同一套代码从五亿盘子跑到千亿盘子都不用调参。
python
def tag_super(df: pd.DataFrame) -> pd.DataFrame:
"""动态定义超大单:98分位 且 占大单合计千分之三以上"""
q98 = df['amt'].quantile(0.98)
base = df['amt'].sum()
mask = (df['amt'] >= q98) & (df['amt'] >= base * 0.003)
df['is_super'] = mask
df['flow'] = df['amt'] * df['sign']
return df
第三步,流向聚合与时段画像。超大单的观察价值在时段结构上:早盘超大单净流向代表开盘博弈的方向,尾盘超大单是资金隔夜态度的表达。我按三个时段聚合净流向,并算一个集中度指标------最大单笔金额占超大单合计的比例,集中度极高说明方向由个别大资金决定,离散分布则更像机构拆单的渐进建仓。
python
def flow_profile(df: pd.DataFrame) -> dict:
"""时段流向画像与集中度"""
sup = df[df['is_super']]
def net(lo, hi):
seg = sup[(sup['t'] >= lo) & (sup['t'] < hi)]
return float(seg['flow'].sum())
total = max(float(sup['flow'].abs().sum()), 1.0)
return {
'morning_net': net('09:30', '11:00'),
'afternoon_net': net('13:00', '14:30'),
'tail_net': net('14:30', '15:01'),
'conc': float(sup['amt'].max() / max(sup['amt'].sum(), 1)), # 集中度
'buy_ratio': float(sup[sup['ts'] == 1]['amt'].sum() /
max(sup['amt'].sum(), 1)),
}
第四步,口径校验。大单明细是数据方过滤后的子集,用它之前我会抽样和逐笔数据做一次勾稽:同一时段、同方向的逐笔加总应能覆盖大单明细的金额。勾稽对得上说明两边口径同步,对不上优先怀疑大单过滤规则变更,这时候要检查数据文档的更新日志。这个校验每周跑一次就够,成本极低但能挡住静默漂移。
实战观察说三点。其一,超大单集中在度 conc 高于 0.35 的样本,次日延续当日方向的概率明显更高------单个大资金的行为比一群中等资金的一致性更稳定,这个特征我直接做进了监控表排序。其二,尾盘超大单的权重应该比早盘给得更高,实测尾盘净流向对次日开盘方向的指示力是早盘的两倍上下,毕竟尾盘是当天最后的真金白银表态。其三,中性盘 ts 等于 0 的超大单不要丢弃,撮合规则下它们多为对倒嫌疑,单独计数,占比突变往往先于价格异动。另有一个流动性分层经验:金额占大单合计千分之三这条绝对线在小票上会过严,实际部署时我把分位参数做成按流通市值分三档的配置表,五亿以下用 96 分位、二十亿以上用 99 分位,命中率比全局单一参数好一截。
这条管道每天收盘后全池跑一遍只要几分钟,产出一张超大单时段画像表,配合主力净额数据做交叉确认,资金面的判断就有了两层独立证据。
本文用到的接口:大单交易 time/real/trace/bigdeal/加股票代码(字段 t、v、p、ts、d);逐笔成交 time/real/trace/onebyone/加股票代码(勾稽校验用)。数据由本地引擎 ig50 按日落盘。
资料参考:ig50