第四章:基差数据获取与处理
做基差交易,第一步不是写策略,而是搞数据。
我见过太多人,策略逻辑写得天花乱坠,结果数据源没选对,或者数据没清洗干净,回测跑出来漂亮得很,实盘一上去就崩。说白了,数据是地基,地基不稳,楼盖得再高也是危房。
4.1 数据源选择:Wind、Tushare、聚宽
选数据源,得看你的场景。我个人习惯把数据源分成三类:
| 数据源 | 适用场景 | 成本 | 数据质量 |
|---|---|---|---|
| Wind | 机构实盘、专业研究 | 高(年费数万) | ★★★★★ |
| Tushare | 个人研究、量化回测 | 低(积分制) | ★★★★ |
| 聚宽 | 策略开发、模拟交易 | 免费/低 | ★★★★ |
Wind 是行业标准。我在机构做交易时,基本离不开它。数据全、更新快、接口稳定。但价格不便宜,个人用户一般扛不住。
Tushare 是我个人比较推荐的。开源、社区活跃,数据覆盖面也够用。我曾经用它跑过三年的股指期货基差回测,数据质量没出过大问题。不过要注意,高频数据需要积分,免费用户有调用限制。
聚宽 更适合做策略开发。它自带回测框架,数据接口也封装好了。如果你刚开始接触基差交易,从聚宽入手会省很多事。
我的建议: 个人研究先用Tushare或聚宽,等策略成熟了再上Wind。别一开始就砸钱买Wind,万一策略不行,钱就白花了。
4.2 数据清洗与对齐
数据拿到手,别急着算基差。先做清洗。
我踩过最大的坑是什么?数据对齐。
股指期货和现货指数的交易时间不完全一样。期货有夜盘,现货没有。如果你直接把两个时间序列拼在一起,基差会算出一堆垃圾值。
具体来说,要注意以下几点:
- 时间戳对齐:期货和现货必须用同一时间基准。我习惯用交易所的撮合时间,精确到秒。
- 缺失值处理:遇到停牌、节假日、异常交易,数据会有空缺。别用前值填充,那会扭曲基差。我一般直接剔除。
- 异常值过滤:基差突然跳变几十个点,多半是数据错误。用3倍标准差法过滤掉。
避坑指南: 我曾经在回测中忽略了期货换月时的数据跳跃,结果基差序列出现了一个巨大的尖峰,策略信号全乱了。后来我加了换月处理逻辑,才把问题解决。
4.3 基差序列计算与可视化
基差的计算公式很简单:
基差 = 期货价格 - 现货指数价格
但实际计算时,要注意合约选择。我一般用主力合约,也就是持仓量最大的那个。如果主力合约快到期了,要提前切换到下一个合约。
下面是一个用Python计算基差的示例:
import pandas as pd
import numpy as np
# 假设已经获取了期货和现货数据
# futures_price: 期货价格序列
# spot_price: 现货指数价格序列
# 计算基差
basis = futures_price - spot_price
# 计算基差率(相对值)
basis_ratio = (futures_price - spot_price) / spot_price * 100
# 去除异常值(3倍标准差)
mean = basis.mean()
std = basis.std()
basis_clean = basis[(basis > mean - 3*std) & (basis < mean + 3*std)]
算完基差,一定要可视化。光看数字,你很难发现规律。
我习惯画两张图:
- 基差时序图:看基差随时间的变化趋势
- 基差分布直方图:看基差的统计特征,比如均值、标准差、偏度
下面是我用SVG画的一张基差交易知识体系图,帮你理清本章的核心逻辑:
核心要点:
- 数据源选对了,后面省一半功夫
- 清洗比计算更重要,垃圾进垃圾出
- 可视化不是装饰,是发现规律的利器
嗯,数据这块就讲这么多。记住一句话:数据质量决定策略上限。你花80%的时间在数据处理上,都不为过。