盘口基础: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行情知识体系。你看一眼,就能明白这三块内容之间的关系:

Level-2行情知识体系 Level-2 行情数据 买卖十档行情 逐笔成交 逐笔委托 十档行情关键字段 • price(价格) • volume(挂单量) • order_count(挂单笔数) 逐笔成交关键字段 • trade_price(成交价) • trade_volume(成交量) • buy/sell_flag(买卖方向) 逐笔委托关键字段 • order_price(委托价) • order_volume(委托量) • order_status(委托状态) 应用:盘口重构 → 订单流分析 → 高频策略

三者之间的关系

搞清楚了各自是什么,接下来要明白它们怎么配合。我打个比方:

  • 十档行情是「快照」——某一时刻的盘口状态
  • 逐笔委托是「动作」——谁在挂单、谁在撤单
  • 逐笔成交是「结果」——哪些委托成交了

三者结合起来,你就能还原出盘口的完整变化过程。这就是所谓的「盘口重构」。

举个例子:

你看到买一从10.00元突然消失了,挂单量从10000股变成0。这时候:

  • 如果逐笔委托里有一条撤单记录,说明是有人撤单了
  • 如果逐笔成交里有一笔10000股的成交,说明是被吃掉了
  • 如果两者都没有,那可能是数据延迟或者系统bug

个人经验:我一般会先看逐笔成交,再看逐笔委托,最后用十档行情做校验。顺序很重要——成交是「事实」,委托是「意图」,快照是「状态」。用事实去验证意图和状态,逻辑上最可靠。

数据精度与时间戳

做高频交易,时间戳的精度直接决定了你的策略能不能跑。Level-2行情的时间戳通常是纳秒级的,但不同交易所的精度不一样。

我建议你拿到数据后,先做一件事:检查时间戳的单调性。我曾经遇到过某个数据源,时间戳居然有回退的情况——后面的数据时间戳比前面的还小。这种数据直接拿来用,策略逻辑全乱套。

数据维度 典型精度 高频交易要求
十档行情 毫秒级 至少微秒级
逐笔成交 微秒级 纳秒级最佳
逐笔委托 微秒级 纳秒级最佳

注意:不同数据源的时间戳可能来自不同的时钟源。如果你同时使用多个数据源,一定要做时钟同步校准。否则,你看到的「同时发生」的事件,可能实际上差了十几毫秒——这在高频交易里足够让一个策略从盈利变成亏损。

好了,盘口基础这块就讲到这里。记住一句话:数据是死的,但数据之间的关系是活的。Level-2行情给了你三块拼图,怎么把它们拼成完整的盘口画面,才是真正的功夫。


专注资料整理