Project 5 — 筛选准备层(Pairs Trading preparation)
状态:准备层,不是完整的 Project 5。 没有 entry/exit、双腿成本、卖空融资、仓位或回测;不得把本目录的任何结果写成“配对交易策略已完成”或“筛选出的配对有收益优势”。A5准备层已有历史限定接受;这里只继承该诊断身份,不登记真实策略verified。
这里有什么、没有什么
| 内容 | 状态 | 文件 |
|---|---|---|
| 冻结的筛选规则( |
有(本地文件哈希,不是外部预注册) | configs/screening_rules.json |
| 训练段 correlation 与 Engle–Granger 协整筛选、hedge ratio、测试次数与临界值的报告 | 有(先切出训练段再交给共享 helper 校验与筛选,训练段之后的缺失值不影响筛选能否运行;之后窗口单独校验完整性,缺失时报错) | screening_layer.py |
| 训练段之后窗口的 frozen spread 诊断(半衰期、ADF 的 |
有(诊断,不是评价策略) | 同上 |
| 反例:相关≠协整;hedge ratio≠资本权重;零假设下的假阳性数;“选最好的一对”的选择效应 | 有 | 同上;tests/test_p05_screening.py |
| Notebook(冷启动)与图 | 有 | notebooks/p05_screening.ipynb;figures/a5/p05_screening.png |
| 数据字典、来源可行性、时间字段、缺口表 | 有 | data_dictionary.md、source_feasibility.md、gap_table.md |
| entry/exit、风控、交易滞后、空仓状态 | 没有 | — |
| 双腿成本、卖空与融资、借券可得性、失配风险 | 没有 | — |
| 个股或 ETF 的真实调整后价格、公司行动、历史股票池 | 没有(缺项) | 见 gap_table.md |
真实与构造的标记
| 数据或结果 | 类别 | 说明 |
|---|---|---|
| French 10 行业价值加权月收益复利成的 total-return 指数代理(1926-07 至 2026-08) | 真实,聚合,已修订,非时点,不可交易 | 10 个行业组合,不是证券,不能借券或下单;用于演示训练段筛选与诊断。哈希核对见 quant_course.french_frozen |
| 第 17 章的两个模拟序列(共同趋势不协整;协整对) | 构造 | 只用于“相关≠协整”的反例 |
| 10 个独立随机游走的零假设校准与“选最好一对”的选择效应 | 构造 | 已知所有配对都是零假设,用于展示假阳性与选择偏误 |
运行
本节命令定位A5历史筛选诊断及测试;不是本批重新运行,也不是P5三对构造Notebook或c5完整网格。普通读者主路线见项目导读,不会覆盖这里的历史结果。
.venv/bin/python projects/project05/preparation/screening_layer.py
.venv/bin/python -m pytest tests/test_p05_screening.py -q
结果写入 qa/a5/claude/results/p05/p05_screening_results.json 与 figures/a5/p05_screening.png;输出已存在时拒绝覆盖。独立复算脚本:qa/a5/claude/recompute/p05_recompute.py(直接调用 statsmodels 的 coint、adfuller 与 numpy,不调用 quant_course.cointegration)。
实测结果(真实聚合数据;只描述,不是策略证据)
测试次数与临界值。 两个训练窗口,每个窗口 10 个行业的全部 45 个无序对,共 90 次配对检验(另有零假设与选择效应的模拟,不计入真实数据的检验数)。Engle–Granger 用 statsmodels coint(含截距)的 MacKinnon 协整临界值:窗口一(训练到 1963-06,444 个月)5% 临界值 cointegration.py 的说明)。
| 训练窗口 | 配对数 | 零假设下预期的假阳性个数( |
BH |
||
|---|---|---|---|---|---|
| 1926-07 至 1963-06 | 45 | 5 | 2.25 | 1 | 1 |
| 1926-07 至 1999-12 | 45 | 6 | 2.25 | 0 | 0 |
唯一通过 BH 的配对。 窗口一:Durbl(耐用品)对 Manuf(制造业):EG 统计量
零假设校准(构造:10 个独立随机游走,444 个月,200 次重复)。 平均每次有 2.81 个配对在 5% 水平“显著”(若各检验零假设p值均校准,期望线性给出2.25,不需要检验独立);80% 的重复至少有一个“显著”配对;BH(
相关≠协整(构造)。 共同趋势、不协整的一对:水平相关 0.983、月变化相关 0.960,EG
这里的b不是上文对数回归的弹性。若对数弹性beta=1.5,Y=120、X=40,多1股Y需一阶空4.5股X(180美元),不是1.5股。共享helper的水平价格含义正确,历史JSON该算例的beta字段名称沿用,其语义是这里的水平b;不改helper或历史JSON。该一阶对冲以系数冻结、残差不变为条件,不能消除全部价差风险。
能说什么,不能说什么。 可以说:在 10 个行业组合的真实聚合数据上,训练段只筛出一个通过 BH 的配对,它在训练之后的窗口里没有保持均值回复;零假设下 45 次检验平均有约 2.8 个未经校正的“显著”,所以不能仅凭未校正的
时间字段(摘要,详见 data_dictionary.md)
event_time:行业组合收益覆盖的日历月;available_at:数据库没有记录,已修订历史,所以不是时点;signal_time:训练窗口最后一个月的月末(1963-06 或 1999-12);筛选与 hedge ratio 只用