第十七章:基差交易的量化工具:Python在基差交易中的应用、常用库介绍
说实话,刚入行那会儿,我还在用Excel手工算基差。每天盯着几十个品种的价差,眼睛都快瞎了。后来接触了Python,才真正体会到什么叫「解放生产力」。今天我就把我在基差交易中常用的几个Python库,以及实战中的一些坑,跟你好好聊聊。
为什么是Python?
你想想看,基差交易涉及的数据量有多大?现货价格、期货价格、库存数据、交割规则、升贴水……这些数据每天更新,手工处理根本来不及。Python的优势在于:
- 数据处理快:几万行数据,几秒钟搞定
- 回测方便:写个策略,跑一遍历史数据,效果立竿见影
- 可视化直观:基差走势图、套利区间图,一目了然
我个人习惯用Jupyter Notebook做日常分析,写代码、看结果、画图都在一个界面里,特别适合基差交易的快速复盘。
核心观点:基差交易的核心是「价差回归」,而Python能帮你快速找到「什么时候偏离、什么时候回归」。
三大核心库:pandas、numpy、matplotlib
这三个库,说白了就是基差交易的「三驾马车」。我一个个说。
1. pandas:数据处理的瑞士军刀
pandas是我用得最多的库。它的DataFrame结构,天然适合处理时间序列数据。基差数据本质上就是「时间 + 价格」的二维表。
实战场景:我每天开盘前,会用pandas拉取近月合约和远月合约的收盘价,然后计算基差:
import pandas as pd
# 假设df包含近月合约和远月合约的收盘价
df['basis'] = df['spot_price'] - df['futures_price']
df['basis_ma'] = df['basis'].rolling(window=20).mean()
df['basis_std'] = df['basis'].rolling(window=20).std()
# 找出基差偏离超过2倍标准差的交易日
df['signal'] = (abs(df['basis'] - df['basis_ma']) > 2 * df['basis_std'])
嗯,这里要注意:rolling窗口的选择很关键。我试过5日、10日、20日、60日,最后发现20日窗口在大多数品种上效果最好。但不同品种的波动特性不一样,你得自己调参。
我的经验:pandas的groupby功能在跨品种套利中特别好用。比如你想同时分析螺纹钢和热卷的基差,用groupby('品种')就能一键分组计算。
2. numpy:数学计算的加速器
numpy主要用来做矩阵运算和统计计算。基差交易中,我常用它来计算:
- 协方差矩阵(多品种套利时用)
- 相关系数(判断两个品种的联动性)
- 正态分布检验(判断基差是否回归到均值)
举个例子:判断两个品种的基差是否具有套利机会,我会先算它们的相关系数:
import numpy as np
# 假设有两个品种的基差序列
basis_a = np.array([...])
basis_b = np.array([...])
corr = np.corrcoef(basis_a, basis_b)[0, 1]
print(f"相关系数:{corr:.2f}")
# 如果相关系数大于0.8,说明联动性强,适合做配对交易
我曾经踩过一个坑:直接用numpy算相关系数,没考虑时间滞后。后来发现,有些品种的基差变化有1-2天的滞后,需要做滞后相关性分析。这个细节,很多新手都会忽略。
避坑指南:numpy的默认计算是浮点型,但基差数据有时会出现缺失值(比如节假日没有交易)。记得用np.nan_to_num()处理缺失值,否则计算结果全是NaN。
3. matplotlib:可视化决策助手
基差交易,说白了就是看图说话。matplotlib能帮你把枯燥的数字变成直观的图表。
我常用的图表类型:
- 基差走势图:看基差的历史波动范围
- 基差分布直方图:判断基差是否服从正态分布
- 套利区间图:标出上下轨,一目了然
import matplotlib.pyplot as plt
# 绘制基差走势图
plt.figure(figsize=(12, 6))
plt.plot(df.index, df['basis'], label='基差', color='blue')
plt.axhline(y=0, color='gray', linestyle='--')
plt.axhline(y=df['basis_ma'].iloc[-1], color='red', linestyle='-', label='均值')
plt.fill_between(df.index,
df['basis_ma'] - 2*df['basis_std'],
df['basis_ma'] + 2*df['basis_std'],
alpha=0.2, color='gray', label='±2σ区间')
plt.legend()
plt.title('基差走势与套利区间')
plt.show()
我个人习惯把图表保存成PNG,然后直接贴到交易日志里。复盘的时候,一眼就能看出当时为什么开仓、为什么平仓。
基差交易的核心逻辑流程图
下面这张图,是我自己总结的基差交易量化流程。你照着这个框架走,基本不会出大错。
实战中的三个小技巧
光讲理论没意思,我分享几个实战中总结的技巧:
- 数据频率要匹配:基差交易中,现货价格通常是日频,期货价格是分钟频。我习惯把期货数据降频到日频,用收盘价计算。否则高频数据会引入太多噪音。
- 注意交割月切换:临近交割月,基差会快速收敛。我一般会在交割月前两周停止交易,避免交割风险。这个在代码里要加判断条件。
- 多周期共振:我不仅看日线级别的基差,还会看周线。如果日线和周线同时发出信号,胜率会高很多。用pandas的resample函数就能轻松实现。
核心总结:pandas管数据、numpy管计算、matplotlib管看图。三个库配合使用,基本能覆盖基差交易90%的量化需求。剩下的10%,靠的是你对品种基本面的理解。
好了,这一章的内容就这些。记住,工具只是手段,核心还是你对基差逻辑的理解。代码写得再漂亮,方向判断错了也是白搭。