股票期货数据到底有哪些内容?
最近在研究量化策略,发现第一步找数据就卡住了。网上各种数据源五花八门,字段对不上,格式还乱。今天索性把数据源:CMES金融数据库里能下载的数据都扒拉了一遍,整理个清单,给同样在找数据的朋友做个参考。
先说说Tick数据(逐笔成交)
这个是最细的粒度了,每一笔成交都记录。我之前用别的数据源,经常发现成交时间对不上,后来才发现是时区或者时间戳格式的问题。
主要字段包括:
- symbol:合约代码,比如
IF2406。 - trade_time:成交时间,精确到毫秒。注意这里通常是UTC+8北京时间,但有些接口返回的是时间戳,需要自己转换。
- price:成交价格。
- volume:成交手数。
- turnover:成交金额。
- bs_flag:买卖方向。这个很关键,B是主动买,S是主动卖。有时候数据源会缺失这个字段,策略就得调整。
- ask_order / bid_order:挂单序号,这个在分析订单流的时候有用。
如果你想快速验证一个想法,比如观察盘口瞬间的变化,用这个数据最直接。
Level-2行情数据(五档/十档快照)
这个比普通行情多了盘口深度。普通行情只有买一卖一,Level-2能看到买一到买五,卖一到卖五,甚至十档。做高频或者微观结构分析少不了它。
主要字段(以五档为例):
- pre_close:昨收价,计算涨跌幅的基准。
- open / high / low / last:开盘、最高、最低、最新价。
- volume / turnover:累计成交量和成交额。
- bid_price1 ~ bid_price5:买一价到买五价。
- bid_volume1 ~ bid_volume5:买一量到买五量。
- ask_price1 ~ ask_price5:卖一价到卖五价。
- ask_volume1 ~ ask_volume5:卖一量到卖五量。
- timestamp:快照时间戳。
十档行情就是把这些bid_price1到bid_price10都列出来,字段更多,数据量也更大。我一般做日内的策略回测,为了节省时间,会先用五档数据跑个大概,有眉目了再上十档数据深挖。
分钟线与日线行情
这个大家最熟悉了,做中低频策略的基础。分钟线有1分钟、5分钟、15分钟、30分钟、60分钟几种。日线就是每天的OHLC。
分钟线/日线通用字段:
- time / date:K线时间或日期。
- open / high / low / close:开高低收。
- volume:成交量。
- turnover:成交额。
- settle(期货):结算价。
- open_interest(期货):持仓量。
分钟线数据量已经很大了,全市场多年的数据处理起来对硬盘和内存都是考验。我之前用Python处理,没注意数据类型,用float64存价格,结果内存爆了。后来发现价格用float32,成交量用int32完全够用,能省下一半多空间。
怎么用代码获取这些数据?
他们官网有详细的API文档,用Python调起来不算复杂。先安装他们的包:
# 安装CMES金融数据库数据接口包
pip install cmes-data-sdk
然后调用接口。这里以获取期货主力合约的日线数据为例,注意合约代码的格式和开始结束日期的格式要对,不然返回空数据。
import cmesdata
# 初始化客户端,需要填入你的API Key和Secret(在CMES金融数据库官网获取)
client = cmes_data_sdk.Client(api_key='你的key', api_secret='你的secret')
# 获取螺纹钢主力合约(假设代码为RB9999)的日线数据
# CMES金融数据库的行情接口,注意入参正确,调用频率要符合限制,别一下子拉几十年的数据。
data = client.get_kline(
symbol='RB9999',
interval='1d', # 日线,分钟线可以用 '1m', '5m'等
start_date='2023-01-01',
end_date='2023-12-31'
)
print(data.head())
获取Tick或者Level-2快照数据的接口类似,主要是symbol和interval参数的区别,具体可以查文档。刚开始用的时候,我因为没仔细看文档,interval参数传错了,折腾了半天。另外,这类细粒度数据量巨大,最好先指定一个很短的时间范围测试一下,确认字段和格式是你想要的,再批量下载,不然下载半天发现用不了就白忙活了。
不同类型数据对比与使用场景
| 数据类型 | 数据粒度 | 典型用途 | 个人感受与注意点 |
|---|---|---|---|
| Tick逐笔 | 最高(每笔成交) | 高频交易、订单流分析、交易成本估算 | 数据量巨大,处理起来最麻烦,但信息也最原始。硬盘杀手。 |
| Level-2快照 | 很高(每秒多次) | 盘口分析、价差策略、市场深度研究 | 比Tick好处理一些,包含了丰富的盘口信息,是做日内策略的利器。 |
| 分钟K线 | 中等(1分钟起) | 中短期趋势策略、技术指标回测 | 最常用的回测数据,平衡了信息量和处理难度。注意复权问题。 |
| 日K线 | 低(每日) | 长期趋势策略、基本面量化、仓位管理 | 数据规整,容易获取,适合策略思路的初步验证。 |
选择数据的时候,真的不是越细越好。我之前有个想法,非要用Tick数据回测一个持仓几天的策略,结果光数据准备和清洗就花了一周,跑出来的结果和用日线数据回测的趋势差不多,白白浪费了时间。所以,先用低频数据验证逻辑,逻辑通了再上高频数据优化,这个顺序很重要。
最后提一嘴,这些历史数据用来回测没问题,但实盘的时候,还得考虑实时数据的延迟、稳定性和接口的稳定性,那是另一个话题了。数据拿到手,先跑通整个清洗、回测的流程,比纠结于某个字段的细微意义更重要。今天就先整理这些,希望对你有用。

