Project 5 研究报告:预注册walk-forward配对交易
状态:继承c5/v2构造结果与已限定接受ALIGN对齐,当前执行域以2026-10-14整股边界为准;本BIL17B为教学整合候选。历史结果日期:2026-10-10;协议/边界日期:2026-10-14。真实价格实证:blocked(数据许可)。 本报告的全部数值结果来自明确标注的教学构造面板,只证明流程、账本与检验方法能按契约运行,不是任何真实配对盈利或协整的证据。c1–c4在预注册v1下的旧结果原样保留在 qa/a7/project05_batch/evidence/,本报告不沿用它们作c5结论。
1. 研究问题与可证伪假设
第17章说明:两条非平稳价格若存在平稳线性组合(协整),价差会回到均值;相关只描述同步变动,不保证价差回归。本项目问:在预先固定的8个经济上相关的美国上市配对中,只用训练段筛选协整并冻结参数,下一段按z-score做一多一空的相对价值交易,计入双腿成本、借券与融资后,组合是否有稳健的正超额收益。
判断规则(claim_rule,v1与v2相同):主规格的正结果必须在成本网格与“screened对ungated”选择效应对照下都保持,才可写“支持”;否则写“证据不支持该策略”,并保留全部零与负结果。阈值网格与252日形成窗只作描述,不得用于挑选版本后再报告同一样本。
2. 数据与状态
2.1 预注册资产池与版本
v1(SHA256 92e5f20c…4b22)在任何价格下载前冻结:8对EWA/EWC、KO/PEP、XOM/CVX、GDX/GLD(预期弱)、XOP/XLE、HD/LOW、V/MA、IVV/SPY(同一指数的对照),样本2010-01-04至2025-12-31,8对×全部窗口都计入检验次数。
v2(configs/preregistration_v2.json,SHA256 9af9dc84…87c3)在看到构造结果之后、任何真实数据分析之前冻结,取代v1用于所有新运行;v1、澄清A1/A2和c1–c4全部旧结果不改。v2的改动与理由:
| 项目 | v1 | v2 | 理由 |
|---|---|---|---|
| 选入规则 | EG |
EG |
把项目限定为一多一空的相对价值配对;不是因为负 |
| 开盘成交容量 | 成交日全天量的5% | 截至信号收盘已知ADV20的5%,换算到成交日拆股后股数 | 全天量在收盘后才可得,v1用它决定09:30成交属于前视(c4验收R01) |
| 日内事件顺序 | 结息→公司行动→成交 | 结息→公司行动→两腿按09:30开盘标记→成交→结息 | 无成交的既存空头日内借券基数须用开盘价(c4验收R02) |
| 评价输出 | 列出换手、胜率、持有天数但未实现 | 给出口径并实现(§4) | c4验收R04 |
资产池、日期、窗口、检验水平、阈值、仓位与全部成本情景值均未改动。P5-ALIGN对齐实现:真实入口先读取预注册原始字节,并以其SHA-256匹配数据manifest固定主规格摘要,匹配后才进入数据加载。构造自定义配置只标为探索;本报告使用冻结v2。
2.2 来源核查与阻断
真实价格需要未复权开收盘价、成交量、拆股比与每股现金股息,且许可须允许脚本下载、持久保存、银行内部培训使用和交付派生统计。以下仅继承2026-10-10的历史核查结论,本批未重新核现行条款,亦不将这些具体方案概括为全部免费源的普遍禁令(详见 qa/a7/project05_batch/DATA_SOURCE_DECISION.md):
| 来源 | 结论 |
|---|---|
| Yahoo Finance | 条款禁止未经事先许可的自动化收集与商业用途;未下载 |
| Alpha Vantage | 许可限于个人非商业用途 |
| Tiingo | 免费层不得持久保存;组织须购买商业计划 |
| Stooq | 机器人校验,不绕过 |
| Nasdaq Data Link(Sharadar SEP/SFP) | 待核实的采购候选:通用条款限内部业务用途并受Order Form约束,派生物对外分发须合同或书面批准,另有第三方条款;16只标的的覆盖、完整日期、未复权OHLCV、拆股与股息字段均未核实 |
| 其他免费源与历史借券数据 | 个人限定、禁止脚本采集或未找到(scout报告,部分未经主机复读) |
因此 data_manifest.json 的status为blocked,CLI的 --data real 以退出码3拒绝运行且不写任何文件(c5实测)。任何具体订阅是否覆盖本项目的内部教学使用,须由机构合同确认,本报告不登记为已授权。
2.3 教学构造面板(本报告结果的唯一来源)
src/p05_constructed.py(seed 20261010,1,600个工作日)设计三对对数总回报路径:CA/CB协整(
3. 时间契约
| 字段 | 定义 |
|---|---|
| event_time | 交易日 |
| available_at | 开盘价09:30可得;收盘价与当日全天成交量16:00后可得;DFF观测日 |
| signal_time | 收盘 |
| trade_time | 下一交易日开盘 |
| return interval | 相邻收盘标记之间;NAV从形成期末收盘的 |
| label interval | 无(信号不使用未来收益标签),故walk-forward无需purge/embargo |
同一天的事件顺序:隔夜结息(前一收盘可得利率、前一收盘标记)→拆股→股息→两腿按09:30开盘价标记→开盘成交→日内结息(当日开盘可得利率、开盘标记)→收盘标记。
4. 方法
形成(只用训练段)。 每个504日形成窗对 coint(常数项、AIC滞后),临界值是MacKinnon协整残差分布,而不是普通ADF(第17章)。v2选入条件:未校正
信号。
对冲与仓位。 对数价差的
执行与成本(情景,未校准)。 令Q为请求、F为实际非零成交;先按容量与整股规则得F,只有F更新现金/持仓。每条腿分别计:佣金0.005美元/股;半点差ETF 1bp、个股2bp;临时冲击 matched 政策下两腿按较小可成交比例同比例成交,入场剩余在到达时撤单;出场剩余不以撤单冒充平仓,按协议逐日补单;完成受有限样本、容量与整股支持域限制;independent 只作压力情景。
融资与借券。 ACT/360,区间开始现金 locate_unavailable 情景表示。
IS。 全部求和只对实际非零成交集合进行,空和为0;不将零成交乘未定义均价。每个母单只有一个首次到达价:延迟
交易统计。 一次交易(episode)按仓位定义:从离开空仓的第一笔成交,到两腿都回到零的那笔成交;出场未完成时出现的新入场单并入同一次交易,记为reentry。交易损益
walk-forward。 504日形成、126日交易、126日步长滚动。每对同时运行screened(只在通过v2筛选的窗交易)与ungated(每窗都交易)两套独立账本,每套
5. 实现验证(构造面板)
- c5历史测试40项通过;P5-ALIGN历史52项通过(含新增股数与真实入口反例)。c5新增:只扰动成交日全天成交量时,当日09:30成交、价格、现金与当日收盘前NAV逐项不变;开盘预算等于由输入面板手算的ADV20×5%(含拆股换算);无成交既存空头、一腿成交日与拆股日的日内借券基数均由输入价格和实际持仓独立推出;单笔交易的损益、胜率、持有天数与双边成交金额手算一致;未平仓交易不进胜率;v2排除
的窗且CLI拒绝v1。 - 变异检验:改回“成交日全天量定容量”、删去开盘标记、去掉
条件,各有对应新测试失败(c5作者检查)。 - 账本现金恒等式
在全部账本残差约 美元。
P5-ALIGN历史阶段曾重跑主情景与全部稳健性情景(本批未重跑);11个CSV(含订单、现金事件、NAV、episode、指标、网格与压力订单)与c5逐字节相同,因此下列数字和5幅未变图沿用c5身份。专项实际订单证明:信号收盘100、权重0.5、NAV一百万、次日除息1时,旧订单5,050股,修复后5,000股,IS参考价仍99。正负腿、同时拆股/股息与取整顺序均通过;独立现金复算包含实际成交、佣金、股息、利息与借券。真实入口同schema改阈值被摘要闸门拒绝,匹配字节可通过摘要闸门,但当前真实数据仍退出3且无输出。
6. 构造演示结果(不是市场证据)
24次检验(3对×8窗);EG

图1:横轴walk-forward窗,纵轴配对,格内为形成期EG
| 配对 | 方式 | 总收益 | 年化 | 年化波动 | 超额Sharpe | 有符号最深回撤 min(drawdown) | 闭合交易 | 胜率 | 平均持有(交易日) | 年化单边换手 |
|---|---|---|---|---|---|---|---|---|---|---|
| CA_CB | screened | 6.06% | 1.48% | 1.63% | −0.14 | −1.87% | 4 | 25% | 37.3 | 1.00 |
| CA_CB | ungated | 11.71% | 2.81% | 2.26% | 0.48 | −1.87% | 8 | 50% | 33.5 | 2.01 |
| TA_TB | screened | 7.10% | 1.73% | 0.06% | 缺失 | 0.00% | 0 | 缺失 | 缺失 | 0.00 |
| TA_TB | ungated | −6.02% | −1.54% | 3.74% | −0.86 | −9.17% | 6 | 50% | 47.2 | 1.55 |
| IA_IB | screened | 7.10% | 1.73% | 0.06% | 缺失 | 0.00% | 0 | 缺失 | 缺失 | 0.00 |
| IA_IB | ungated | −3.28% | −0.83% | 9.24% | −0.23 | −30.48% | 8 | 62.5% | 47.6 | 2.03 |
| 组合 | screened | 6.76% | 1.65% | 0.55% | −0.15 | −0.58% | 4 | 25% | 37.3 | 0.33 |
| 组合 | ungated | 0.81% | 0.20% | 3.11% | −0.47 | −12.32% | 22 | 54.5% | 42.4 | 1.86 |
1,008个日收益(构造日期2013-12-06至2017-10-18)。现金贷记利率按构造2%减25bp,所以无交易的分仓也有约7%总收益。所有分仓都没有样本末未平仓的交易。

图2:纵轴为美元NAV,起点

图3:CA_CB窗2冻结价差的z-score,虚线为

图4:screened各分仓累计现金项(美元)。构造利率下利息远大于交易摩擦;CA_CB四笔交易的点差1,658、冲击442、佣金426、借券704美元,空头补偿股息后净股息为+826美元。配对的股息差是真实现金项,不能用复权价“抹掉”。
7. 稳健性(构造,全部格点见 robustness.csv)

图5:左为成本网格中借券25bp时screened组合超额Sharpe随半点差倍数与
- 成本网格(27格):screened组合超额Sharpe全部为负,−0.41至−0.12;借券费从25bp升到5%时区间由−0.21至−0.12降到−0.41至−0.32。
- 阈值网格(6格):−0.28至−0.03,全部为负。网格只作描述,没有据此改主规格。
- 252日形成窗:screened组合超额Sharpe −0.02、ungated −0.77。
- 部分成交压力(
、预算为ADV20的5%): matched下4个入场母单(8条腿)只成交下单量的1.6%–2.0%(中位1.9%),组合收益主要是利息,决定结果的是容量预算,不是信号;independent政策下首次成交的实际股数比可偏离下单比约64%(练习P5-09,预算为ADV20的1%)。收盘后诊断显示,实际成交量占当日全天量的比例最高到6.4%,高于5%的事前预算:预算不是实际参与率保证。
按预注册判断规则,构造面板上主规格没有正结果可供“支持”,结论为证据不支持该策略;这些负结果全部保留。
8. 限制
最新整股支持域在每日任何现金入账前检查:实际持仓拆股后将为7.5股时,于隔夜结息/公司行动之前整账户失败;精确十进制权益换算不是实际零碎股可执行保证。空仓7.5股请求可整股成交7并撤入场余量,是另一状态。不得删除失败窗口后继续报告固定样本;退出补单不保证样本结束前清零。历史ALIGN末段曾允许保留实际零碎持仓,现由最新边界覆盖,历史入口不改。
- 真实价格实证blocked;以上没有任何真实资产结论。
- 成本、冲击、借券费、利差、开盘成交预算均为情景,未校准;没有报价与开盘时段成交量数据,开盘成交价不是中间价;无永久冲击。
- 借券可得与召回只用情景表示;无历史借券数据。
- 股息在除息日入账(非支付日);DFF发布时滞用1日近似。
- 构造面板只有3对、8窗;检验功效、选择效应的大小都取决于构造参数,不可外推。
- 预注册是本地文件哈希冻结,不是外部注册平台。v2在看到构造结果之后冻结,已披露动因;它在任何真实数据分析之前冻结,真实数据阶段不得再改。
- 交易损益不含现金利息;胜率与持有天数只描述构造样本中的少数交易(screened组合4笔),不具统计意义。
9. 结论与补跑路径
能说: 预注册v2的设计、筛选、冻结价差、次日开盘双腿执行、事前开盘成交预算、成本/融资/借券/股息/拆股账本、IS分解与交易统计已实现,并经行为测试与变异检验;在构造面板上,流程正确地暴露了相关
数据到位后(机构许可确认、字段样本核验、data/processed/p05/ 文件与 data_manifest.json status=frozen),从数据节点按v2重跑:TR构建→8对×全部窗口形成与检验→screened/ungated账本→成本、阈值、形成窗、部分成交网格→图→Notebook→本报告第6–9节。现有构造结果不得沿用为真实结论。
10. 读者运行与历史复核
普通读者从已接受I3包根执行 .venv/bin/python run_notebook.py projects/project05/notebooks/p05_pairs.ipynb,新constructed主路线写唯一RUN_DIR,外层runner另保留执行副本与execution.json。它fresh运行三对screened/ungated形成与账本,给表与一图,不执行以下完整CLI网格。英文Notebook层、整包便携及冷启动归BIL23,本批未执行。下面是历史复核/维护命令,不是普通读者必须逐条运行的清单;build_notebook.py会写源Notebook。
.venv/bin/python projects/project05/run_project05.py --data constructed --out <新目录>/cli
.venv/bin/python projects/project05/make_figures.py --run <新目录>/cli --out <新目录>/figures
.venv/bin/python -m pytest projects/project05/tests/test_p05_pairs.py -q
.venv/bin/python projects/project05/solutions_code.py
cd projects/project05 && ../../.venv/bin/python notebooks/build_notebook.py
CLI默认读取 configs/preregistration_v2.json,在 summary.json 中记录其SHA256、选入规则、开盘预算和事件顺序;输出目录已存在时拒绝运行。先修与对应:第16、17章(平稳、协整与EG临界值);第29章(未复权价+公司行动账本);第31章(walk-forward);第35章(成本、融资、借券、防重扣);第36章(执行时钟与IS)。Part VI接口对照见 qa/a7/project05_batch/PART_VI_CONSISTENCY_c5.md。