第三章:基差数据获取——交易所接口、第三方源、清洗对齐与频率选择

做基差交易,数据就是你的眼睛。眼睛要是花了,再好的策略也白搭。

我刚开始做基差策略那会儿,吃过不少数据上的亏。有一次,因为交易所的结算价和第三方数据源差了2个tick,导致整个回测结果完全偏离。嗯,从那以后,我对数据获取这块就格外较真。

今天咱们就聊聊,怎么把基差数据这个「源头活水」给整明白。

一、交易所数据接口:最权威,但最折腾

说白了,交易所的数据是最干净的。但想拿到手,你得先过几道坎。

  • CTP接口(上期所、郑商所、大商所):国内期货最主流的接口。我建议你直接用穿透式监管版本,虽然认证麻烦点,但数据稳定。
  • 中金所接口:股指期货和国债期货的娘家。接口协议和CTP略有不同,注意看文档里的「基差计算字段」——他们给的结算价是收盘前最后30秒的加权平均。
  • 能源中心(INE):原油、20号胶这些品种。接口和CTP基本一致,但要注意夜盘时间。

我的经验:交易所接口拿到的数据,一定要做「Tick级校验」。我曾经发现上期所的某个品种,在收盘前最后一笔tick的成交价和结算价差了0.5%,后来发现是接口文档里有个字段含义理解错了。

二、第三方数据源:省心,但要留个心眼

如果你不想自己折腾交易所接口,第三方数据源是个好选择。但记住——天下没有免费的午餐。

数据源优点缺点我常用的场景
Wind字段全,历史数据长贵,接口调用有频率限制回测时拉取5年历史基差
聚宽/米筐Python友好,有现成的基差计算函数实时数据延迟约1-3秒策略原型验证
天软数据清洗做得好学习曲线陡生产环境的数据校验
自建爬虫完全可控维护成本高,容易被封小众品种的补充数据

避坑指南:我曾经用某第三方数据源做回测,发现基差序列在2018年10月有个诡异的跳变。后来一查,是对方把「收盘价」和「结算价」搞混了。所以,拿到数据后,一定要先画个图看看——肉眼扫一遍,比任何统计检验都管用。

三、数据清洗与对齐:90%的时间花在这里

数据清洗这事儿,说白了就是「去伪存真」。我见过太多人,策略写得漂亮,但数据没洗干净,结果全白干。

清洗的四个关键步骤:

  1. 去重:同一个tick时间戳出现两次?保留第一条,删除重复。
  2. 异常值处理:基差突然从-50跳到+500?先标记,再判断是数据错误还是市场异动。
  3. 缺失值填充:夜盘中间有5分钟没数据?用前向填充,别用插值——期货市场的信息传递不是线性的。
  4. 时间对齐:这是最头疼的。不同交易所的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级,否则你会被数据噪声折磨到怀疑人生。

五、知识体系总览

下面这张图,是我自己整理的数据获取全流程。你照着这个框架走,基本不会漏掉关键环节。

基差数据获取全流程框架 交易所接口 CTP/中金所/INE 第三方数据源 Wind/聚宽/天软 自建爬虫 小众品种补充 数据清洗与对齐 去重 → 异常值处理 → 缺失值填充 → 时间对齐 核心原则:前向匹配,避免未来数据 Tick级 高频套利/事件驱动 噪声大,慎用 1分钟/5分钟 均值回归/日内策略 我最推荐的频率 日线 趋势跟踪/跨期套利 注意收盘价vs结算价 基差序列(可用于策略回测/实盘)

你看,整个流程其实就四步:拿到数据 → 洗干净 → 选频率 → 输出基差。每一步都有坑,但只要你按这个框架走,至少能避开80%的常见问题。

最后说一句:数据获取这件事,没有「最好」的方案,只有「最适合你策略」的方案。我见过有人用tick级数据做日频策略,也见过有人用日线数据做高频——结果嘛,可想而知。搞清楚你的策略需要什么频率的数据,比纠结用哪个数据源重要得多。


公众号:蓝海资料掘金营,微信deep3321