一、策略理论基础#
1.1 均值回归与协整关系#
(1)核心概念:当两个资产价格序列存在长期均衡关系时,它们的线性组合(价差)会围绕均值波动
(2)数学表达:若X和Y服从随机游走,存在系数a,b使为平稳序列
(3)经济意义:商品与加工品(如大豆与豆油)、替代品(黄金与白银)等天然存在价格关联
1.2 统计检验方法#
(1)ADF检验:判断价差序列的平稳性
from statsmodels.tsa.stattools import adfuller
p_value = adfuller(spread)[1] # p<0.05表示平稳(2)协整检验:验证两个非平稳序列的长期均衡关系
from statsmodels.tsa.stattools import coint
score, p_value, _ = coint(series1, series2)二、期货价差交易实战#
2.1 压榨价差策略(Crush Spread)#
(1)经济逻辑:大豆加工商利润 = 豆油价格 + 豆粕价格 - 大豆成本
(2)数据获取与处理:
import yfinance as yf
# 获取大豆期货数据
soybean = yf.download(
'ZS=F', start='2020-01-01', end='2023-01-01',
auto_adjust=False, multi_level_index=False,
)['Close']
# 获取豆粕期货数据
meal = yf.download(
'ZM=F', start='2020-01-01', end='2023-01-01',
auto_adjust=False, multi_level_index=False,
)['Close']
# 获取豆油期货数据
oil = yf.download(
'ZL=F', start='2020-01-01', end='2023-01-01',
auto_adjust=False, multi_level_index=False,
)['Close']
# 先把不同报价单位换成近似合约美元价值:
# ZS: 美分/蒲式耳×5,000;ZM: 美元/短吨×100;ZL: 美分/磅×60,000。
# 约 5,000 蒲式耳大豆产出 110 短吨豆粕和 55,000 磅豆油。
soybean_value = soybean / 100 * 5_000
meal_value = 1.10 * meal * 100
oil_value = (55_000 / 60_000) * oil / 100 * 60_000
spread = meal_value + oil_value - soybean_valueYahoo 的 =F 数据是便于展示的连续序列,不是可直接成交的单一合约。正式回测还必须定义换月规则、合约到期日、展期收益和交易成本。
(3)可视化与检验:
plt.figure(figsize=(12,6))
plt.plot(spread)
plt.title('Crush Spread')
print(f"ADF检验p值:{adfuller(spread.dropna())[1]:.4f}")2.2 裂解价差(Crack Spread)#
(1)3:2:1策略公式:
裂解利润 = 2*汽油价格 + 1*取暖油价格 - 3*原油价格(2)策略特点:
-
反映炼油厂盈利能力
-
季节性波动明显(夏季汽油需求高,冬季取暖油需求高)
2.3 实践小练习#
(1)下载黄金(GC=F)和白银(SI=F)期货数据
(2)计算金银价格比序列
(3)进行ADF检验判断是否存在均值回归特性
(4)[答案示例代码见附录]
三、期货-股票联动策略#
3.1 基本原理#
(1)传导机制示例:
原油期货↑ → 石油公司现金流预期↑ → 股价↑
利率期货↑ → 房地产融资成本↑ → REITs价格↓
3.2 黄金矿企套利#
(1)策略逻辑:黄金期现价差与矿企股价存在滞后相关性
(2)数据预处理:
# 获取黄金期货和GDX(黄金矿企ETF)数据
gold = yf.download(
'GC=F', start='2015-01-01', auto_adjust=True, multi_level_index=False,
)['Close']
gdx = yf.download(
'GDX', start='2015-01-01', auto_adjust=True, multi_level_index=False,
)['Close']
# 计算收益率
gold_ret = np.log(gold).diff().dropna()
gdx_ret = np.log(gdx).diff().dropna()
# 滞后相关性分析
lag_corr = pd.concat([gold_ret.shift(5), gdx_ret], axis=1).corr()3.3 航空股对冲策略#
(1)操作逻辑:
-
航空公司的经营利润通常对油价上涨敏感,天然带有负油价敞口;若目标是对冲燃油成本,应按估计的油价 Beta 配置原油多头
-
“做多或做空航空股”属于收益观点;燃油对冲方向和规模应独立由组合的油价暴露决定,不能把同向押注称为对冲
(2)风险控制要点:
-
监控航司燃油成本占比
-
关注外汇对冲政策变化
四、策略优化方向#
4.1 参数动态调整#
(1)滚动窗口协整检验
(2)Kalman Filter动态对冲比率
4.2 风险控制#
(1)压力测试:极端行情下的价差发散风险
(2)止损机制:设置3σ离场阈值
4.3 进阶策略#
(1)期限结构策略:利用近月-远月价差
(2)品种间曲线套利:跨商品价差(如Brent-WTI)
附录:练习答案示例
# 金银比价分析
gold = yf.download(
'GC=F', start='2010-01-01', auto_adjust=True, multi_level_index=False,
)['Close']
silver = yf.download(
'SI=F', start='2010-01-01', auto_adjust=True, multi_level_index=False,
)['Close']
ratio = gold/silver
plt.plot(ratio.rolling(30).mean())
plt.title('Gold/Silver Ratio')
print(f"ADF检验p值:{adfuller(ratio.dropna())[1]:.4f}")