二、套利品种选择:相关性分析、协整检验、流动性筛选
做跨品种套利,第一步就是选品种。这一步要是走偏了,后面参数调得再漂亮也是白搭。我个人习惯把品种选择拆成三个维度:相关性、协整性、流动性。咱们一个一个说。
2.1 相关性分析——先看它们是不是「同频」
相关性分析,说白了就是看两个品种的价格走势是不是「步调一致」。我见过不少新手上来就做协整,其实应该先跑一遍相关系数矩阵。
常用的指标是皮尔逊相关系数,取值范围在 -1 到 1 之间。绝对值越接近 1,说明线性关系越强。做套利的话,我个人建议相关系数至少在 0.7 以上,低于这个值就别勉强了。
核心要点:
- 用滚动窗口计算相关系数(窗口期建议 60~120 个交易日)
- 观察相关系数的稳定性——如果忽高忽低,说明关系不可靠
- 别只看全样本,要看近期的相关性
举个例子。我去年做螺纹钢和热卷的套利,全样本相关系数 0.85,看着不错。但滚动一看,最近三个月掉到了 0.6 以下。为什么?因为限产政策只针对螺纹钢,热卷不受影响。嗯,这就是典型的「历史关系失效」。
# Python 示例:滚动相关系数计算
import pandas as pd
import numpy as np
def rolling_corr(series1, series2, window=60):
"""
计算滚动相关系数
series1, series2: 价格序列
window: 滚动窗口大小
"""
return series1.rolling(window).corr(series2)
# 使用示例
corr_series = rolling_corr(price_a, price_b, window=60)
print(f"最近一期相关系数: {corr_series.iloc[-1]:.3f}")
print(f"相关系数标准差: {corr_series.std():.3f}") # 越小越稳定
我的小技巧:别只看收盘价的相关性。我习惯把开盘价、最高价、最低价都跑一遍。有时候收盘价相关性一般,但开盘价的相关性反而很高——这说明隔夜跳空的方向一致,适合做日内套利。
2.2 协整检验——找到真正的「长期伴侣」
相关性高不代表能套利。你想想看,两只股票都跟着大盘涨跌,相关性可能很高,但它们之间没有稳定的价差关系。这时候就需要协整检验出马了。
协整检验的核心思想:两个非平稳的时间序列,它们的线性组合可能是平稳的。说白了,就是两个价格虽然各自乱跑,但它们之间的价差会回归均值。
常用的方法是 Engle-Granger 两步法:
- 第一步:用 OLS 回归估计协整系数
- 第二步:对残差做单位根检验(ADF 检验)
我曾经踩过的坑:做协整检验时,数据频率一定要统一。我有一次用日线数据和小时线数据混着跑,结果 ADF 统计量显著得离谱。后来才发现是数据对齐出了问题。嗯,从那以后我每次都会先检查时间戳。
# Python 示例:Engle-Granger 协整检验
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller
def cointegration_test(price_y, price_x):
"""
Engle-Granger 协整检验
返回:协整系数、残差 ADF 统计量、p 值
"""
# 第一步:OLS 回归
X = sm.add_constant(price_x)
model = sm.OLS(price_y, X).fit()
hedge_ratio = model.params.iloc[1] # 协整系数
# 第二步:残差 ADF 检验
residuals = model.resid
adf_result = adfuller(residuals, maxlag=1)
return {
'hedge_ratio': hedge_ratio,
'adf_stat': adf_result[0],
'p_value': adf_result[1],
'is_cointegrated': adf_result[1] < 0.05
}
# 使用示例
result = cointegration_test(price_a, price_b)
if result['is_cointegrated']:
print(f"协整系数: {result['hedge_ratio']:.4f}")
print(f"价差序列平稳,适合套利")
else:
print("未通过协整检验,建议换品种")
这里要注意,ADF 检验的 p 值小于 0.05 才算通过。但我个人习惯更严格一点,要求 p 值小于 0.01。为什么?因为实盘中价差回归的力度往往比回测弱,门槛设高一点能过滤掉很多假信号。
2.3 流动性筛选——别让滑点吃掉利润
这一点经常被忽略。我见过有人回测做得漂漂亮亮,年化收益 30%,结果实盘一跑,滑点直接吃掉一半利润。为什么?因为选的品种流动性太差。
流动性筛选主要看三个指标:
| 指标 | 说明 | 我的建议阈值 |
|---|---|---|
| 日均成交量 | 反映市场活跃度 | > 10 万手(期货) |
| 买卖价差 | 反映交易成本 | < 0.1%(相对价格) |
| 市场深度 | 挂单量,影响大单执行 | 前五档挂单量 > 100 手 |
避坑指南:我曾经选过一对品种,相关性 0.85,协整检验也通过了,但日均成交量只有 2 万手。结果一开仓,价差直接被打穿,根本没法按预期价格成交。后来我加了一条铁律:两个品种的日均成交量都必须大于 10 万手,少一个都不行。
还有一个容易被忽视的点:流动性在不同时段差异很大。比如股指期货在开盘和收盘时流动性最好,中午休市前后流动性骤降。做套利的话,我建议只在流动性最好的时段开仓。
2.4 知识体系总览
说了这么多,咱们用一张图把整个流程串起来。这张图是我自己画的结构图,每次做品种选择时都会对照着看一遍。
这张图其实就说明白了:三个步骤是串行的,任何一个环节不通过,就回到候选池重新选。别想着跳过某一步,我在实盘中试过,跳过任何一步都会出问题。
2.5 实战中的取舍
理论说完了,聊聊实战中的取舍。你可能会遇到这种情况:A 和 B 相关性 0.82,协整检验也过了,但流动性一般。C 和 D 相关性 0.75,协整检验勉强通过,但流动性极好。怎么选?
我的建议是:流动性优先。相关性差一点可以通过调整参数弥补,协整检验门槛可以适当放宽到 0.1,但流动性差是真的没办法。滑点这东西,你控制不了。
一个小经验:做跨品种套利,尽量选同一交易所的品种。比如螺纹钢和热卷都在上期所,交易时间、结算规则完全一致,省去很多麻烦。跨交易所的品种,比如大商所的豆粕和郑商所的菜粕,虽然相关性也不错,但交易时间差那 15 分钟就够你头疼的。
好了,品种选择这块就聊到这儿。记住三个关键词:相关性、协整性、流动性。按这个顺序筛一遍,能帮你省掉后面 80% 的麻烦。
公众号:蓝海资料掘金营,微信deep3321