QuantWeft量化经纬
English
本章小节

项目4成本与执行实验室(A7-B实现套件)

课程:量化投资组合策略与市场微观结构
教学范围:成本、执行与账本接口
数据状态:固定随机种子 20261210 的构造教学数据;不是市场实证
作者:Yuxiao Ma
接口与数据边界:仓库根目录下的 qa/a7/ch35_ch36_batch/INTERFACE_CONTRACT.md 与 qa/a7/ch35_ch36_batch/SOURCE_DATA_GAP.md

1. 目标与适用边界

本实验室把参考价格成交的无摩擦模型扩展为含构造价差、冲击、佣金、融资与借券成本的成交级账本,供读者逐项追踪假设如何影响现金、持仓、净值及执行评价。时间加权平均价格(Time-Weighted Average Price, TWAP)按时间切分父单;成交量加权平均价格(Volume-Weighted Average Price, VWAP)依预先冻结的成交量预测曲线分配子单;成交量参与率(Percentage of Volume, POV)只依发送时可得的滞后成交量确定子单量。

当前项目源代码实现位于仓库根目录下的 src/quant_course/execution_costs.py 与 projects/project04/cost_execution_lab/p4_cost_bridge.py。固定父单比较和部分成交示例是构造的小账;它们不能替代全量策略结果。完整P4还依赖项目其他信号、配置、数据与代码文件,因此本目录文档本身不是可独立运行的完整软件包。

2. 路径与结果身份

下列路径均相对于完整课程仓库根目录。本目录提供四份双语成本读者文档,配有两语Notebook投影;代码、配置与历史摘要仍以各自已保存的仓库版本为准。

projects/project04/cost_execution_lab/
├── README.md
├── config.json
├── data_dictionary.md
├── p4_cost_bridge.py
├── research_report.md
├── solutions.md
└── cost_execution_lab.ipynb
src/quant_course/execution_costs.py
build/batches/INTEGRATION-PREP/p04_cost_refresh_20261014/runs/current_signal_01/cli/summary_results.json
fixtures/projects/project04/summary_results_current_signal_20261014.json
qa/a7/ch35_ch36_batch/independent_acceptance/rev2/r2r6/candidate/projects/project04/cost_execution_lab/outputs/a7b_rev2r6_20261009/summary_results.json

三个结果身份须分开引用:2026-10-09的A7-B R2R6是旧信号层历史基线;2026-10-14的当前信号刷新是另一份已接受的构造工程消费者摘要;I3读者Notebook则只重算固定父单与流动性压力小例,其余长期结果从当前信号摘要读取。相同种子不意味着不同信号来源或不同运行拥有逐元素相同的历史路径。

3. 核心接口、时钟与账本约定

父单和子单使用带符号股数:买单为正、卖单为负。对单个父单,成交股数总和为 F=∑ifiF=\sum_i f_i,截止余量为 RR,必须满足 Q=F+RQ=F+R。本引擎的实施短缺(Implementation Shortfall, IS)接口还要求非零父单的每笔成交方向与父单一致,不能把跨父单相互抵销的成交拼在一起套用本例。零成交时,成交量加权成交价(fill VWAP)无定义,记为 None/NaN,不能记成0;没有实际成交就没有成交佣金。

成交价按

Pfill=Pmid+sgn⁡(f)(half-spread+temporary impact) P_{\mathrm{fill}}=P_{\mathrm{mid}}+\operatorname{sgn}(f)(\text{half-spread}+\text{temporary impact})

计算。半价差和暂时冲击已经嵌入成交价,现金账本不再另扣一次;永久冲击改变之后的中间价,并通过后续估值进入净值。若把价差或冲击重复列作现金费用,且同时把该额也当作显式费用纳入两个IS算法,IS分解与直接算法仍可能彼此相等;这不能证明费用口径正确。应分别核对成交价、佣金字段和现金分录。

IS按延迟成本、相对到达价的成交成本、截止余量机会成本与显式费用分解;在 Q=F+RQ=F+R、成交方向有效且费用只计一次时,与直接金额算法恒等。到达价是基准时刻,不等同于父单接收或子单到达。

模拟默认采用排除自成交量口径(exclusive):ρexcl=∣f∣/Vexternal\rho_{\mathrm{excl}}=|f|/V_{\mathrm{external}},因此单槽容量为 ρexclVrealized\rho_{\mathrm{excl}}V_{\mathrm{realized}}。换成包含自成交量口径(inclusive)时,ρincl=∣f∣/(Vexternal+∣f∣)=ρexcl/(1+ρexcl)\rho_{\mathrm{incl}}=|f|/(V_{\mathrm{external}}+|f|)=\rho_{\mathrm{excl}}/(1+\rho_{\mathrm{excl}});反向转换为 ρexcl=ρincl/(1−ρincl)\rho_{\mathrm{excl}}=\rho_{\mathrm{incl}}/(1-\rho_{\mathrm{incl}})。例如排除自成交量口径20%对应包含自成交量口径16.67%;包含自成交量口径20%对应排除自成交量口径25%。代码提供口径转换和容量辅助函数,但本项目配置与成交模拟使用排除自成交量口径。

