3. 行情快照数据结构:深度行情快照(Order Book Snapshot)的字段解析
做量化交易的朋友都知道,行情数据是咱们的“眼睛”。而深度行情快照,说白了就是交易所给你拍的一张“市场全家福”。这张照片里,买卖双方都在什么价位挂了多大的单子,一目了然。
我个人习惯把行情快照比作“战场态势图”。买盘是防守方,卖盘是进攻方。你只有看清了双方的兵力部署,才知道下一步该怎么走。今天咱们就来拆解一下,这张“态势图”里到底包含了哪些关键信息。
3.1 买卖盘口:市场的“城墙”与“护城河”
先看最核心的部分——买卖盘口。也就是我们常说的 Bid 和 Ask。
- 买盘(Bid):当前市场上,所有买家愿意出的最高价,以及对应的挂单量。
- 卖盘(Ask):当前市场上,所有卖家愿意接受的最低价,以及对应的挂单量。
这里有个细节,我刚开始做的时候也犯过迷糊。盘口数据通常不是只给一个价格,而是给一个“深度列表”。比如买一到买十,卖一到卖十。每一档都包含价格和数量。
关键字段:
bids[0].price:买一价,也就是最高买入价bids[0].size:买一量,这个价格上的挂单数量asks[0].price:卖一价,也就是最低卖出价asks[0].size:卖一量
为什么说这个重要?你想想看,买一和卖一之间的价差,就是“买卖价差”(Spread)。这个值越小,说明市场流动性越好。我在做高频策略时,如果发现某个品种的 Spread 突然拉大,第一反应就是——要么有大消息要出,要么就是流动性枯竭了。嗯,这时候得小心。
3.2 最新价:市场的“心跳”
最新价(Last Price),就是最近一笔成交的价格。它不像盘口数据那样反映“意愿”,而是反映“事实”。
但这里有个坑,我曾经踩过。最新价并不总是等于买一或卖一。为什么?因为成交可能发生在盘口中间,也可能因为大单扫货,直接吃掉了好几档。所以,最新价只能告诉你“刚才发生了什么”,不能告诉你“现在能成交什么”。
注意: 千万别用最新价去判断当前能否成交。判断能否成交,要看买一和卖一。这是很多新手容易搞混的地方。
3.3 成交量:市场的“体温”
成交量(Volume),通常指的是从当天开盘到当前时刻,累计成交的总数量。有些交易所也会提供“当日成交额”(Turnover)。
我个人习惯把成交量看作“体温”。成交量温和放大,说明市场在慢慢活跃。成交量突然爆量,那多半是有大资金进场或离场。我记得有一次做回测,发现某个策略在成交量低于某个阈值时,胜率会大幅下降。后来我加了一个成交量过滤条件,效果好了不少。
常见的成交量字段:
volume:累计成交量(股数或合约数)turnover:累计成交额(金额)trade_count:成交笔数(部分交易所提供)
3.4 完整的快照结构示例
下面是一个典型的深度行情快照 JSON 结构。我拿它来给大家做个拆解。
{
"symbol": "BTCUSDT",
"timestamp": 1696000000000,
"bids": [
{"price": 27000.00, "size": 1.5},
{"price": 26999.50, "size": 2.3},
{"price": 26999.00, "size": 0.8}
],
"asks": [
{"price": 27000.50, "size": 1.2},
{"price": 27001.00, "size": 3.1},
{"price": 27001.50, "size": 0.5}
],
"last_price": 27000.25,
"volume": 12500.0,
"turnover": 337500000.0
}
你看,这个结构很清晰。bids 数组按价格从高到低排列,asks 数组按价格从低到高排列。这样设计是有道理的——你取 bids[0] 就是买一,asks[0] 就是卖一,效率很高。
3.5 知识体系结构图
为了让你更直观地理解这些字段之间的关系,我画了一张图。
3.6 实战中的注意事项
讲完了理论,咱们聊聊实战。我总结了几点经验,希望能帮你少走弯路。
技巧: 处理快照数据时,一定要关注时间戳。不同交易所的时间戳精度不一样,有的到毫秒,有的到微秒。做高频策略时,时间戳对齐是个大问题。我建议统一转成纳秒级再比较。
另外,买卖盘口的数量级也要注意。有些交易所的 bids 和 asks 只给前 10 档,有些给 50 档,甚至全量。如果你做的是高频做市策略,全量盘口是必须的。但如果你只是做趋势跟踪,前 10 档基本够用了。
我曾经犯过一个错误:在回测时用了全量盘口数据,但实盘时交易所只给了 10 档。结果策略表现差异很大。后来我学乖了,回测和实盘的数据源必须保持一致。
3.7 字段汇总表
最后,我把这些核心字段整理成了一张表,方便你查阅。
| 字段 | 含义 | 典型值 | 注意事项 |
|---|---|---|---|
| bids[0].price | 买一价(最高买入价) | 27000.00 | 价格按降序排列 |
| bids[0].size | 买一量 | 1.5 | 单位可能是股或张 |
| asks[0].price | 卖一价(最低卖出价) | 27000.50 | 价格按升序排列 |
| asks[0].size | 卖一量 | 1.2 | 注意与买一量的对比 |
| last_price | 最新成交价 | 27000.25 | 不等于买一或卖一 |
| volume | 累计成交量 | 12500.0 | 从开盘累计至今 |
| turnover | 累计成交额 | 337500000.0 | 用于计算均价 |
好了,关于深度行情快照的字段解析,咱们就聊到这儿。记住,买卖盘口、最新价、成交量,这三者缺一不可。它们共同构成了市场的“快照”,是你做任何交易决策的基础。