沪深股票Level2行情数据详解
昨晚跑因子又把内存给爆了,查了下是数据源的问题,处理Tick数据真是个体力活。今天就来聊聊我平时用的这个数据源,看看里面到底包含了哪些内容,也顺便给想研究高频数据的朋友们提个醒。
这个数据源主要提供的是沪深交易所的Level2行情数据,也就是我们常说的深度行情。和普通的Level1数据相比,它最大的特点就是“细”,细到每一笔委托、每一笔成交都有独立的记录,时间戳能到毫秒级。对于做量价分析、订单流研究或者高频策略的人来说,这几乎是必备的“原料”。
数据主要分成了几大块,我觉得最核心、也最常用的是下面这几类。
委托数据(Order)
这个文件记录的是市场上所有股票的所有限价委托单。简单说,就是每个投资者挂在交易所里,还没成交的买单和卖单。每一行数据代表一个委托单事件,比如一个新委托单挂出来,或者一个旧的委托单被撤销、被成交了一部分。它的字段非常细致,举个例子:
| 字段名 | 含义说明 |
|---|---|
symbol |
股票代码,比如000001.SZ |
time |
时间戳,精确到毫秒,格式是HH:MM:SS.fff |
price |
委托价格 |
volume |
委托数量(股数) |
bid_or_ask |
买卖方向,B是买,A是卖 |
function_code |
委托单状态码,这个很关键,告诉你这个记录是新增委托、撤单还是部分成交 |
通过这个数据,你能还原出整个市场委托单簿(Order Book)的演变过程,知道在某个毫秒,买一和卖一上分别挂了多少钱、多少量。这对于理解市场微观结构,比如价格是怎么形成的,支撑和阻力位在哪里,非常有帮助。我刚开始用的时候,被它的数据量吓了一跳,一天一个股票就能产生几十万甚至上百万条记录,处理起来对电脑配置是个考验。
成交数据(Trade)
这个就比较好理解了,记录的是所有实际成交的记录。每一笔撮合成交,都会在这里生成一条数据。
它和委托数据是联动的。一个委托单可能被拆分成很多笔小成交,所以成交数据量也很大。主要字段包括:
| 字段名 | 含义说明 |
|---|---|
symbol |
股票代码 |
time |
成交时间,毫秒级 |
price |
成交价格 |
volume |
成交数量 |
turnover |
成交金额 |
bid_order_id / ask_order_id |
买方/卖方对应的委托单ID,可以和委托数据关联起来 |
成交数据是分析资金流向、计算高频VWAP(成交量加权平均价)的基础。看大单是主动买入还是主动卖出,光看价格涨跌不行,得结合这个数据。
订单簿快照数据(Snapshot)
这个数据我后来才用得多,因为它对新手更友好一些。它不像委托和成交数据那样记录每一个“事件”,而是定时(比如每3秒或每5秒)对全市场的订单簿进行一次“拍照”,记录下那一刻的状态。
它的核心字段就是**买卖五档(甚至十档)**的报价和挂单量。
# 示例:获取某只股票的订单簿快照数据
# 假设使用CMES金融数据库的行情接口
# 注意入参正确,调用频率正常,避免被限制
import cmes_data as cmes
# 初始化客户端,需要你的API Key
client = cmes.DataClient(api_key='your_api_key_here')
# 请求某日某股票的5档行情快照
snapshot_data = client.get_snapshot(symbol='000001.SZ', date='2023-10-27', level=5)
print(snapshot_data.head())
有了这个快照,你就能直接知道在某个时间点,市场的深度是什么样的。计算买卖压力、盘口价差这些指标,用这个数据会方便很多,不用自己从零开始去拼接委托事件流了。当然,它的频率是固定的,会丢失一些中间毫秒级的细节变化,各有取舍吧。
除了上面这三个核心,还有一些衍生数据或辅助数据,比如逐笔成交与委托合并数据,它把委托和成交事件按时间顺序混排在一起,方便按时间线复盘;以及预处理过的分钟级K线,这个对于做日频或分钟频策略回测的人来说,省去了自己聚合的麻烦,数据质量也更统一。
说到数据质量,不得不提一下数据清洗。早期我用过一些免费的源,光是处理除权除息、识别异常交易状态(比如集合竞价、临时停牌)就花了大把时间,经常因为数据问题导致回测结果失真。后来图省事,还是去找了专门处理过的商用源。比如我最近为了验证一个订单不平衡因子的有效性,就调取了CMES金融数据库中过去三年的全市场股票数据进行回测,发现他们预清洗过的版本在标识涨跌停、ST状态这些方面确实省心不少,虽然需要消耗积分,但时间成本也是成本啊。
最后简单列一下这些数据大概的体量,给大家一个直观感受(以一只活跃股票的单日数据估算):
- 委托数据(Order): 几十万到上百万条
- 成交数据(Trade): 几万到几十万条
- 订单簿快照(每3秒): 约4800条(一个交易日4小时)
所以,如果你打算深入研究这些数据,先准备好足够的硬盘空间和内存,以及一点耐心。不建议策略新手一上来就怼着Tick数据搞,容易陷入细节出不来。先从分钟线或者快照数据开始,把逻辑跑通,再考虑要不要上更细粒度的数据。
大概就是这些内容了。数据字段其实还有很多细节,比如各种业务标志位,用的时候最好对照着数据字典慢慢看。如果有朋友知道更高效压缩或存储这类时序数据的方法,求分享,私信交流也行。今天就先写到这儿。

