第十八章:基差交易的数据源与API

做基差交易这么多年,我踩过最大的坑,不是策略本身,而是数据。

你想想看,基差交易的核心就是价差。价差算错了,策略再好也是白搭。我见过太多人,策略回测跑得漂亮,一上实盘就崩,最后发现是数据源没对齐。

今天咱们就聊聊,数据到底从哪来,怎么用,怎么避免那些坑。

18.1 交易所数据:最原始,也最可靠

我个人习惯,首选交易所直连数据。为什么?因为这是最原始的交易数据,没有经过任何加工。

18.1.1 国内四大期货交易所

  • 上期所(SHFE):铜、铝、锌、螺纹钢、热卷等
  • 大商所(DCE):豆粕、豆油、铁矿石、焦煤、焦炭等
  • 郑商所(CZCE):PTA、甲醇、白糖、棉花等
  • 中金所(CFFEX):股指期货、国债期货

每个交易所都有自己的行情接口。上期所用CTP,大商所用X-One,郑商所用FEMAS。嗯,这里要注意,接口协议不一样,你得分别对接。

核心数据字段

  • 最新价(LastPrice)
  • 买一价/卖一价(BidPrice/AskPrice)
  • 持仓量(OpenInterest)
  • 成交量(Volume)
  • 结算价(SettlementPrice)—— 这个特别重要,基差计算常用

18.1.2 境外交易所

做跨市场基差交易的朋友,还得关注CME、LME、ICE这些。CME的Globex接口,LME的Select接口,都是标准API。我曾经在对接LME数据时,发现他们的结算价计算方式和国内不一样,差点把基差算反了。

18.2 第三方数据服务:省心但要注意质量

说实话,自己对接所有交易所,工作量太大了。尤其是做多品种基差交易,光维护接口就够呛。这时候,第三方数据服务就派上用场了。

18.2.1 国内常用第三方

服务商 特点 适用场景
万得(Wind) 数据全,历史数据长 回测研究、基本面分析
聚宽(JoinQuant) API友好,Python支持好 量化策略开发
米筐(RiceQuant) 回测平台成熟 策略回测
天软(TinySoft) 高频数据质量高 高频基差交易

我的建议:别只依赖一家。我习惯用Wind做历史数据回测,用聚宽做实时数据接入,两个交叉验证。

18.2.2 境外第三方

  • Bloomberg:贵,但数据质量没得说
  • Refinitiv:Eikon平台,商品数据很全
  • Quandl:适合个人开发者,价格亲民

18.3 数据清洗:80%的工作量在这里

你可能不信,我团队里最资深的工程师,每天的工作就是洗数据。为什么?因为原始数据根本没法直接用。

18.3.1 常见数据问题

  • 缺失值:节假日、盘中暂停,数据会断
  • 异常值:比如突然跳空,可能是数据错误
  • 重复数据:同一个tick被推送两次
  • 时间戳不一致:不同交易所的时钟不同步

我曾经踩过的坑:有一次做豆粕和豆油的基差策略,发现回测收益特别高。后来一查,原来是两个品种的数据时间戳差了3秒,导致价差计算出现了虚假套利机会。嗯,从那以后,我强制要求所有数据必须对齐到毫秒级。

18.3.2 清洗流程

# 伪代码示例:数据清洗流程
def clean_data(df):
    # 1. 去重
    df = df.drop_duplicates(subset=['timestamp', 'symbol'])
    
    # 2. 处理缺失值
    df = df.fillna(method='ffill')  # 前向填充
    
    # 3. 异常值检测
    df = df[(df['price'] > 0) & (df['price'] < 1e6)]
    
    # 4. 时间对齐
    df['timestamp'] = pd.to_datetime(df['timestamp'])
    df = df.set_index('timestamp').resample('1S').last()
    
    return df

18.4 数据对齐:基差计算的关键

基差 = 现货价格 - 期货价格。听起来简单吧?但实际操作中,你得保证两个价格是同一时刻的。

18.4.1 时间对齐策略

  • Tick级对齐:用最新成交价,适合高频
  • 秒级对齐:取每秒最后一笔,适合日内
  • 分钟级对齐:取每分钟收盘价,适合日频

核心原则:对齐粒度越细,基差越准确,但数据量也越大。我个人做日内基差交易,用秒级对齐就够了。

18.4.2 合约对齐

期货有主力合约、次主力合约之分。做基差交易时,你得明确用哪个合约。我习惯用持仓量最大的合约作为主力合约,因为流动性最好,基差也最真实。

18.5 知识体系图

基差交易数据源与API知识体系 交易所数据 第三方数据服务 数据清洗 国内:CTP/X-One/FEMAS 境外:CME/LME/ICE 核心字段:最新价、持仓量 结算价、成交量 国内:Wind/聚宽/米筐 境外:Bloomberg/Refinitiv API类型:REST/WebSocket 数据频率:Tick/分钟/日 缺失值处理 异常值检测 重复数据去重 时间戳对齐 数据对齐:基差计算的核心 Tick级对齐 秒级对齐 分钟级对齐

18.6 实战建议

说了这么多,最后给你几个实在的建议:

  1. 数据源至少备两个:一个主用,一个备用。我曾经遇到Wind宕机,幸好有聚宽的数据顶着。
  2. 清洗脚本要自动化:每天开盘前跑一遍,确保数据质量。
  3. 对齐粒度要匹配策略:高频策略用Tick级,日内策略用秒级,中长线用分钟级就够了。
  4. 定期做数据校验:拿交易所的官方结算价和自己的数据对比,发现偏差及时调整。

一个小技巧:我习惯在数据库里建一个数据质量监控表,每天记录缺失率、异常率、重复率。一旦某个指标超过阈值,自动报警。这样就不用天天盯着数据看了。

数据是基差交易的地基。地基不稳,楼盖得再高也得塌。希望今天聊的这些,能帮你少走一些弯路。

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