You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加密货币配对协整检验p值始终异常偏低问题排查

问题原因

你得到任意配对p值异常偏低的核心原因是用错了协整检验的输入序列:

  • 协整检验的适用前提是输入为同阶单整的非平稳序列,配对交易场景下我们检验的是两个I(1)序列(即序列本身非平稳,一阶差分后平稳)是否存在长期稳定的线性关系。
  • 你代码里输入的对数收益率,本质是对数价格的一阶差分结果,本身就是I(0)平稳序列,完全不满足协整检验的输入要求。
  • 协整检验的核心逻辑是对两个输入序列做OLS回归,再检验回归残差是否平稳。如果输入本身就是平稳序列,其线性组合残差几乎必然平稳,自然会得到极小的p值,拒绝“不存在协整”的原假设——这个结果是统计方法误用导致的,和标的本身是否真的存在协整关系没有关联。
修正方案

按如下逻辑调整代码即可得到有效结果:

  1. 协整检验的输入替换为对数价格序列,不要用对数收益率。对数价格是典型的I(1)序列,符合协整检验的前提要求。
  2. 正式做协整检验前,先对两个对数价格序列分别做ADF单位根检验,确认两个序列均满足“本身非平稳、一阶差分后平稳”的I(1)特性,只有同阶单整的序列做协整检验的结果才有统计意义。
  3. 去掉对数收益率序列fillna(0)的操作,缺失值直接丢弃即可,补0会人为引入噪声干扰检验结果。
  4. 注意协整关系对应的平稳价差是两个对数价格的线性组合残差,不是对数收益率的差值,不要混淆。

修正后的核心检验逻辑参考:

def check_pair(first_market, second_market, timeframe):
    first = get_ohlc_ccxt(first_market, timeframe)
    second = get_ohlc_ccxt(second_market, timeframe)

    if len(first) != len(second):
        length = min(len(first), len(second))
        first = first.iloc[-length:]
        second = second.iloc[-length:]

    # 生成对数价格序列
    first['log_price'] = np.log(first['close'])
    second['log_price'] = np.log(second['close'])
    x = first['log_price']
    y = second['log_price']

    # 此处补充ADF检验逻辑,确认x、y均为I(1)序列后再执行协整检验
    coint_res = ts.coint(x, y)
    p_value = coint_res[1]

    print('Cointegration:', first_market, second_market, p_value)
    
    return first, second

内容的提问来源于stack exchange,提问作者JayK23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:21:21