一、盘口数据基础:Level-2行情数据介绍
做量化交易这些年,我接触过不少行情数据。说实话,最让我头疼的,就是盘口数据的清洗。
为什么?因为盘口数据太「脏」了。你想想看,交易所每秒都在推送海量数据,网络延迟、撮合引擎的抖动、甚至交易所自身的bug,都会让数据出现各种异常。
但盘口数据又是做市策略的命根子。没有干净的盘口数据,你的策略就是瞎子摸象。
所以,这一章我们先打好基础。把Level-2行情、Tick与Snapshot的区别、以及五档十档的数据结构,彻底搞清楚。
1.1 什么是Level-2行情?
Level-2行情,也叫「深度行情」。它比普通行情(Level-1)多出不少信息。
我简单列一下区别:
| 对比项 | Level-1(普通行情) | Level-2(深度行情) |
|---|---|---|
| 快照频率 | 约3秒一次 | 约3秒一次(但包含更多信息) |
| 委托队列 | 仅最优买卖各一档 | 最优买卖各十档(甚至全量) |
| 逐笔成交 | 无 | 有(每笔成交的详细信息) |
| 委托明细 | 无 | 有(前50档委托的逐笔明细) |
说白了,Level-2就是给了你一个「显微镜」。你能看到市场更深处的博弈。
我个人习惯,做做市策略时,至少要用Level-2数据。Level-1的数据太粗糙,很多微观结构特征根本算不出来。
1.2 Tick数据 vs Snapshot数据
这里有个常见的坑,我刚开始做的时候也踩过。
Tick数据,是每一笔成交的记录。它告诉你:什么时间、什么价格、成交了多少股、是主动买还是主动卖。
Snapshot数据,是某个时间点的「快照」。它告诉你:此时此刻,买一到买十各有多少挂单,卖一到卖十各有多少挂单。
两者的区别,我用一个比喻来解释:
- Tick数据就像「流水账」——每一笔交易都记下来。
- Snapshot数据就像「照片」——每隔几秒拍一张市场的状态。
嗯,这里要注意:Tick数据是事件驱动的,有成交才会产生。Snapshot数据是时间驱动的,每隔固定时间(比如3秒)推送一次。
我在项目中遇到过一个问题:有人把Tick数据当成Snapshot来用,结果算出来的买卖压力指标完全不对。为什么?因为Tick数据只包含成交的部分,而Snapshot包含了所有挂单。两者反映的信息维度完全不同。
1.3 盘口五档与十档数据结构
国内A股市场,Level-2行情提供的是十档盘口。但很多做市策略,其实只用到五档就够了。
为什么?因为越往后的档位,挂单量越稀疏,噪声也越大。我个人习惯,核心特征只用前五档,后五档作为辅助参考。
来看一个典型的十档数据结构:
{
"timestamp": "2024-01-15 09:30:00.123",
"symbol": "600519",
"bid_prices": [1850.00, 1849.80, 1849.60, 1849.40, 1849.20, 1849.00, 1848.80, 1848.60, 1848.40, 1848.20],
"bid_volumes": [100, 200, 150, 80, 60, 40, 30, 20, 10, 5],
"ask_prices": [1850.20, 1850.40, 1850.60, 1850.80, 1851.00, 1851.20, 1851.40, 1851.60, 1851.80, 1852.00],
"ask_volumes": [80, 120, 100, 70, 50, 30, 20, 15, 10, 5]
}
这个结构看起来简单,但清洗的时候要注意几个点:
我曾经因为没处理「零挂单」的问题,导致策略在开盘瞬间疯狂报单。有些档位的挂单量可能是0,但价格字段不能为空。清洗时一定要做填充或剔除。
另外,价格和数量要严格对齐。bid_prices[0]对应bid_volumes[0],这是买一的价格和数量。千万别搞反了。
1.4 核心知识体系
我把这一章的核心逻辑画成了图,方便你理解:
💡 核心要点:
- Level-2行情是做市策略的「原材料」,质量决定策略上限
- Tick数据看「成交行为」,Snapshot数据看「挂单意愿」
- 五档盘口用于核心特征,十档盘口用于辅助判断
- 数据清洗时,重点关注零挂单、价格异常、时间戳对齐
🔧 实战小技巧:
我建议你在拿到原始数据后,先做一次「完整性检查」。比如,检查每个时间戳下,买一到买十的价格是否严格递减,卖一到卖十的价格是否严格递增。如果出现价格倒挂,那数据大概率有问题。
好了,这一章的内容就到这里。盘口数据的基础,说白了就是搞清楚「数据从哪里来、长什么样、怎么用」。下一章我们会深入数据清洗的具体方法,到时候我会分享一些我踩过的坑和总结的技巧。