盘口基础:Level-2行情数据解析、买卖十档数据结构、逐笔成交与逐笔委托的区别
做高频交易,第一关就是读懂盘口。
很多人觉得盘口就是买一卖一,看看价格就行了。说实话,这种认知做做日线级别交易还行,放到高频领域,根本不够用。我刚开始接触Level-2行情时,也被那密密麻麻的数据搞懵过。后来踩了不少坑,才慢慢摸清楚里面的门道。
Level-2行情到底多了什么?
普通行情(Level-1)只给你五档买卖盘,每档挂单量还是模糊的。Level-2就不一样了——它把十档挂单全亮出来,而且每一笔都是精确的。
你想想看,这差别有多大?
Level-2的核心数据包括:
- 十档行情:买一到买十、卖一到卖十,每档的价格和挂单量
- 逐笔成交:每一笔成交的明细,谁在什么价格买了多少
- 逐笔委托:每一笔挂单的明细,谁在什么价格挂了什么方向
- 委托队列:买一卖一的前50笔挂单明细
我个人习惯把Level-2行情比作「战场上的侦察兵」。普通行情只能告诉你「前方有敌人」,Level-2能告诉你「敌人有多少、装备如何、阵型怎么摆」。
关键认知:Level-2行情不是简单的数据增多,而是信息维度的升级。它让你从「看结果」变成「看过程」。
买卖十档数据结构
十档行情的数据结构其实不复杂。我直接给你看一个典型的C++结构体:
struct Level2Depth {
// 买盘(从买一到买十)
struct BidLevel {
double price; // 价格
int64_t volume; // 挂单量(股数)
int32_t order_count; // 挂单笔数
} bids[10];
// 卖盘(从卖一到卖十)
struct AskLevel {
double price; // 价格
int64_t volume; // 挂单量(股数)
int32_t order_count; // 挂单笔数
} asks[10];
int64_t timestamp; // 时间戳(纳秒级)
};
嗯,这里要注意一个细节:挂单量是股数,不是手数。很多新手在这里吃过亏,算资金的时候直接拿挂单量乘以价格,结果发现差了一个数量级。
另外,order_count这个字段很多人会忽略。它代表当前价格上有多少笔挂单。我曾在项目中遇到过这样的情况:某个价位挂单量很大,但order_count很小,说明是几个大单在撑着。这种位置往往有「护盘」或「压盘」的意图,突破起来阻力会很大。
| 字段 | 含义 | 高频交易中的用法 |
|---|---|---|
| price | 价格 | 判断关键价位、支撑阻力 |
| volume | 挂单量 | 计算买卖压力、流动性深度 |
| order_count | 挂单笔数 | 判断大单还是散户单 |
实战技巧:我一般会计算「平均每笔挂单量」= volume / order_count。如果这个值远大于市场平均水平,说明有大资金在活动。反之,如果order_count很大但volume一般,说明是散户在堆单,这种位置很容易被击穿。
逐笔成交 vs 逐笔委托
这两个概念,很多人搞混。我刚开始做量化时也犯过这个错——把逐笔成交当成逐笔委托来用,结果策略逻辑全错了。
说白了,区别就一句话:
- 逐笔成交:已经成交的订单记录。告诉你「谁买了谁卖了,多少钱成交的」
- 逐笔委托:挂单的记录。告诉你「谁想买谁想卖,挂了多少还没成交」
举个例子你就明白了:
假设你在10.00元挂了1000股买单。这时候有人以10.00元卖给你500股。那么:
- 逐笔委托里会记录:你挂了一笔买单,价格10.00,数量1000,状态是「部分成交」
- 逐笔成交里会记录:一笔成交,价格10.00,数量500,买方是你,卖方是那个人
为什么会这样?因为委托是「意图」,成交是「结果」。你挂单1000股,可能只成交了500股,剩下的500股还在那挂着呢。
避坑指南:我曾经在写盘口重构算法时,直接用逐笔成交数据去推算挂单变化,结果发现对不上。后来才意识到——逐笔成交只告诉你「成交了多少」,但挂单可能因为撤单而消失,这部分信息逐笔成交里是看不到的。必须结合逐笔委托数据才能完整还原盘口变化。
核心知识体系
下面这张图,是我自己总结的Level-2行情知识体系。你看一眼,就能明白这三块内容之间的关系:
三者之间的关系
搞清楚了各自是什么,接下来要明白它们怎么配合。我打个比方:
- 十档行情是「快照」——某一时刻的盘口状态
- 逐笔委托是「动作」——谁在挂单、谁在撤单
- 逐笔成交是「结果」——哪些委托成交了
三者结合起来,你就能还原出盘口的完整变化过程。这就是所谓的「盘口重构」。
举个例子:
你看到买一从10.00元突然消失了,挂单量从10000股变成0。这时候:
- 如果逐笔委托里有一条撤单记录,说明是有人撤单了
- 如果逐笔成交里有一笔10000股的成交,说明是被吃掉了
- 如果两者都没有,那可能是数据延迟或者系统bug
个人经验:我一般会先看逐笔成交,再看逐笔委托,最后用十档行情做校验。顺序很重要——成交是「事实」,委托是「意图」,快照是「状态」。用事实去验证意图和状态,逻辑上最可靠。
数据精度与时间戳
做高频交易,时间戳的精度直接决定了你的策略能不能跑。Level-2行情的时间戳通常是纳秒级的,但不同交易所的精度不一样。
我建议你拿到数据后,先做一件事:检查时间戳的单调性。我曾经遇到过某个数据源,时间戳居然有回退的情况——后面的数据时间戳比前面的还小。这种数据直接拿来用,策略逻辑全乱套。
| 数据维度 | 典型精度 | 高频交易要求 |
|---|---|---|
| 十档行情 | 毫秒级 | 至少微秒级 |
| 逐笔成交 | 微秒级 | 纳秒级最佳 |
| 逐笔委托 | 微秒级 | 纳秒级最佳 |
注意:不同数据源的时间戳可能来自不同的时钟源。如果你同时使用多个数据源,一定要做时钟同步校准。否则,你看到的「同时发生」的事件,可能实际上差了十几毫秒——这在高频交易里足够让一个策略从盈利变成亏损。
好了,盘口基础这块就讲到这里。记住一句话:数据是死的,但数据之间的关系是活的。Level-2行情给了你三块拼图,怎么把它们拼成完整的盘口画面,才是真正的功夫。