二、套利品种选择:相关性分析、协整检验、流动性筛选

做跨品种套利,第一步就是选品种。这一步要是走偏了,后面参数调得再漂亮也是白搭。我个人习惯把品种选择拆成三个维度:相关性、协整性、流动性。咱们一个一个说。

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 两步法:

  1. 第一步:用 OLS 回归估计协整系数
  2. 第二步:对残差做单位根检验(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 知识体系总览

说了这么多,咱们用一张图把整个流程串起来。这张图是我自己画的结构图,每次做品种选择时都会对照着看一遍。

套利品种选择流程 候选品种池 相关性分析(|r| > 0.7) 通过 协整检验(ADF p < 0.05) 通过 流动性筛选(量、价差、深度) 通过 确定套利品种对 不通过 → 返回候选池 不通过 → 返回候选池 不通过 → 返回候选池

这张图其实就说明白了:三个步骤是串行的,任何一个环节不通过,就回到候选池重新选。别想着跳过某一步,我在实盘中试过,跳过任何一步都会出问题。

2.5 实战中的取舍

理论说完了,聊聊实战中的取舍。你可能会遇到这种情况:A 和 B 相关性 0.82,协整检验也过了,但流动性一般。C 和 D 相关性 0.75,协整检验勉强通过,但流动性极好。怎么选?

我的建议是:流动性优先。相关性差一点可以通过调整参数弥补,协整检验门槛可以适当放宽到 0.1,但流动性差是真的没办法。滑点这东西,你控制不了。

一个小经验:做跨品种套利,尽量选同一交易所的品种。比如螺纹钢和热卷都在上期所,交易时间、结算规则完全一致,省去很多麻烦。跨交易所的品种,比如大商所的豆粕和郑商所的菜粕,虽然相关性也不错,但交易时间差那 15 分钟就够你头疼的。

好了,品种选择这块就聊到这儿。记住三个关键词:相关性、协整性、流动性。按这个顺序筛一遍,能帮你省掉后面 80% 的麻烦。


公众号:蓝海资料掘金营,微信deep3321