一、快照数据结构:Level2数据的“身份证”

做量化交易的朋友都知道,Level2数据是高频交易的“血液”。而快照数据,就是这血液里最核心的成分。说白了,快照就是交易所每隔几毫秒给市场拍的一张“照片”——记录了那一刻所有订单簿的状态。

我个人习惯把快照数据比作“市场的心跳”。每次心跳,都告诉你当前谁在买、谁在卖、成交了多少。嗯,咱们今天就把它彻底拆开看看。

1.1 沪深交易所的快照长什么样?

先看一个最简化的快照结构。我当年刚接触Level2时,看到这个结构差点晕过去——字段太多了。但后来发现,核心字段其实就那么几个。

// 上证Level2快照核心结构(简化版)
struct Snapshot {
    uint64  timestamp;      // 时间戳,精确到微秒
    string  securityID;     // 证券代码
    uint64  preClosePrice;  // 昨收价
    uint64  openPrice;      // 今日开盘价
    uint64  highPrice;      // 最高价
    uint64  lowPrice;       // 最低价
    uint64  lastPrice;      // 最新价
    uint64  volume;         // 成交量(股)
    uint64  amount;         // 成交额(元)
    uint64  totalBidVol;    // 委买总量
    uint64  totalAskVol;    // 委卖总量
    uint64  weightedBid;    // 委买加权均价
    uint64  weightedAsk;    // 委卖加权均价
    uint64  bidPrice[10];   // 买一到买十价格
    uint64  bidVolume[10];  // 买一到买十数量
    uint64  askPrice[10];   // 卖一到卖十价格
    uint64  askVolume[10];  // 卖一到卖十数量
};

你可能会问:为什么价格都用 uint64?因为交易所为了精度,把价格乘以了10000(深交所)或1000(上交所)来存储。这个坑我踩过——直接拿uint64当价格用,算出来的盈亏能让你怀疑人生。

⚠️ 注意:上交所价格因子是1000(3位小数),深交所是10000(4位小数)。处理跨市场数据时,一定要做归一化!

1.2 核心字段详解:这些数字在说什么?

咱们挑几个最关键的字段,说说它们背后的门道。

最新价(lastPrice)

这个字段看似简单,但有个细节:它是当前时刻最后一笔成交的价格,不是当前时刻的“实时价格”。我在做回测时发现,直接用最新价作为“当前价格”会导致严重的未来函数问题。你想想看,最新价是已经成交的价格,而你的策略是在成交之前就要做出判断的。

成交量(volume)与成交额(amount)

这两个是累计值——从开盘到当前时刻的总成交量和总成交额。不是当笔成交量!我见过不少新手拿这个字段做“瞬时成交量”分析,结果发现曲线永远单调递增,还以为发现了什么神奇规律。

要算瞬时成交量,你得用当前快照的volume减去上一个快照的volume。这个差值才是这段时间内的成交活跃度。

委买委卖(bid/ask)

这里有个容易忽略的点:委买总量(totalBidVol)是所有买单的挂单量之和,但它是“档位总量”。什么意思?就是买一到买十的挂单量加起来。但有些交易所的Level2数据只提供前10档,后面的挂单你是看不到的。

我曾经在实盘中吃过这个亏——看着委买量很大,以为买盘强劲,结果大单直接砸穿买一到买十,后面还有无穷无尽的卖单。嗯,这就是“冰山订单”的威力。

1.3 数据频率与时间戳:快照到底有多“快”?

沪深交易所的快照频率是不一样的。我整理了一个表格,方便你对比:

交易所 快照频率 时间戳精度 备注
上海证券交易所 约3秒/次 微秒(μs) 盘中连续撮合阶段
深圳证券交易所 约3秒/次 微秒(μs) 与上证基本一致
集合竞价阶段 约1秒/次 微秒(μs) 开盘/收盘集合竞价

你可能会问:3秒一次,这算高频吗?说实话,对于日频策略来说,3秒一次已经非常快了。但对于真正的T+0高频策略,3秒的间隔里可能已经发生了上百笔交易。所以,快照数据更适合做“状态分析”,而不是“逐笔分析”。

时间戳这块有个坑:交易所给的时间戳是“快照生成时间”,不是“数据到达时间”。网络传输会有延迟,如果你用本地时间戳去对齐数据,会出现偏差。我的做法是:始终使用交易所时间戳,本地只做接收时间的记录,用于监控延迟。

💡 核心要点:快照数据是“切片”,不是“流水”。它告诉你某个时刻的市场状态,但不告诉你状态之间发生了什么。要补全中间过程,需要结合逐笔成交数据。

1.4 知识体系总览

下面这张图,是我自己画的知识结构。它把快照数据的核心要素串在了一起。你看完这张图,应该能对本章内容有个整体把握。

Level2快照数据结构 核心字段 最新价、成交量、成交额 委买委卖(10档) 最高价、最低价、开盘价 数据频率 上证:约3秒/次 深证:约3秒/次 集合竞价:约1秒/次 时间戳 精度:微秒(μs) 交易所生成时间 vs 本地接收时间 常见陷阱与避坑指南 价格因子:上证1000 vs 深证10000 成交量是累计值,非瞬时值 委买委卖仅展示前10档,冰山订单不可见
💡 个人小技巧:刚开始研究快照数据时,建议先只关注5个字段——最新价、成交量、委买总量、委卖总量、时间戳。把这5个字段的逻辑搞透,再扩展到其他字段。一口吃不成胖子,做量化更是如此。

好了,快照数据结构这块就聊到这儿。记住一句话:快照是市场的“照片”,不是“录像”。你要学会从一张张照片里,读出市场的情绪和动向。下一章咱们聊聊怎么高效地解析和存储这些快照数据——毕竟,光看懂还不够,得能处理才行。


公众号:蓝海资料掘金营,微信deep3321