4、逐笔成交数据分析:逐笔成交的读取方法、买卖方向判断(主动买/主动卖)、挂单与成交的对应关系
各位同学,今天我们来聊聊逐笔成交数据。这东西,说白了就是市场最原始的“心跳记录”。
我刚开始做量化那会儿,整天盯着K线图看,觉得那就是一切。后来有一次,我回测一个策略,明明信号都对,实盘就是亏钱。我查了三天三夜,最后发现是成交细节出了问题。嗯,从那以后,我再也不敢小看逐笔数据了。
4.1 逐笔成交数据的读取方法
逐笔成交数据,就是交易所每撮合成一笔交易,就记录一条。它不像分钟线那样被“加工”过,是最干净、最真实的数据。
我个人习惯用Python来读取。国内主流的数据源,比如Level-2行情,都会提供逐笔成交的接口。格式大致如下:
import pandas as pd
# 假设从数据源读取到的原始数据
data = {
'时间': ['09:30:01.123', '09:30:01.456', '09:30:02.001'],
'价格': [10.01, 10.02, 10.01],
'成交量': [100, 200, 150],
'成交额': [1001, 2004, 1501.5],
'买卖方向': ['B', 'S', 'B'], # B=主动买, S=主动卖
'成交编号': ['12345', '12346', '12347']
}
df = pd.DataFrame(data)
print(df.head())
这里要注意一个细节:不同数据源给的字段名可能不一样。有的叫“方向”,有的叫“BSFlag”。我在项目中遇到过,某家数据源把主动买标记为1,主动卖标记为2,结果我按0和1去判断,直接全反了。所以拿到数据后,第一件事就是检查字段定义。
4.2 买卖方向判断:主动买 vs 主动卖
这是逐笔分析的核心。你想想看,一笔交易能成交,一定是有人想买,有人想卖。那到底谁更“主动”?
判断标准其实很简单:
- 主动买(B):买方直接以卖一价或更高的价格买入。说白了,就是买方“抢着买”。
- 主动卖(S):卖方直接以买一价或更低的价格卖出。就是卖方“急着卖”。
举个例子:
# 假设当前盘口
买一:10.00 1000股
卖一:10.01 800股
# 场景1:有人以10.01的价格买入500股
# 这就是主动买。因为买方直接吃了卖一的单子。
# 场景2:有人以10.00的价格卖出300股
# 这就是主动卖。因为卖方直接砸给了买一的单子。
为什么会这样?因为成交价格决定了谁更主动。如果成交价等于卖一价或更高,那就是买方主动。如果成交价等于买一价或更低,那就是卖方主动。
我建议你在代码里这样判断:
def judge_direction(row, bid_price, ask_price):
"""
row: 逐笔成交数据行
bid_price: 当前买一价
ask_price: 当前卖一价
"""
if row['成交价'] >= ask_price:
return '主动买'
elif row['成交价'] <= bid_price:
return '主动卖'
else:
# 这种情况很少见,一般是价格刚好在中间
return '中性'
4.3 挂单与成交的对应关系
挂单是“意愿”,成交是“结果”。两者之间的关系,就像“想买”和“买到了”的区别。
我画了一张图,帮你理解这个关系:
你看,挂单就像是一个“蓄水池”,成交就是“放水”。每一笔成交,都会消耗掉对应的挂单。
这里有个关键点:大单拆解。主力资金为了不暴露意图,经常会把一个大单拆成很多小单。比如:
- 一个100万股的买入,可能拆成100笔,每笔1万股
- 时间上分散在几分钟甚至几十分钟内
- 价格上可能在不同价位分批买入
我教你一个方法,识别这种“伪装”:
def detect_large_order(df, time_window=60, volume_threshold=50000):
"""
检测大单拆解行为
df: 逐笔成交数据
time_window: 时间窗口(秒)
volume_threshold: 成交量阈值(股)
"""
# 按时间排序
df = df.sort_values('时间')
# 计算滚动成交量
df['滚动成交量'] = df['成交量'].rolling(window=time_window).sum()
# 标记大单
df['是大单'] = df['滚动成交量'] > volume_threshold
return df[df['是大单']]
4.4 实战应用:如何利用逐笔数据跟单
好了,理论讲完了。咱们来点实际的。
我个人习惯这样用逐笔数据:
- 看主动买/主动卖的比例:如果连续一段时间,主动买的成交量远大于主动卖,说明有人在吸筹。
- 看大单拆解痕迹:如果发现某个价格区间,频繁出现相同大小的单子(比如每次都是1万股),那很可能是主力在分批建仓。
- 结合挂单变化:如果卖一位置突然出现大单,然后又被快速吃掉,这往往是主力在试盘。
举个例子:
# 假设你看到这样的逐笔数据
# 时间 价格 成交量 方向
# 09:35:01 10.01 10000 B
# 09:35:03 10.01 10000 B
# 09:35:05 10.01 10000 B
# 09:35:07 10.01 10000 B
# 09:35:09 10.01 10000 B
# 连续5笔,每笔1万股,都是主动买
# 这说明什么?有人在10.01这个价位,连续吃了5万股
# 而且每次都是1万股,明显是拆过的
# 再看挂单变化
# 卖一原本有50000股,现在只剩0
# 买一原本有30000股,现在变成40000股(因为有人撤单或新增)
嗯,这里要注意:不是所有的大单拆解都是主力。有时候机构做套利也会这样操作。但如果你发现这种模式反复出现,而且伴随着股价的稳步上涨,那大概率是主力在建仓。
最后,送你一句话:逐笔数据是市场的“显微镜”。用好了,你能看到别人看不到的细节。但别沉迷于细节,要时刻记得看大方向。