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

如何实现返回单一值的双时间序列互相关计算

嗨,我来帮你梳理下解决思路,一步步来拆解问题:

首先解决互相关向量转单一值的问题

你提到scipy.signal.correlate返回向量,想要单一值,核心是先明确你需要的「相关性类型」,再对应提取:

1. 如果你要的是0滞后的线性相关程度(和Pearson相关系数等价)

互相关向量的长度是2N-1(当两个序列长度都是N时),中间位置的数值就是0滞后的归一化互相关值,和Pearson结果一致。可以这样提取:

import numpy as np
from scipy.signal import correlate

def get_lag0_correlation(serie1, serie2):
    # 先对序列做去均值处理,消除直流分量影响
    s1 = serie1 - np.mean(serie1)
    s2 = serie2 - np.mean(serie2)
    # 计算全范围互相关
    corr_full = correlate(s1, s2, mode="full")
    # 归一化到[-1,1]区间(和Pearson系数一致)
    norm_factor = np.std(serie1) * np.std(serie2) * len(serie1)
    corr_norm = corr_full / norm_factor
    # 取中间位置(0滞后)的值
    lag0_idx = len(corr_norm) // 2
    return corr_norm[lag0_idx]

测试一下的话,这个值应该和scipy.stats.pearsonr(serie1, serie2)[0]完全一致。

2. 如果你要的是两个序列在任意滞后下的最强关联

那就取互相关向量的绝对值最大值,代表两个序列在某个时间偏移下的最高相似性:

def get_max_cross_correlation(serie1, serie2):
    s1 = serie1 - np.mean(serie1)
    s2 = serie2 - np.mean(serie2)
    corr_full = correlate(s1, s2, mode="full")
    norm_factor = np.std(serie1) * np.std(serie2) * len(serie1)
    corr_norm = corr_full / norm_factor
    # 返回最大绝对值的相关值
    return np.max(np.abs(corr_norm))
再聊聊核心问题:配对交易标的对为何找不到Hurst指数与相关性的关联

你提到合成序列测试Hurst算法正常,那大概率是数据特性的问题:

  • 配对交易选的是协整标的对,它们的核心是「价差序列平稳」,而单个标的的Hurst指数(长记忆性)可能被协整关系抵消了。比如两个都有长记忆性的标的,它们的价差可能是短记忆(Hurst≈0.5),这时候单个标的的Hurst指数和它们的相关性之间的关联就不明显了。
  • 可以试试计算价差序列的Hurst指数,而不是单个标的的——毕竟配对交易关注的是价差的均值回归特性,也许关联存在于「价差的Hurst指数」和「标的对的协整强度」之间,而不是单个标的的Hurst和Pearson相关之间。
  • 另外,检查下配对标的对的选择逻辑:最优标的对通常是协整性最强的,这类对的Pearson相关系数可能本身就很高或者很稳定,导致和Hurst指数的关联被掩盖,不妨扩大样本范围,加入一些非最优但有一定相关性的标的对,对比看看是否存在关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:42:51