4、逐笔成交分析:Tick数据的字段含义、大单识别算法、资金流向计算、主力动向判断
逐笔成交数据,圈内人俗称 Tick 数据。
它记录了每一笔真实的成交。不是快照,不是切片,是实打实的每一笔。
我刚开始做港股量化的时候,第一件事就是把 Tick 数据拉下来跑一遍。为什么?因为 K 线会骗人,但 Tick 不会。每一笔成交都是真金白银砸出来的。
4.1 Tick 数据的字段含义
港交所的 Tick 数据,和 A 股不太一样。字段更细,信息量更大。
我直接给你列出来,常用的几个核心字段:
| 字段名 | 含义 | 备注 |
|---|---|---|
| TradeTime | 成交时间 | 精确到毫秒,港股是 HH:mm:ss.fff |
| Price | 成交价格 | 注意港股最小变动价位,不同股票不一样 |
| Volume | 成交股数 | 不是金额,是股数 |
| Turnover | 成交金额 | Price × Volume,单位是港币 |
| TradeType | 成交类型 | 自动对盘、非自动对盘、碎股等 |
| BuySellCode | 买卖方向 | 1=买盘主动,2=卖盘主动,0=未知 |
| TradeID | 成交编号 | 唯一标识,可以用来去重 |
重点说下 BuySellCode
这个字段决定了这笔成交是「主动买」还是「主动卖」。主动买,就是买方更着急,直接吃卖单。主动卖,就是卖方更着急,直接砸给买单。
资金流向的计算,全靠这个字段。没有它,你算出来的资金流向就是瞎猜。
还有一个字段容易被忽略——TradeType。港股有「自动对盘」和「非自动对盘」之分。非自动对盘,比如盘后交易、大宗交易,这些数据如果你不剔除,会严重干扰你的分析。
我的习惯
我一般会先过滤掉 TradeType 不等于 'A'(自动对盘)的数据。盘后交易那些,单独分析,不混在一起。
4.2 大单识别算法
什么叫大单?
没有统一标准。你不能说「超过 100 万就是大单」,因为腾讯的 100 万和一只仙股的 100 万,完全不是一个概念。
我常用的方法有两种:
方法一:固定阈值法
最简单,但最不靠谱。设定一个金额阈值,比如 50 万港币。超过就算大单。
缺点很明显:流动性好的股票,50 万只是毛毛雨。流动性差的,50 万可能就是一笔巨款。
方法二:动态阈值法(推荐)
根据股票的历史成交分布,动态计算阈值。
具体做法:
- 取过去 20 个交易日的所有 Tick 数据
- 计算每笔成交金额的 90% 分位数
- 超过这个分位数的,定义为大单
代码实现也很简单:
import numpy as np
def get_large_trade_threshold(tick_data, percentile=90):
"""
动态计算大单阈值
tick_data: DataFrame,包含 Turnover 字段
"""
threshold = np.percentile(tick_data['Turnover'], percentile)
return threshold
# 使用
threshold = get_large_trade_threshold(history_tick)
large_trades = tick_data[tick_data['Turnover'] > threshold]
注意
动态阈值法也不是万能的。遇到极端行情,比如财报发布当天,成交分布会剧烈变化。我建议你加一个「滚动窗口」机制,只取最近 5 天的数据来计算阈值,反应更快。
4.3 资金流向计算
资金流向,说白了就是「谁在买,谁在卖」的量化。
核心公式很简单:
资金净流入 = 主动买成交金额 - 主动卖成交金额
但这里有个坑——时间粒度。
你按 Tick 算,还是按分钟算,还是按小时算?结果可能完全相反。
我个人的经验是:
- 短线交易:按 1 分钟或 5 分钟粒度计算
- 中线持仓:按 30 分钟或 1 小时粒度计算
- 长线判断:按日粒度计算
给你看一段我常用的计算代码:
def calculate_money_flow(tick_data, freq='5min'):
"""
计算资金流向
tick_data: 包含 BuySellCode, Turnover, TradeTime
freq: 重采样频率
"""
# 区分主动买和主动卖
buy = tick_data[tick_data['BuySellCode'] == 1]
sell = tick_data[tick_data['BuySellCode'] == 2]
# 按时间重采样
buy_flow = buy.resample(freq, on='TradeTime')['Turnover'].sum()
sell_flow = sell.resample(freq, on='TradeTime')['Turnover'].sum()
# 净流入
net_flow = buy_flow - sell_flow
return net_flow
避坑指南
我曾经犯过一个错误——把「未知方向」(BuySellCode=0)的数据直接丢弃了。后来发现,港交所的某些交易类型,比如「碎股交易」,BuySellCode 就是 0。这些数据虽然占比不大,但如果你完全忽略,资金流向的准确性会打折扣。
我的建议是:把未知方向的成交金额,按比例分摊到主动买和主动卖中。比例就用已知方向的比例。
4.4 主力动向判断
主力动向,是资金流向的进阶版。
光看净流入还不够。因为主力会拆单,会伪装。你看到的「净流入 1000 万」,可能是 10 个散户买的,也可能是 1 个主力拆成 100 笔买的。
我判断主力动向,主要看三个指标:
| 指标 | 计算方式 | 含义 |
|---|---|---|
| 大单占比 | 大单成交金额 / 总成交金额 | 主力参与度 |
| 大单资金流向 | 大单主动买 - 大单主动卖 | 主力的真实意图 |
| 成交集中度 | 前 10% 大单金额占比 | 资金是否集中在少数人手里 |
举个例子:
某只股票,今天总成交 1 亿。大单占比 60%,大单资金净流入 2000 万。这说明什么?主力在积极买入,而且参与度很高。
但如果大单占比只有 10%,大单资金净流入 2000 万。嗯,这就有问题了——可能是某个大户在硬拉,其他主力根本不跟。
我的判断逻辑
我一般会结合「大单占比」和「大单资金流向」一起看。只有两个指标同时指向同一个方向,我才会认为主力有明确的动向。
比如:大单占比 > 40% 且 大单资金净流入 > 0,我才认为是「主力净买入」。
知识体系总览
下面这张图,是我自己梳理的逐笔成交分析框架。你可以把它当作一个检查清单:
嗯,逐笔成交分析,说白了就是「看穿盘口」的能力。Tick 数据里藏着很多信息,关键是你有没有耐心去挖。
我刚开始做的时候,每天盯着 Tick 数据看几个小时。慢慢地,就能感觉到哪些是主力的单子,哪些是散户的单子。这种感觉,代码写不出来,只能靠经验积累。
最后说一句
逐笔成交分析不是万能的。它只能告诉你「发生了什么」,不能告诉你「为什么发生」。真正的高手,是把 Tick 数据和其他数据(订单簿、新闻、财报)结合起来看。
但如果你连 Tick 数据都看不懂,后面的分析都是空中楼阁。
公众号:蓝海资料掘金营,微信deep3321