← 返回目录
p3.3动手⏱ 约 15 分钟

协整与配对交易

样本内 68 对显著,校正后剩 0 对,样本外 20 取 0

🔎 最后验证 2026-07📚 来源:1035 对全量协整检验与样本外复检于 2026-07-31 在 ECS 实测(46 只标的,样本内 2010-2020 / 样本外 2021-2026),输出见 code/outputs/stdout.txt🧰 statsmodels 0.14.6、pandas 3.0.5
为什么学这个

配对交易的逻辑很动人:找两只长期绑定的标的,价差偏离就做多低估、做空高估,等它回归。它的统计前提叫协整——两个各自非平稳的序列,存在某个线性组合是平稳的。

我们在 46 只标的的 1035 对组合里做全量协整检验。样本内(2010–2020)找到 68 对显著。

然后三件事依次发生:

  1. 纯随机情况下的期望假阳性数是 52 对——68 只比它多 16
  2. Bonferroni 校正后剩 0 对;BH-FDR 校正后也是 0 对
  3. 取样本内最显著的 20 对,拿到样本外(2021–2026)重检:0/20 仍显著

这是数据挖掘偏差最干净的一次实证。

💡 打个比方

在一个 1000 人的房间里找"生日相同的两个人",你几乎必然能找到很多对。

这不神奇——配对的数量是人数的平方级。1000 人有近 50 万对组合,而每对同生日的概率是 1/365。

你找到的不是缘分,是组合数。

1035 对协整检验,是同一件事。

一、什么是协整,为什么它是配对交易的前提

两个价格序列各自是随机游走(非平稳,见 P3.1)。但如果它们由同一个基本面驱动,那么它们的价差可能是平稳的——偏离之后会拉回来。

这就是协整。它比"相关"强得多:

  • 相关说的是短期同涨同跌
  • 协整说的是长期不会走散

配对交易赚的就是"价差回归"这件事。所以没有协整,配对交易就没有统计基础——你赌的只是"它们看起来很像"。

二、全量检验:1035 对里找到 68 对

样本内 2010-01-04 ~ 2020-12-31(2674 个交易日),Engle-Granger 检验:

完成 1035 对检验,p < 0.05 的有 68 对 (6.6%)

看起来不错?先算一笔账:

即使所有配对都没有真实协整关系,在 5% 显著性水平下,
期望也会有 1035 × 0.05 = 52 对被判为「显著」
实际找到 68 对 → 超出期望 +16 对

68 对里,有 52 对是"本来就该出现的假阳性"。实际只比随机期望多 16 对,而这 16 对是谁,你并不知道。

多重检验校正

未校正(p<0.05)           68Bonferroni(最严)          0BH-FDR(控制错误发现率)     0

两种校正之后,一对都不剩。

BH-FDR 是相对宽松的方法(它控制的是"错误发现的比例"而非"任何一个错误"),连它都判定 0 对——这说明这 68 对的 p 值分布,与纯随机几乎无法区分。

三、样本外:0/20

即便如此,我们还是取样本内最显著的 20 对(p 值从 0.0001 到 0.0072),拿到样本外 2021-01-04 ~ 2026-07-29 重检:

配对样本内 p样本外 p样本内半衰期(天)样本外仍协整
sh.600026/sh.6000610.00010.385271.8
sh.600406/sh.6004600.00020.182049.4
sh.600028/sh.6001040.00050.644654.1
sh.600406/sh.6004260.00130.196853.9
sh.600029/sh.6000500.00130.072460.3
…(其余 15 对同样为「否」)
样本外仍显著:0/20 对 (0%)
纯随机情况下的期望:1.0 对

0/20。连随机期望的 1 对都没达到。

⚠️ 避坑

协整关系会消失——它不是物理定律,是一段时间内的统计现象。

两家公司的价格长期绑定,通常是因为它们当时处在同一条产业链、同一个政策环境、同一种资金偏好里。而这些条件都会变:业务转型、重组、行业周期、监管变化。

所以配对交易真正的风险,不是"价差不回归",而是"关系本身结束了"

价差不回归你还能等;关系结束了,你等的是一个再也不会回来的东西——而它在净值上的表现,和"再等等就好了"一模一样

