盘口数据结构解析
各位同学,今天我们来聊聊盘口数据。说实话,很多做量化的朋友,一上来就盯着K线、MACD这些指标,却忽略了最原始、最真实的盘口数据。我个人觉得,盘口数据才是市场的「心电图」,它直接反映了买卖双方的博弈过程。
这一章,我会带你拆解四个核心数据结构:买卖十档、逐笔成交、委托队列,以及大单小单的识别逻辑。这些东西,我在实盘项目中反复踩过坑,今天一并分享给你。
一、买卖十档数据结构
先看买卖十档。说白了,就是当前挂单的「价格-数量」快照。交易所会实时推送买一到买十、卖一到卖十的数据。
举个例子,某股票当前盘口可能是这样的:
买一:10.00元 1000股
买二:9.99元 2000股
...
卖一:10.01元 1500股
卖二:10.02元 3000股
...
这里有个关键点:挂单量不等于成交量。挂单只是「意愿」,成交才是「事实」。我在早期做策略时,就犯过这个错——看到买一挂了5000手,以为买盘很强,结果下一秒就被砸穿了。
核心字段:
- 价格(Price):精确到最小变动单位,A股是0.01元
- 数量(Volume):以股为单位,注意不是手
- 档位(Level):1到10,越靠前越优先成交
你想想看,买卖十档能告诉我们什么?
- 价差(Spread):卖一价 - 买一价,越小说明流动性越好
- 深度(Depth):各档位的累计挂单量,深度厚说明承接力强
- 失衡比(Imbalance):买盘总量 vs 卖盘总量,我习惯用这个判断短期方向
我的小技巧: 别只看第一档。有时候买一只有100股,但买二到买五堆了10万手,这种「虚挂」很常见。我曾经遇到一个票,买一挂单薄得像纸,但买二到买五全是巨量,明显是主力在「托底」。
二、逐笔成交数据结构
逐笔成交,就是每一笔真实成交的「流水账」。它比Tick数据更细,Tick是每秒快照,而逐笔是每一笔都记录。
结构通常包含:
时间戳:09:30:01.123
价格:10.05元
数量:500股
方向:主动买(B)或主动卖(S)
成交编号:12345678
这里有个容易混淆的点:「主动买」和「主动卖」怎么区分? 简单说,如果这笔成交是用卖一价成交的,那就是主动买(买方吃单);如果用买一价成交,就是主动卖(卖方砸盘)。
注意: 有些行情源会把「B」和「S」标反。我遇到过一家数据商,他们的逐笔数据里B和S是反的,害我回测亏了半个月。所以拿到数据后,先手动验证几笔,确认方向逻辑。
逐笔成交的价值在于:
- 识别「大单」和「小单」的分布
- 计算「资金流向」——主动买的总量减去主动卖的总量
- 发现「异常成交」——比如突然一笔巨量成交,价格却没怎么动
三、委托队列数据结构
委托队列,也叫「Order Book」。它比买卖十档更细,能看到每个价格档位上,具体有哪些委托单在排队。
结构大概是:
卖一档:10.01元
委托1:500股 时间09:30:00.001
委托2:300股 时间09:30:00.002
委托3:200股 时间09:30:00.005
卖二档:10.02元
...
为什么需要这个?因为买卖十档只告诉你「总量」,而委托队列告诉你「分布」。比如卖一挂了1000股,但可能是1笔1000股的大单,也可能是10笔100股的小单。这两种情况,对盘口的冲击力完全不同。
实战经验: 我曾在监控中发现,某股票卖一档突然出现一笔5000股的挂单,但几秒后又撤单了。这种「假挂单」很常见,目的是吓唬散户。如果你只看十档总量,根本发现不了。
委托队列的常见用途:
- 撤单率分析:挂单后撤单的比例,高撤单率说明主力在「试盘」
- 队列深度:每个档位有多少笔委托,笔数多说明散户参与度高
- 时间优先:相同价格下,先挂的单先成交,所以队列顺序很重要
四、大单与小单的识别逻辑
终于到了最实用的部分。怎么区分大单和小单?
其实没有统一标准。不同股票、不同时间段,大单的定义都不一样。比如茅台的一笔100手,和ST股的一笔100手,意义完全不同。
我常用的几种方法:
- 绝对阈值法:比如单笔成交超过500手就算大单。简单粗暴,但不够灵活。
- 相对阈值法:用该股票过去N日的平均单笔成交量作为基准,超过2倍标准差就算大单。这个方法更科学。
- 资金量法:单笔成交金额超过某个值,比如50万元。适合不同价位的股票。
- 分位数法:把当日所有成交按大小排序,前10%算大单,后10%算小单。动态调整,适应性强。
我的建议: 别只用一种方法。我通常把「相对阈值法」和「资金量法」结合使用。比如:单笔成交量超过过去20日均量的3倍,且金额超过100万元,才标记为「大单」。这样能过滤掉很多噪音。
下面是我用Python实现的一个简单识别逻辑:
def classify_order(volume, price, avg_volume, std_volume):
"""
识别大单与小单
volume: 单笔成交量
price: 成交价格
avg_volume: 过去N日平均单笔成交量
std_volume: 过去N日单笔成交量标准差
"""
amount = volume * price # 成交金额
z_score = (volume - avg_volume) / std_volume # 相对阈值
if z_score > 2 and amount > 500000: # 超过2倍标准差且金额>50万
return '大单'
elif z_score < -1:
return '小单'
else:
return '普通单'
嗯,这里要注意:大单不一定代表主力买入,也可能是大户对倒。我曾经跟踪过一个票,每天都有几百笔大单,但价格就是不涨。后来发现是两家机构在「左手倒右手」,制造活跃假象。
知识体系总览
下面这张图,帮你理清本章的核心逻辑:
这张图把四个数据结构的关系串起来了。你会发现,它们其实是层层递进的:买卖十档是「快照」,逐笔成交是「流水」,委托队列是「细节」,大单小单是「提炼」。从数据到信号,中间需要你做很多处理。
总结一下:
- 买卖十档:看整体挂单分布,注意虚挂和撤单
- 逐笔成交:看真实成交方向,验证数据准确性
- 委托队列:看单笔挂单细节,识别主力意图
- 大单小单:用多维度方法识别,别迷信单一指标
好了,这一章的内容就到这里。盘口数据是量化交易的「原材料」,处理得好,后面策略才能跑得稳。下一章我们会聊如何用Python高效获取这些数据,到时候我会分享一些我踩过的坑,比如行情源的选择、数据缓存策略等等。
公众号:蓝海资料掘金营,微信deep3321