外盘期货高频行情数据里到底有什么?
最近在研究几个外盘期货品种的策略,发现数据源是个大问题。国内的数据好找,但LME的铜、CME的标普500、EUREX的国债期货这些,想要拿到干净、完整的历史高频数据,尤其是逐笔数据(Tick),还真不容易。找了一圈,最后在一个数据源叫“CMES金融数据库”的地方找到了比较全的。今天不聊策略,就单纯聊聊这些数据文件里到底装了些什么东西,给同样在找数据的朋友一个参考。
数据来源和交易所
这些数据覆盖了全球主要的期货交易所,基本上做外盘会碰到的都包括了:
| 交易所简称 | 全称 | 我们熟悉的品种举例 |
|---|---|---|
| CME | 芝加哥商业交易所 | 标普500指数期货(ES)、欧元外汇期货(6E) |
| CBOT | 芝加哥期货交易所(现属CME集团) | 美国国债期货(ZB, ZN)、大豆期货(ZS) |
| NYMEX | 纽约商业交易所(现属CME集团) | WTI原油期货(CL)、天然气期货(NG) |
| COMEX | 纽约商品交易所(现属CME集团) | 黄金期货(GC)、铜期货(HG) |
| ICE | 洲际交易所 | 布伦特原油期货(B)、白糖期货(SB) |
| EUREX | 欧洲期货交易所 | 欧元斯托克50指数期货(FESX)、德国国债期货(FGBL) |
| LME | 伦敦金属交易所 | 铜、铝、锌等基础金属期货 |
| HKEX | 香港交易所 | 恒生指数期货(HSI)、H股指数期货(HHI) |
| SGX | 新加坡交易所 | 富时中国A50指数期货 |
| JPX | 日本交易所集团 | 日经225指数期货(NK) |
有一点要注意,不同交易所的数据颗粒度可能不一样。比如LME的数据结构就和CME的有点区别,下载的时候得留意一下文件说明。
数据级别:Tick vs. 分钟
主要提供两种时间维度的数据:逐笔成交(Tick)和分钟线(1分钟、5分钟等)。这两者的区别和用途天差地别。
逐笔成交数据(Tick Data):
这是最细颗粒度的数据,记录每一笔成交的详细信息。它的核心价值在于能还原市场的真实交易行为,比如计算实际买卖价差、分析大单冲击、做高频回测或者订单簿重建(如果有Level 2数据的话)。文件会很大,一个活跃合约一天的数据可能就有几十甚至上百MB。
分钟级别行情数据:
这个就常见多了,就是把每分钟的开、高、低、收、成交量等信息汇总成一根K线。做中低频策略回测、技术分析基本用这个就够了,处理起来也轻便。数据库里通常有1分钟、5分钟、15分钟、60分钟等不同周期的数据可选。
我个人的经验是,如果只是初步验证想法,先用分钟数据。等逻辑跑通了,想优化滑点或者测试更敏感的信号,再上Tick数据。上次为了验证一个关于开盘跳空的规律,我调取了CMES金融数据库中过去三年的主力合约分钟数据进行回测,速度就快很多。
数据字段详解
这是最干的部分,我们直接看数据文件里每一列代表什么。以最常见的格式CSV为例:
1. 分钟线数据字段
分钟线数据的字段通常比较规整,一目了然。
| 字段名 | 含义 | 备注 |
|---|---|---|
date |
日期 | 格式通常是YYYYMMDD |
time |
时间 | 格式HH:MM:SS,指这一分钟的开始时间 |
open |
开盘价 | 这一分钟内的第一笔成交价 |
high |
最高价 | 这一分钟内的最高成交价 |
low |
最低价 | 这一分钟内的最低成交价 |
close |
收盘价 | 这一分钟内的最后一笔成交价 |
volume |
成交量 | 这一分钟内的总成交手数(注意合约乘数) |
open_interest |
持仓量 | 这一分钟结束时的未平仓合约数,不是所有数据源都提供 |
2. 逐笔成交数据字段
Tick数据的字段就丰富多了,信息量也大。下面这些字段是核心,但并不是每个交易所的Tick数据都包含全部,比如有的可能没有TradeID。
| 字段名 | 含义 | 为什么重要 |
|---|---|---|
timestamp |
时间戳 | 精确到毫秒或微秒,是分析的基础 |
price |
成交价格 | 这笔交易的实际成交价 |
size |
成交数量 | 这笔交易的手数或张数 |
trade_id |
成交ID | 交易所为每笔成交生成的唯一标识,用于去重和跟踪 |
side |
交易方向 | 标明是主动买还是主动卖(如果有的话)。这个字段特别有用,但也不是所有数据都有。 |
exchange |
交易所代码 | 标识数据来源的交易所 |
这里插一句,关于side(买卖方向)的判断,不同交易所的规则可能不同。有的数据源会直接给出,有的需要自己用“逐笔对比法”去推断(比较当前成交价和上一笔的买一卖一),处理数据的时候得小心这个坑。
获取和处理数据的一点代码
他们提供了一个Python接口来下载数据,比手动去网站点方便不少。安装和简单调用大概是这样的:
# 安装数据获取的客户端库
# pip install cmesdata
import cmesdata as cdc
from datetime import date
# 初始化客户端,这里需要替换成你自己的API密钥
client = cdc.Client(api_key='your_api_key_here')
# 示例:下载CME交易所,标的为ES(标普500迷你期货),2023年10月1日的逐笔数据
# 注意参数:交易所代码、品种代码、日期、数据类型(tick或minute)
try:
tick_data = client.get_futures_data(
exchange='CME',
symbol='ES',
trading_date=date(2023, 10, 1),
data_type='tick' # 换成 'minute' 就是下载分钟数据
)
print(f"数据下载成功,共 {len(tick_data)} 行。")
# 数据通常是Pandas DataFrame,可以直接处理
print(tick_data.head())
except Exception as e:
print(f"数据下载失败: {e}")
# 常见错误:API密钥不对、日期非交易日、参数拼写错误
用代码下数据主要注意两点:一是入参要正确,特别是交易所和品种的代码,得严格按照文档来;二是调用频率,免费接口通常有频率限制,别写个死循环一直调,会被封。
最后的一些零散提醒
- 数据清洁:拿到数据第一件事是检查有没有异常值(比如价格突然为0)、重复的
trade_id,以及时间戳是否乱序。这些脏数据会严重影响回测结果。 - 时区问题:数据的时间戳通常是交易所本地时间(如CME是芝加哥时间)。做跨市场分析时,一定要统一转换成UTC或自己所在的时区。
- 合约换月:期货有到期日,处理历史数据时要留意主力合约的切换点,不然回测曲线会有诡异的跳空。
- 文件格式:除了CSV,可能还有Parquet等格式,Parquet文件更小,读取更快,适合大数据量处理。
大概就是这些内容。数据本身是冰冷的,但怎么用它取决于你的策略和想法。希望这篇对字段和内容的梳理能帮你节省一些摸索的时间。

