第三章 基差数据获取:交易所公开数据源、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股指期货的基差数据,结果三个结果都不一样。你想想看,这怎么搞?
基差数据清洗,核心就三件事:
- 时间对齐:期货和现货的交易时间不一样。股指期货比股票早15分钟开盘,晚15分钟收盘。这半小时的数据,你怎么处理?
- 合约对齐:期货有主力合约、次主力合约、远月合约。基差是用哪个合约算的?我建议统一用主力合约。
- 异常值处理:涨跌停、熔断、数据缺失——这些都要处理。
下面给一段代码示例,展示如何用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 基差数据的核心逻辑图
下面这张图,是我自己总结的基差数据获取与处理流程。你仔细看看,每一步都对应着上面讲的内容。
你看,整个流程其实不复杂。但每一步都有细节。数据源选对了,清洗做干净了,后面的策略才能跑得稳。
📌 总结一下:
- 交易所数据最原始,但获取麻烦
- 金融终端效率高,但要搞清楚数据来源
- 数据清洗是重中之重,时间对齐和合约对齐最容易出错
- 建议把清洗后的数据存下来,方便后续使用
好了,基差数据这块就讲到这里。数据搞定了,下一步就是怎么用这些数据设计对冲策略。不过那是后面的事了。