第三章 基差数据获取:交易所公开数据源、Wind/聚宽等金融终端调用、基差数据的清洗与对齐

做基差交易,第一步就是搞数据。

很多人一上来就研究策略、写代码,结果数据源都没搞清楚。我见过太多人,回测跑得飞起,实盘一跑就崩——为什么?数据对不上。基差数据这东西,看着简单,其实坑不少。今天我就把这块掰开揉碎了讲。

3.1 交易所公开数据源:最原始、最可靠

我个人习惯,能用交易所原始数据,就不用第三方。为什么?因为第三方加工过的数据,你不知道它中间做了什么手脚。

国内四大期货交易所:

  • 中金所:股指期货(IF、IC、IH、IM)
  • 上期所:有色、贵金属、螺纹钢等
  • 大商所:豆粕、铁矿石、焦炭等
  • 郑商所:PTA、甲醇、白糖等

交易所公开数据,一般包括:

  • 每日结算价(官方数据,最权威)
  • 每日持仓量
  • 每日成交量
  • 每日最高价、最低价、开盘价、收盘价

但有个问题——交易所不直接提供基差数据。基差需要你自己算。而且交易所的结算价和行情软件的收盘价,有时候不一样。嗯,这里要注意。

⚠️ 我曾经踩过的坑: 有一次我用某行情软件的收盘价算基差,结果发现和交易所结算价差了2个点。后来一查,行情软件用的是最后一笔成交价,而交易所结算价是加权平均价。这两个东西,在极端行情下能差出好几个点。

3.2 Wind/聚宽等金融终端调用:效率优先

说实话,手动去交易所网站扒数据,太慢了。做量化交易,效率就是生命。所以我建议用金融终端。

Wind(万得)

  • 国内金融数据的老大
  • 数据全、更新快
  • 但贵——一年几万块
  • Python接口:windpy

聚宽(JoinQuant)

  • 量化平台,数据免费(部分)
  • 适合个人和小团队
  • Python接口:jqdatasdk

其他选择

  • Tushare:开源,免费但有限制
  • RiceQuant:类似聚宽
  • AKShare:免费,数据源多

我个人建议:如果预算够,上Wind。如果预算有限,聚宽+Tushare组合也够用。

💡 核心要点: 不管用哪个终端,一定要搞清楚它的数据更新频率。Wind是实时更新,聚宽是盘后更新。做日内交易和做隔夜交易,对数据时效性的要求完全不同。

3.3 基差数据的清洗与对齐:这才是关键

数据拿到手了,你以为就能直接用?太天真了。

我做过一个项目,从三个数据源分别拉了沪深300股指期货的基差数据,结果三个结果都不一样。你想想看,这怎么搞?

基差数据清洗,核心就三件事:

  1. 时间对齐:期货和现货的交易时间不一样。股指期货比股票早15分钟开盘,晚15分钟收盘。这半小时的数据,你怎么处理?
  2. 合约对齐:期货有主力合约、次主力合约、远月合约。基差是用哪个合约算的?我建议统一用主力合约。
  3. 异常值处理:涨跌停、熔断、数据缺失——这些都要处理。

下面给一段代码示例,展示如何用Python做基差数据清洗:

import pandas as pd
import numpy as np

def clean_basis_data(futures_df, spot_df):
    """
    基差数据清洗函数
    futures_df: 期货数据,包含datetime, close, contract
    spot_df: 现货数据,包含datetime, close
    """
    # 1. 时间对齐:只保留共同交易时间段
    # 股指期货交易时间:9:30-11:30, 13:00-15:00
    # 现货交易时间:9:30-11:30, 13:00-15:00
    # 注意:期货早开15分钟,晚收15分钟
    
    # 2. 合并数据
    merged = pd.merge(futures_df, spot_df, on='datetime', how='inner')
    
    # 3. 计算基差
    merged['basis'] = merged['close_x'] - merged['close_y']
    
    # 4. 处理异常值
    # 剔除基差超过3倍标准差的数据
    mean_basis = merged['basis'].mean()
    std_basis = merged['basis'].std()
    merged = merged[np.abs(merged['basis'] - mean_basis) < 3 * std_basis]
    
    # 5. 填充缺失值(如果有)
    merged['basis'].fillna(method='ffill', inplace=True)
    
    return merged
🔧 实战技巧: 我建议把清洗后的数据存到本地数据库(比如SQLite),这样下次直接用,不用每次都重新拉数据。而且,你可以对比不同时间段的基差数据,看看有没有异常。

3.4 基差数据的核心逻辑图

下面这张图,是我自己总结的基差数据获取与处理流程。你仔细看看,每一步都对应着上面讲的内容。

基差数据获取与处理流程 交易所公开数据 Wind/聚宽等终端 其他数据源 数据清洗与对齐 时间对齐 | 合约对齐 | 异常值处理 | 缺失值填充 基差计算 基差 = 期货价格 - 现货价格 基差数据存储(数据库/CSV)

你看,整个流程其实不复杂。但每一步都有细节。数据源选对了,清洗做干净了,后面的策略才能跑得稳。

📌 总结一下:
  • 交易所数据最原始,但获取麻烦
  • 金融终端效率高,但要搞清楚数据来源
  • 数据清洗是重中之重,时间对齐和合约对齐最容易出错
  • 建议把清洗后的数据存下来,方便后续使用

好了,基差数据这块就讲到这里。数据搞定了,下一步就是怎么用这些数据设计对冲策略。不过那是后面的事了。

专注资料整理