Project 5 练习解答
状态:继承已限定接受c5/ALIGN的构造教学数值,按最新整股支持域解释;本批未重跑历史CLI或参考解。所有数字由 .venv/bin/python projects/project05/solutions_code.py 实测打印(2026-10-10,候选清单 qa/a7/project05_batch/CANDIDATE_MANIFEST_c5.json)。P5-05至P5-09为教学构造面板结果,只演示方法。c1–c4按v1得到的旧结果原样保留在 qa/a7/project05_batch/evidence/,本文件只给c5结果。
P5-01
按题设的简化建仓情景,信号收盘至建仓没有拆股或股息,建仓价格为80/50;这里只估算股数,不另加入隔夜价格变化及成交成本。
w y = 1 / 2.2 = 0.454545 w_y=1/2.2=0.454545 w y = 1/2.2 = 0.454545 ,w x = − 1.2 / 2.2 = − 0.545455 w_x=-1.2/2.2=-0.545455 w x = − 1.2/2.2 = − 0.545455 ;美元暴露 + 454,545.45 +454{,}545.45 + 454 , 545.45 与 − 545,454.55 -545{,}454.55 − 545 , 454.55 。股数 n y = ⌊ 454,545.45 / 80 ⌋ = 5,681 n_y=\lfloor454{,}545.45/80\rfloor=5{,}681 n y = ⌊ 454 , 545.45/80 ⌋ = 5 , 681 ,n x = − ⌊ 545,454.55 / 50 ⌋ = − 10,909 n_x=-\lfloor545{,}454.55/50\rfloor=-10{,}909 n x = − ⌊ 545 , 454.55/50 ⌋ = − 10 , 909 。绝对股数比 ∣ n x ∣ / ∣ n y ∣ = 10,909 / 5,681 = 1.920261 |n_x|/|n_y|=10{,}909/5{,}681=1.920261 ∣ n x ∣/∣ n y ∣ = 10 , 909/5 , 681 = 1.920261 ,有符号股数比 n x / n y = − 1.920261 n_x/n_y=-1.920261 n x / n y = − 1.920261 ;取整前二者分别等于 ∣ β ∣ P y / P x = 1.92 |\beta|P_y/P_x=1.92 ∣ β ∣ P y / P x = 1.92 与 − β P y / P x -\beta P_y/P_x − β P y / P x ,取整后只近似相等。净美元暴露 5,681 × 80 − 10,909 × 50 = − 90,970 5{,}681\times80-10{,}909\times50=-90{,}970 5 , 681 × 80 − 10 , 909 × 50 = − 90 , 970 :美元中性不成立,因为对数回归的 β \beta β 是弹性(x x x 变动1%时 y y y 平均变动 β \beta β %),在拟合系数冻结且残差不变的局部一阶近似下,对冲的是共同的百分比 变动风险;残差、系数漂移、跳价及取整风险仍在,所以两腿美元比是 β \beta β ,股数比再乘 P y / P x P_y/P_x P y / P x 。水平回归的 b b b 单位是 ( U S D / s h a r e y ) / ( U S D / s h a r e x ) = s h a r e x / s h a r e y (\mathrm{USD/share}_y)/(\mathrm{USD/share}_x)=\mathrm{share}_x/\mathrm{share}_y ( USD/share y ) / ( USD/share x ) = share x / share y ,即每股 y y y 对应 b b b 股 x x x :有符号对冲比 n x / n y = − b n_x/n_y=-b n x / n y = − b ,绝对比 ∣ b ∣ |b| ∣ b ∣ 。两种 β \beta β 不能互换。
P5-02
这是独立公司行动情景:5,681/−10,909为事件前已有持仓,80/50为事件前收盘;不是对P5-01同一开盘事件再次换算。
y y y 股数 5,681 → 11,362 5{,}681\to11{,}362 5 , 681 → 11 , 362 ,现金不变(拆股不产生现金);标记价同步除以2。x x x 为空头,除息日现金 − 10,909 × 0.30 = − 3,272.70 -10{,}909\times0.30=-3{,}272.70 − 10 , 909 × 0.30 = − 3 , 272.70 (补偿出借方的股息)。TR步:y y y 为 2 ( 40.6 + 0 ) / 80 = 1.015 2(40.6+0)/80=1.015 2 ( 40.6 + 0 ) /80 = 1.015 ;x x x 为 ( 49.9 + 0.30 ) / 50 = 1.004 (49.9+0.30)/50=1.004 ( 49.9 + 0.30 ) /50 = 1.004 。成交与估值用未复权价并单独入账公司行动;信号用自建TR。若用供应商复权价成交,又在账本里加拆股与股息,会把同一事件计两次(第29章的禁止项)。
P5-03
回到P5-01原建仓:初现金1,000,000美元、无初持仓、零建仓费用,借券卖出所得在本构造模型可全部计息。目标毛暴露本身不能确定初NAV;此处NAV来自所给初始账户。
建仓后现金 C 0 = 1,000,000 − 5,681 × 80 + 10,909 × 50 = 1,090,970 C_0=1{,}000{,}000-5{,}681\times80+10{,}909\times50=1{,}090{,}970 C 0 = 1 , 000 , 000 − 5 , 681 × 80 + 10 , 909 × 50 = 1 , 090 , 970 。两腿标记市值为 454,480 − 545,450 = − 90,970 454{,}480-545{,}450=-90{,}970 454 , 480 − 545 , 450 = − 90 , 970 ,所以 N A V = C 0 − 90,970 = 1,000,000 NAV=C_0-90{,}970=1{,}000{,}000 N A V = C 0 − 90 , 970 = 1 , 000 , 000 。
按UTC或无DST切换周末,周五16:00至周一09:30为65.5小时,Δ d = 65.5 / 24 = 131 / 48 \Delta d=65.5/24=131/48 Δ d = 65.5/24 = 131/48 天。题设假定区间开始已知DFF=5.33%,不是本次新核历史观测。保留精确天数直至最后显示舍入:
I = 1,090,970 × ( 0.0533 − 0.0025 ) × 131 / 48 360 ≈ 420.1497.
I=1{,}090{,}970\times(0.0533-0.0025)\times\frac{131/48}{360}\approx420.1497.
I = 1 , 090 , 970 × ( 0.0533 − 0.0025 ) × 360 131/48 ≈ 420.1497. B = 10,909 × 50 × 0.0025 × 131 / 48 360 ≈ 10.3377.
B=10{,}909\times50\times0.0025\times\frac{131/48}{360}\approx10.3377.
B = 10 , 909 × 50 × 0.0025 × 360 131/48 ≈ 10.3377. C 1 = C 0 + I − B ≈ 1,091,379.8121.
C_1=C_0+I-B\approx1{,}091{,}379.8121.
C 1 = C 0 + I − B ≈ 1 , 091 , 379.8121. 利率、现金余额与空头标记均取区间开始时已可得值;周一开盘才可得的新价只用于之后区间(第35章)。本例不承接P5-02公司行动后的状态。
P5-04
P5-04:完整跨日IS手算与重复延迟反例
设 Q = − 10,000 Q=-10{,}000 Q = − 10 , 000 、F 1 = − 6,000 F_1=-6{,}000 F 1 = − 6 , 000 、F 2 = − 4,000 F_2=-4{,}000 F 2 = − 4 , 000 ,无截止余量。决策价 d = 41.00 d=41.00 d = 41.00 ,首次到达价 a 1 = 40.80 a_1=40.80 a 1 = 40.80 ,第二日开盘 a 2 = 40.50 a_2=40.50 a 2 = 40.50 ;费用每股0.005美元。半点差与冲击均已写入成交价:
p 1 = 40.80 ( 1 − 0.0002 − 0.0005 ) = 40.77144 ,
p_1=40.80(1-0.0002-0.0005)=40.77144,
p 1 = 40.80 ( 1 − 0.0002 − 0.0005 ) = 40.77144 , p 2 = 40.50 ( 1 − 0.0002 − 0.0004 ) = 40.47570.
p_2=40.50(1-0.0002-0.0004)=40.47570.
p 2 = 40.50 ( 1 − 0.0002 − 0.0004 ) = 40.47570. 保持首次到达锚的正确分解为
D = Q ( a 1 − d ) = 2,000 ,
D=Q(a_1-d)=2{,}000,
D = Q ( a 1 − d ) = 2 , 000 , E 1 = F 1 ( p 1 − a 1 ) = 171.36 , E 2 = F 2 ( p 2 − a 1 ) = 1,297.20 ,
E_1=F_1(p_1-a_1)=171.36,\quad E_2=F_2(p_2-a_1)=1{,}297.20,
E 1 = F 1 ( p 1 − a 1 ) = 171.36 , E 2 = F 2 ( p 2 − a 1 ) = 1 , 297.20 , C = ( ∣ F 1 ∣ + ∣ F 2 ∣ ) 0.005 = 50 ,
C=(|F_1|+|F_2|)0.005=50,
C = ( ∣ F 1 ∣ + ∣ F 2 ∣ ) 0.005 = 50 , I S = D + E 1 + E 2 + C = 3,518.56.
IS=D+E_1+E_2+C=3{,}518.56.
I S = D + E 1 + E 2 + C = 3 , 518.56. 直接金额法交叉核对:F 1 ( p 1 − d ) = 1,371.36 F_1(p_1-d)=1{,}371.36 F 1 ( p 1 − d ) = 1 , 371.36 ,F 2 ( p 2 − d ) = 2,097.20 F_2(p_2-d)=2{,}097.20 F 2 ( p 2 − d ) = 2 , 097.20 ;相加再加50仍为3,518.56。
产生4,318.56的具体错误是:保留原全额Q的 D = 2,000 D=2{,}000 D = 2 , 000 ,把第二日执行锚改为 a 2 a_2 a 2 ,又加 D 2 = F 2 ( a 2 − d ) = 2,000 D_2=F_2(a_2-d)=2{,}000 D 2 = F 2 ( a 2 − d ) = 2 , 000 。这时 E 2 ′ = F 2 ( p 2 − a 2 ) = 97.20 E'_2=F_2(p_2-a_2)=97.20 E 2 ′ = F 2 ( p 2 − a 2 ) = 97.20 ,所以
I S b a d = 2,000 + 171.36 + 97.20 + 2,000 + 50 = 4,318.56.
IS_{bad}=2{,}000+171.36+97.20+2{,}000+50=4{,}318.56.
I S ba d = 2 , 000 + 171.36 + 97.20 + 2 , 000 + 50 = 4 , 318.56. 额外800恰为 F 2 ( a 1 − d ) = ( − 4,000 ) ( − 0.20 ) F_2(a_1-d)=(-4{,}000)(-0.20) F 2 ( a 1 − d ) = ( − 4 , 000 ) ( − 0.20 ) ,即原剩余4,000股已计过的首次到达延迟。
重新锚定本身并非必错。若首日延迟只计 D 1 ′ = F 1 ( a 1 − d ) = 1,200 D'_1=F_1(a_1-d)=1{,}200 D 1 ′ = F 1 ( a 1 − d ) = 1 , 200 ,则 D 1 ′ + E 1 + D 2 + E 2 ′ + C = 3,518.56 D'_1+E_1+D_2+E'_2+C=3{,}518.56 D 1 ′ + E 1 + D 2 + E 2 ′ + C = 3 , 518.56 ,仍正确。另两种算法若保持原执行锚不动,只追加 F 2 ( a 2 − a 1 ) = 1,200 F_2(a_2-a_1)=1{,}200 F 2 ( a 2 − a 1 ) = 1 , 200 或 F 2 ( a 2 − d ) = 2,000 F_2(a_2-d)=2{,}000 F 2 ( a 2 − d ) = 2 , 000 ,额外分别为1,200或2,000,不能称为本题的800反例。本实现为避免歧义,每个母单只保存一个首次到达价;跨日补单不重计该延迟。
P5-05
窗
水平相关
日收益相关
EG p p p
0
0.833
0.810
0.725
1
0.539
0.781
0.544
2
0.860
0.779
0.483
3
0.964
0.796
0.350
4
0.976
0.793
0.655
5
0.876
0.810
0.950
6
0.735
0.802
0.731
7
0.559
0.798
0.866
8个窗口无一 p < 0.05 p<0.05 p < 0.05 。两条序列共享一个随机趋势加各自独立的随机游走,所以收益高度相关,但它们的线性组合仍含不可消去的随机游走:价差不平稳,没有均值回复可交易。水平相关在两个非平稳序列之间可以很高(伪相关),收益相关只说明同步波动,二者都不检验“价差是否回到均值”。
P5-06
未来价格乘1.5前后 β \beta β 都是1.191788,Formation逐项相同:形成步骤只读取形成期末及以前的行。形成期价差均值为0(OLS含截距时残差均值恒为0),全样本价差均值为0.011635。若用全样本均值或标准差标准化,z-score的中心与尺度就用了交易期价格,阈值穿越时点会改变,回测收益含未来信息。正确做法是冻结形成期的 α , β \alpha,\beta α , β 、均值和标准差,交易期只代入新价格。
可运行检验:solutions_code.py 的 leakage_checks()(随本文件主程序运行)分别检查三个通道:(a) 形成期参数不受形成期末之后价格影响;(b) 收盘 t t t 及之前信号的订单与 t t t 之前NAV不受 t t t 之后价格影响(实测2014-09-15,True);(c) 某日09:30成交不受当日全天成交量影响(实测2014-09-16,True)。对应pytest:pytest projects/project05/tests/test_p05_pairs.py -k "leakage or fill_day_volume"。三项都是必要条件,通过只排除这三个通道,不能证明实现完全没有泄漏。
P5-07
EG统计量 − 3.0636 -3.0636 − 3.0636 ;EG(MacKinnon协整残差)5%临界值 − 3.3483 -3.3483 − 3.3483 ,p = 0.0958 p=0.0958 p = 0.0958 ;普通ADF的5%临界值 − 2.8673 -2.8673 − 2.8673 。应使用EG临界值:残差来自估计的 β \beta β ,第一阶段估计了协整回归系数,使无协整零假设下残差检验的极限分布非标准;须匹配回归确定项、维数与样本规格使用EG临界值(第17章)。OLS降低RSS本身不能证明更快均值回复:把同一随机游走乘0.1会将RSS缩到0.01倍,却不改变相同规格下ADF统计量。误用 − 2.87 -2.87 − 2.87 会在5%水平拒绝原假设,宣称协整;正确结论是不能拒绝。即使数据由协整过程构造(ϕ = 0.97 \phi=0.97 ϕ = 0.97 ),504日内检验功效也有限,“未通过”不等于“不协整”。
P5-08
主规格(预注册v2:EG p < 0.05 p<0.05 p < 0.05 且 β > 0 \beta>0 β > 0 ):
配对
方式
总收益
超额Sharpe
有符号最深回撤 min(drawdown)
已闭合交易
胜率
平均持有(交易日)
年化单边换手
CA_CB
screened
0.0606
−0.1432
−0.0187
4
0.25
37.25
1.00
CA_CB
ungated
0.1171
0.4771
−0.0187
8
0.50
33.50
2.01
TA_TB
screened
0.0710
缺失(无交易)
0.0000
0
缺失
缺失
0.00
TA_TB
ungated
−0.0602
−0.8558
−0.0917
6
0.50
47.17
1.55
IA_IB
screened
0.0710
缺失(无交易)
0.0000
0
缺失
缺失
0.00
IA_IB
ungated
−0.0328
−0.2298
−0.3048
8
0.625
47.63
2.03
组合
screened
0.0676
−0.1485
−0.0058
4
0.25
37.25
0.33
组合
ungated
0.0081
−0.4717
−0.1232
22
0.545
42.36
1.86
共24次检验(3对×8窗);EG p < 0.05 p<0.05 p < 0.05 4次;v2选中3次(CA_CB窗2–4)。IA_IB窗5(p = 0.047 p=0.047 p = 0.047 ,β ^ = − 1.907 \hat\beta=-1.907 β ^ = − 1.907 )因 β ≤ 0 \beta\le0 β ≤ 0 被排除。若全为原假设,在每个零假设p值均正确校准时,由期望线性,预期 24 × 0.05 = 1.2 24\times0.05=1.2 24 × 0.05 = 1.2 个 p < 0.05 p<0.05 p < 0.05 ,无需独立;这里重叠窗口与共用序列不是24次独立试验。窗口内BH q < 0.10 q<0.10 q < 0.10 只有1个,仅作各窗口的描述,不保证全部相关窗口的FDR控制。无交易分仓的7.1%只是现金利息,超额收益是计息离散误差,Sharpe、胜率、持有天数记缺失。
选择效应:构造中协整的CA_CB在screened下只交易4次、超额Sharpe为负,ungated反而为正;筛选会漏掉真关系,也会放进假关系。v1(c1–c4,旧结果保留)选中4次,screened组合超额Sharpe 0.39,主要来自IA_IB的一次假阳性入选;v2排除该窗后screened组合为−0.15。不能把这个变化读成“v2更好”:v2是看过构造结果后、因项目范围(一多一空相对价值)和时点修复而冻结的设计变更,已在预注册中披露。IA_IB是已知独立的随机游走,它的入选没有真实协整依据;这一点来自构造的数据生成过程和多重检验,不能单凭 β \beta β 的符号推出。β < 0 \beta<0 β < 0 时两腿同向,同向仓位在一阶上也可以对冲负相关关系(例:β = − 1.2 \beta=-1.2 β = − 1.2 ,两腿美元45.45万与54.55万同向,d log y = − 1.2 d log x d\log y=-1.2\,d\log x d log y = − 1.2 d log x 时一阶总损益为0);v2排除它只是为了把项目限定为一多一空。252日形成窗下screened组合超额Sharpe −0.0211、ungated −0.7668。报告必须给出全部配对、全部窗口和ungated对照。
胜率与持有天数按“仓位事件”统计:从离开空仓的第一笔成交到两腿都回到零的那笔成交为一次交易;出场未完成时出现的新入场单并入同一次交易(记为reentry)。交易损益只含成交现金流、佣金、持仓期股息与借券费,不含现金利息;样本末仍未平仓的记为open,不进胜率。换手按实际成交金额计:双边 ∑ ∣ q ∣ P f i l l \sum|q|P^{fill} ∑ ∣ q ∣ P f i l l ,年化单边 = 0.5 × =0.5\times = 0.5 × 双边/ / / 日均NAV× 252 / N \times252/N × 252/ N ,不使用订单数量。
P5-09
开盘成交预算为截至信号收盘已知的ADV20的1%(换算到成交日拆股后股数);这是未校准的开盘成交情景,不保证实际参与率。matched:部分成交14行、出场补单4行,首次成交实际股数比与下单股数比的偏离在打印精度内为0。independent:部分成交14行、补单5行,偏离最多0.6376:同一信号下两腿实际对冲比偏离目标约64%,组合带着未对冲的方向风险。入场剩余撤单会降低或改变暴露,不预设损益方向:少建仓既可能少赚也可能少亏;matched 下整股取整仍留下小的对冲误差,independent 下两腿成交比例不同会产生失配。撤销出场余单不会消灭尚存仓位;剩余可能仍是匹配的两腿、失配仓位或单腿,取决于实际成交。例如原持仓Y100、X−200,按matched同比例平掉Y50、X−100,仍余Y50、X−100,股数比2保持,账户却并非空仓。在β=2、两腿等价格且残差不变的小变动一阶情景中,这个余仓的共同因子暴露仍为零。因此,本协议为完成既定退出意图逐日补单;不能把撤单当作已平仓。补单只有样本、容量与当前整股支持域允许时才能完成,不能承诺无条件归零。被新入场取代的剩余记一行机会成本,样本末仍未完成的按末日收盘计机会成本。当日全天成交量只在收盘后作诊断(day_participation_diag),不改变09:30成交。
P5-10(参考答案)
可以声称:实现了预注册v2的训练内筛选、冻结价差、次日开盘执行、双腿成本与融资账本;在教学构造数据上,账本现金守恒(残差约1e−9美元)、IS分解与直接金额法一致、未来价格扰动不改变形成期估计,并展示了相关≠协整、错误临界值与选择效应。不能声称:任何真实配对协整、盈利或在成本后有效;任何成本、借券或容量的真实水平。数据到位后,从数据节点(data/processed/p05/ 与 data_manifest.json)重跑:TR构建→全部8对×全部窗口形成与检验→screened与ungated账本→成本、阈值、形成窗与部分成交网格→图、Notebook与报告。预注册(v1、v2相同)的 claim_rule 要求:主规格的正结果须在成本网格与筛选效应对照(screened对ungated)下都保持,才可写“支持”。因此若组合超额Sharpe在较高成本档变为非正,或screened的优势只来自个别窗口或个别配对,结论应写“证据不支持该策略”,并保留全部负结果;阈值网格与252日形成窗只作描述,不能用来挑选更好的版本再报告同一样本。
P5-ALIGN:信号股数与IS参考价
信号收盘100美元、NAV 1,000,000、权重+0.5,次日股息1美元无拆股:目标5,000股,IS参考价99美元;负腿权重−0.5为−5,000股。拆股2:1且股息1美元时,目标先取整5,000再乘2为10,000股,IS参考价49美元。NAV为1,001时,先取整5.005为5再乘2为10股;不能用除息价增仓;NAV为1,199时,先取整5.995再乘2为10股,而先换算后取整会得到11股。十进制权益换算不等于支持实际零碎持仓退出。当前整股边界优先:输入0.3333333333333333不是精确1/3;空仓时5股目标乘1.5成为7.5股请求,实际成交7股后撤入场余单;已有5股持仓若拆股将成为7.5股,则在当日隔夜结息与公司行动入账前整账户失败,不留下可正常退出的半股。4乘1.5=6、5乘0.2=1仍在支持域。失败窗口不得删除后继续声称固定样本主结果;真实零碎成交或现金替代须另有已接受规则,详见EXECUTION_BOUNDARY。