真实的配对策略必须有两样东西:

  1. 定期重检协整(比如每季度),不通过就退出
  2. 关系失效时的强制止损——不是按价差幅度,是按"协整检验不再通过"这个事件

🔧 动手做:亲手把 68 个"显著发现"清零(6 分钟)

python cointegration.py。46 只标的两两配对共 1035 对,做协整检验(配对交易的统计前提)。

你会看到(实测):样本内找到 68 对"显著"协整(p 值小于 0.05)。但多重检验校正后——Bonferroni 剩 0 对、BH-FDR 剩 0 对;再看样本外,20 对里 0 对还成立。

想明白:1035 对里,光靠运气就该有约 52 对(1035×5%)蒙到"显著"。那 68 对几乎全是数据挖掘挖出来的噪声——校正一下、或换段时间,全军覆没。任何"我找到了 N 个显著规律",先问:你试了多少次?校正了吗?样本外还在吗?

四、这一节的方法论价值

半衰期那一列也值得看:样本内的价差半衰期在 41–108 天之间。这意味着即使协整成立,一次偏离要两三个月才回归一半——期间的资金占用与波动,足以让很多人提前离场

但本节最重要的不是配对交易本身,而是它演示的那个模式:

在足够多的候选里搜索,你必然会找到"显著"的东西。而它们在样本外全军覆没。

1035 对 → 68 对显著 → 校正后 0 对 → 样本外 0/20。

这条链路,和 p0.1 里 591 组参数网格找出的"最优参数"样本外只剩 1.97% 年化,是同一个故事。下一节会把它彻底量化。

❓ 测验
你在 500 只股票里两两做协整检验(约 12 万对),找到 6000 对 p<0.05。最合理的第一反应是?
✏️ 填空
配对交易真正的风险不是价差不回归,而是两个标的之间的 ___ 关系本身结束了。

📌 免责:本课为技术教学,文中出现的标的代码仅为全量检验的中间结果,不构成任何配对或标的推荐;所有统计为历史模拟,不构成投资建议。

✅ 小结

四个数字,一条链路:

  • 1035 对全量协整检验 → 样本内 68 对显著(6.6%)
  • 纯随机期望假阳性 52 对 → 实际只超出 16 对
  • Bonferroni 后 0 对,BH-FDR 后也是 0 对
  • 样本内最显著的 20 对 → 样本外 0/20(随机期望 1.0 对)

两条实用结论:

  1. 协整会消失。配对交易的真正风险是"关系本身结束了",必须定期重检 + 按协整失效止损
  2. 半衰期 41–108 天:即使成立,一次偏离要两三个月才回归一半

下一节是 P3 的压轴,也是整门课多次预告的那一笔账:P2 全章一共做了 49 次检验。我会先在纯随机数据上做同样多的检验(看能"发现"多少),再对 P2 的结论做 Bonferroni 与 BH-FDR 校正,最后把 p0.1 那个 591 组网格的噪声门槛算出来——你会看到,当时那个"最优参数"的夏普 1.28,低于门槛

下一节 → 多重检验与数据挖掘偏差:把 P2 全章的账算清
🔎 来源与核验· 3 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「46 只标的共 1035 对,样本内(2010-01-04~2020-12-31,2674 个交易日)Engle-Granger 检验 p<0.05 者 68 对(6.6%);纯随机期望假阳性 1035×0.05=52 对」
📚 本节 code/cointegration.py,2026-07-31 于 ECS 实测,输出见 code/outputs/stdout.txt✓ 已核验 2026-07
「多重检验校正后:Bonferroni 0 对、BH-FDR 0 对」
📚 同上实测(statsmodels multipletests)✓ 已核验 2026-07
「取样本内最显著的 20 对(p 从 0.0001 到 0.0072),样本外(2021-01-04~2026-07-29)重检 0/20 仍显著,纯随机期望为 1.0 对;样本内价差半衰期区间 41.0~107.8 天」
📚 同上实测✓ 已核验 2026-07
文中标的代码为全量检验的中间结果,不构成任何配对或标的推荐。
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · p3.4
多重检验与数据挖掘偏差
继续读下一节 →