第三章:基差数据获取——交易所接口、第三方源、清洗对齐与频率选择
做基差交易,数据就是你的眼睛。眼睛要是花了,再好的策略也白搭。
我刚开始做基差策略那会儿,吃过不少数据上的亏。有一次,因为交易所的结算价和第三方数据源差了2个tick,导致整个回测结果完全偏离。嗯,从那以后,我对数据获取这块就格外较真。
今天咱们就聊聊,怎么把基差数据这个「源头活水」给整明白。
一、交易所数据接口:最权威,但最折腾
说白了,交易所的数据是最干净的。但想拿到手,你得先过几道坎。
- CTP接口(上期所、郑商所、大商所):国内期货最主流的接口。我建议你直接用穿透式监管版本,虽然认证麻烦点,但数据稳定。
- 中金所接口:股指期货和国债期货的娘家。接口协议和CTP略有不同,注意看文档里的「基差计算字段」——他们给的结算价是收盘前最后30秒的加权平均。
- 能源中心(INE):原油、20号胶这些品种。接口和CTP基本一致,但要注意夜盘时间。
我的经验:交易所接口拿到的数据,一定要做「Tick级校验」。我曾经发现上期所的某个品种,在收盘前最后一笔tick的成交价和结算价差了0.5%,后来发现是接口文档里有个字段含义理解错了。
二、第三方数据源:省心,但要留个心眼
如果你不想自己折腾交易所接口,第三方数据源是个好选择。但记住——天下没有免费的午餐。
| 数据源 | 优点 | 缺点 | 我常用的场景 |
|---|---|---|---|
| Wind | 字段全,历史数据长 | 贵,接口调用有频率限制 | 回测时拉取5年历史基差 |
| 聚宽/米筐 | Python友好,有现成的基差计算函数 | 实时数据延迟约1-3秒 | 策略原型验证 |
| 天软 | 数据清洗做得好 | 学习曲线陡 | 生产环境的数据校验 |
| 自建爬虫 | 完全可控 | 维护成本高,容易被封 | 小众品种的补充数据 |
避坑指南:我曾经用某第三方数据源做回测,发现基差序列在2018年10月有个诡异的跳变。后来一查,是对方把「收盘价」和「结算价」搞混了。所以,拿到数据后,一定要先画个图看看——肉眼扫一遍,比任何统计检验都管用。
三、数据清洗与对齐:90%的时间花在这里
数据清洗这事儿,说白了就是「去伪存真」。我见过太多人,策略写得漂亮,但数据没洗干净,结果全白干。
清洗的四个关键步骤:
- 去重:同一个tick时间戳出现两次?保留第一条,删除重复。
- 异常值处理:基差突然从-50跳到+500?先标记,再判断是数据错误还是市场异动。
- 缺失值填充:夜盘中间有5分钟没数据?用前向填充,别用插值——期货市场的信息传递不是线性的。
- 时间对齐:这是最头疼的。不同交易所的tick时间戳精度不一样,有的精确到毫秒,有的只到秒。
注意:对齐时,千万别用「就近匹配」。我吃过这个亏——把上期所的tick和郑商所的tick按「最接近的时间」匹配,结果基差序列里出现了大量「未来数据」。正确的做法是:统一用「上一笔tick」的时间戳作为对齐基准。
下面是我常用的对齐代码片段:
# 伪代码:tick级基差对齐
def align_basis(tick_df_spot, tick_df_future):
# 1. 统一时间戳精度到毫秒
tick_df_spot['time_ms'] = tick_df_spot['time'].dt.floor('ms')
tick_df_future['time_ms'] = tick_df_future['time'].dt.floor('ms')
# 2. 用merge_asof做前向匹配
aligned = pd.merge_asof(
tick_df_spot.sort_values('time_ms'),
tick_df_future.sort_values('time_ms'),
on='time_ms',
direction='forward' # 关键:用前向,不用最近
)
# 3. 计算基差
aligned['basis'] = aligned['spot_price'] - aligned['future_price']
return aligned
四、数据频率选择:不是越快越好
很多人一上来就搞tick级基差,觉得频率越高越赚钱。其实不然。
不同频率的适用场景:
- Tick级(逐笔):适合高频套利,但噪声极大。我一般只用来做「事件驱动」的基差交易,比如某个品种突然放量时。
- 1分钟/5分钟:我最常用的频率。既能捕捉到日内基差的波动,又不会太吵。做均值回归策略时,这个频率刚刚好。
- 日线:适合做趋势跟踪或跨期套利。但要注意——日线基差用的是收盘价还是结算价?这两个差别很大。
我的建议:刚开始做基差策略,先从「5分钟频率」入手。等你对品种的基差特性熟悉了,再慢慢往高频或低频扩展。别一上来就搞tick级,否则你会被数据噪声折磨到怀疑人生。
五、知识体系总览
下面这张图,是我自己整理的数据获取全流程。你照着这个框架走,基本不会漏掉关键环节。
你看,整个流程其实就四步:拿到数据 → 洗干净 → 选频率 → 输出基差。每一步都有坑,但只要你按这个框架走,至少能避开80%的常见问题。
最后说一句:数据获取这件事,没有「最好」的方案,只有「最适合你策略」的方案。我见过有人用tick级数据做日频策略,也见过有人用日线数据做高频——结果嘛,可想而知。搞清楚你的策略需要什么频率的数据,比纠结用哪个数据源重要得多。
公众号:蓝海资料掘金营,微信deep3321