第十八章:基差交易的数据源与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 知识体系图
18.6 实战建议
说了这么多,最后给你几个实在的建议:
- 数据源至少备两个:一个主用,一个备用。我曾经遇到Wind宕机,幸好有聚宽的数据顶着。
- 清洗脚本要自动化:每天开盘前跑一遍,确保数据质量。
- 对齐粒度要匹配策略:高频策略用Tick级,日内策略用秒级,中长线用分钟级就够了。
- 定期做数据校验:拿交易所的官方结算价和自己的数据对比,发现偏差及时调整。
一个小技巧:我习惯在数据库里建一个数据质量监控表,每天记录缺失率、异常率、重复率。一旦某个指标超过阈值,自动报警。这样就不用天天盯着数据看了。
数据是基差交易的地基。地基不稳,楼盖得再高也得塌。希望今天聊的这些,能帮你少走一些弯路。