VWAP预测曲线在首个子单发送前冻结;POV只使用发送时已经可得的滞后成交量。当前槽的真实成交量在发送时不可见,只能在之后限制该槽成交容量并用于事后汇总。每个发送时点可使用此前已经发生且严格早于该时点的成交;同一时间戳的成交确认晚于发送,不能反馈到该次子单。尚未确认的早先子单量会预留,防止重复下单。若改变了会在后续发送前确认的早先成交,后续子单随剩余父单变化是合法的历史成交反馈,不等于使用未来成交量。固定POV不会为了追上父单而自动提高参与率;余量可能保留至截止时点。

成本账本按单调递增的UTC事件时钟结息。每段使用段初现金、空头股数、当时已可得标记价和ACT/360简单计息;利息在事件点入账,成为下一段的现金基数。成交、每个槽末标记(含无成交槽)、终端标记与月末都会结算;事件时点新出现的标记价不能回溯定价刚结束的区间。

投资组合收益按月末至月末计算,初始净值为首段起点。调仓规模和换手率以调仓时点结清融资后的净值为分母。换手统计只计可交易风险资产,不计现金权重变化;一侧换手为绝对成交名义金额总和的一半除以调仓净值,总换手不除以2。报告年化换手为月度算术均值乘12,13个日内执行槽不是13个组合收益期。

4. 阅读与复现路径

先读本目录的数据字典、研究报告和六题完整答案,再对照上述仓库根目录中的接口代码、配置和带版本标识的结果摘要。构造成交量曲线使用60条来自声明U形数据生成过程(data-generating process, DGP)的合成训练样本,并非实测市场成交量。

I3读者候选中的Notebook位于 projects/project04/cost_execution_lab/cost_execution_lab.ipynb。它从项目配置加载成本与槽数,重新计算冻结成交量曲线、10,000股固定父单买卖比较和5,000股成交压力例,并将小例与当前信号摘要核对。其余96个月走步结果、高摩擦情景、敏感度、消融与账本审计是从已保存的当前摘要重放;Notebook不默认重跑完整走步研究。Notebook执行会在仓库根目录创建唯一 runs/cost_execution_lab_<随机标识>/ 子目录并写入图像,因此需要完整仓库及其运行依赖;本候选文档没有携带这些运行文件。

成本配置明确输入97个月(2013-12起),首月为预热,形成2014-01至2021-12的96个月收益,其中60个月训练(2014-01至2018-12)、36个月测试(2019-01至2021-12)。请勿把函数默认的96个月信号输入与成本CLI配置的97个月输入混为同一序列。

5. 结果读法

R2R6旧信号层的测试期复合年化增长率(Compound Annual Growth Rate, CAGR)/年化夏普比率均为负:GROSS为−2.09%/−0.34,TWAP为−2.72%/−0.44,VWAP为−2.71%/−0.44,POV为−6.62%/−1.12。高摩擦R2R6情景下净CAGR/夏普比率为−8.01%/−1.54。它显示的是该构造路径的账本与成本变化,不是正的毛Alpha被成本抹去的证据。

2026-10-14当前信号刷新使用同一成本配置的97个输入月和96个收益月,但信号消费者身份不同。其36个月测试期CAGR/年化夏普比率为:GROSS −1.9560%/−0.3334,TWAP −2.3459%/−0.4014,VWAP −2.3327%/−0.3994,POV −6.0717%/−1.0800。高摩擦情景净CAGR/夏普比率为−7.4392%/−1.5050。敏感度网格中有正值也有负值;未从网格选出赢家,网格不是策略选择或实证结论。

固定10,000股父单的单路径IS结果、流动性压力表、完整R2R6负结果、当前刷新摘要与路径定义见研究报告。这些数值不能脱离各自的结果身份和构造假设比较。

6. 数据缺口

输入不是点时历史财务报表、真实历史证券池、逐笔委托簿、经纪商成交/佣金记录、点时借券可用性或校准后的日内成交量。构造执行日为每月第三个自然日UTC,不是交易所日历;每次有13个半小时槽,起点为09:30至15:30 UTC,槽内成交事件在起点后15分钟,最后时点为16:00,终端标记为16:00:30。结果不证明真实Alpha、实际交易成本、商业容量或完整P4策略有效性。目标权重缩放会同时改变目标换手与总风险敞口,因此是联合情景,不是单独的换手干预。

搜索教材

输入关键词开始搜索。