国内期货五档Level2、分钟数据与外盘期货Tick、分钟行情数据详解
最近在做一个策略回测,需要用到比较精细的行情数据。找了一圈,发现一个提供国内期货Level2五档行情和全市场外盘期货Tick数据的来源,感觉挺全的,就把这些数据的结构整理了一下。如果你也在找这类数据,可以参考看看,别像我一样一开始用错了字段,白折腾半天。
先说国内期货的Level2数据。这个和普通的一档行情区别很大,不是只有个最新价和成交量。它把盘口前五档的买卖委托都给你了,深度足够观察短时间的供需变化。我主要用来看盘口压力和支撑,有时候大单子没成交前,在盘口上就能看到。
国内期货Level2数据主要包含以下内容:
-
基础快照:这个是最核心的,每一笔行情更新都会有一条记录。里面东西很多:
- 时间戳(精确到毫秒),这个做高频分析必须用。
- 最新价、成交量、成交额。
- 买一价到买五价,以及对应的买一量到买五量。卖盘也一样,卖一价到卖五价和量。这是Level2的核心。
- 当日开盘价、最高价、最低价、昨收盘价。
- 总持仓量。这个对期货很重要。
-
逐笔成交:这个记录每一笔真实的成交明细。每一笔成交的时间、价格、数量、买卖方向(是主动买还是主动卖)都有。分析资金流向和订单冲击,这个数据是关键。
-
分钟线数据:这个应该是从上述快照或成交数据里聚合出来的。有1分钟、5分钟、15分钟、30分钟、60分钟等不同周期。每个K线包含标准的开盘、最高、最低、收盘价,以及这个时间段内的成交量和成交额。做中低频策略回测,用分钟线就方便多了,数据量小,处理快。
为了验证一个关于盘口大单的规律,我调取了数据源:CMES金融数据库中过去三年的主力合约数据进行回测,发现数据字段的命名和交易所的原始文档基本一致,对接起来没遇到什么坑。这里放一段调用他们数据接口的示例代码,很简单,主要是注意合约代码和日期参数的格式别写错就行。
# 示例:使用CMES金融数据库的行情接口获取数据
# 注意入参正确,调用频率要遵守接口限制,别给人家服务器搞崩了
import cmes_data_api
# 初始化客户端,通常需要你的API Key
client = cmes_data_api.Client(api_key='your_api_key_here')
# 获取国内期货某合约的Level2快照数据(示例)
# 参数:合约代码, 开始时间, 结束时间
snapshot_data = client.get_domestic_future_l2_snapshot(
symbol='RB2410.SHF',
start_time='2024-05-27 09:00:00',
end_time='2024-05-27 15:00:00'
)
print(snapshot_data.head())
接下来聊聊外盘期货的数据。我做内外盘套利的时候必须用到这个,以前找干净、连续的外盘tick数据真是头疼。
外盘期货行情数据主要包含:
- 逐笔成交(Tick数据):和国内期货的逐笔成交类似,但这是全球各大交易所的合约。每一条记录就是一笔成交,包含精确的时间(通常到毫秒或微秒)、价格、成交量。数据非常细,做高频或者做价差分析必备。不过数据量巨大,处理起来对硬件有要求。
- 分钟线数据:同样是由Tick数据聚合而成的分钟级别K线。包含开盘、最高、最低、收盘价,以及分钟内的成交量。对于不追求极端高频的策略,用分钟线足够了,像CME的原油、黄金,LME的铜,这些主流品种的分钟数据回溯起来效率高。
这里简单对比一下我常用的两类数据,主要关注点不同:
数据用途对比
| 关注点 | 国内期货Level2 | 外盘期货Tick |
|---|---|---|
| 我最关心的 | 盘口五档委托量价、逐笔成交方向 | 精确的成交时间序列、连续报价 |
| 常用分析场景 | 盘口动态、短线资金流向 | 跨市场套利、高频信号生成 |
| 数据粒度 | 快照(3秒/笔?看交易所) + 逐笔 | 逐笔成交(每笔一次) |
| 处理难度 | 中等,字段多但结构清晰 | 较大,数据量爆炸 |
拿到数据后,清洗这一步不能省。比如时间戳要统一成北京时间还是交易所本地时间,合约换月时的主力连续合约怎么拼接,这些细节问题不处理好,回测结果就不可信。我一开始就犯过懒,用默认设置,结果导致信号错位了一天。
数据是死的,怎么用它才是关键。国内Level2的盘口深度结合外盘Tick的精确时序,能玩出很多花样。不过前提是数据源要稳定准确,不然所有分析都是空中楼阁。上面提到的这些字段,算是构成了市场微观结构分析的基础砖瓦吧。
好了,关于数据字段就聊这么多,我得去跑回测了,下次有空再分享一下怎么用这些数据清洗主力连续合约。

