QuantWeft量化经纬
English
本章小节

Project 3 研究报告:四种长仓组合的滚动样本外比较

历史研究日期:2026-10-06。本报告完整保留历史输入、数值与负结果;默认离线Notebook只跑独立的构造示例,见导读。本轮语言修订没有重新运行本报告。

1. 研究问题与可证伪假设

第 20 章说明:给定真实矩时,均值—方差优化是精确的;第 21 章说明:矩来自估计时,优化器会放大估计误差。本项目在同一数据、同一时点规则下比较四种长仓、满仓、月度再平衡的组合:

代号 组合 需要估计什么
equal_weight 等权 1/N 什么都不估计
min_variance 长仓最小方差,单资产上限 40% 协方差
max_sharpe 长仓最大 Sharpe,单资产上限 40% 协方差与超额均值
erc 等风险贡献(Equal Risk Contribution) 协方差

预先写下的假设(H1):使用估计矩的三种组合中,至少一种在计入成本后的样本外 Sharpe 或平均净收益上优于等权,且这种优势在窗口、协方差估计量和成本档变化时方向不变。若主规格下差值区间跨零或为负,或者优势只出现在部分敏感性设定中,则未通过本项目预设的优势筛选条件。该筛选不是已校准的联合假设检验。

作者回交声明:主规格在查看本项目的样本外结果之前已写入 configs/project03.json:窗口 60 个月、Ledoit–Wolf 收缩协方差、成本 10 bp/单位换手、上限 40%、滞后 0、评价期 1990-01 至 2026-08(440 个月)。作者后续修复了两处数值实现问题(ERC 停止准则、带上限可行性预检)并增加了 Sharpe 差的区间,均记录在 qa/a4/claude_a4/revision_log.md;这些修改没有改变任何策略参数。此为本地作者声明与修订记录,未在独立注册平台留存时间戳;研究本身使用已存在的历史数据,不能称为前瞻注册试验。

2. 数据

  • 资产:Kenneth R. French Data Library 的 10 Industry Portfolios,价值加权月度总收益(含股息),小数。
  • 无风险收益:FF3 文件的 RF 列,同月对齐。
  • 快照:2026-10-05 下载并冻结;读取器核对 6 个原始、提取与处理文件的 SHA-256(见 data_manifest.json)。
  • 可用样本 1926-07 至 2026-08;本项目最早用到 1979-12(W=120、滞后 1 的首个训练窗)。

限制:这是当前修订历史,没有历史版本和接收时间戳,不是点时(PIT)数据。行业组合是研究用发布组合,不是带买卖价、成交和容量信息的可交易产品;其分类、成分变化与退市处理在来源方法中完成,本项目没有审计。字段定义见 data_dictionary.md。

3. 时间契约与可交易性假设

对持有月 tt:

  1. 训练窗:滞后 0 时 [t−60,t−1][t-60,t-1];滞后 1 时 [t−61,t−2][t-61,t-2]。窗口内只用这些月份估计协方差和均值。
  2. 决策与成交:t−1t-1 月末收盘,按收益隐含的收盘价成交,无日内冲击。
  3. 持有:整个 tt 月不交易;月末权重随收益漂移。
  4. 成本:成交时从净值扣除 c×∑∣wtarget−wpre∣c\times\sum\lvert w^{target}-w^{pre}\rvert。

滞后 0 假设“t−1t-1 月收益在 t−1t-1 月末即可得”,French 数据的实际发布时间并非如此,所以主规格是理想化月边界。滞后 1 的敏感性显示这一假设对结论影响很小(第 8 节),但即使加了滞后,当前修订快照也不能变成可交易的历史记录。成本档 0/10/25/50 bp 是假设情景,不是对真实滑点的估计。

本项目使用归一化权重换手代理(Weight-Turnover Proxy)收费:先用旧净值下的漂移权重与目标权重之差估算费用,再把扣费后的资金按目标权重投资。它不是逐笔成交金额的精确自融资模型。若要求精确交易额口径,令费用占旧净值比例为 qq,实际交易金额占旧净值的向量为 (1−q)wtarget−wpre(1-q)\mathbf w^{target}-\mathbf w^{pre},必须联立

q=c∑i∣(1−q)witarget−wipre∣. q=c\sum_i\left|(1-q)w_i^{target}-w_i^{pre}\right|.

这里 cc 为每单位交易额成本率,wpre\mathbf w^{pre} 为交易前旧净值归一化资产权重(首月全为零),wtarget\mathbf w^{target} 为扣费后新净值归一化目标权重。当前代码采用 q≈c∑i∣witarget−wipre∣q\approx c\sum_i|w_i^{target}-w_i^{pre}|;费用引起的二次调整金额未另计。首月精确费用应为 c/(1+c)c/(1+c),当前为 cc;当 c=0.001c=0.001 时二者分别为 0.000999001 和 0.001。低成本下近似差小,但不能把此代理账本称真实成交账本。

4. 方法

  • 协方差:Ledoit–Wolf(2004)向缩放单位阵收缩(主规格);样本协方差(敏感性)。见 src/quant_course/portfolio_construction.py 的 ledoit_wolf_identity。
  • 最小方差:第 9 章 solve_mean_variance,零均值、协方差先除以最大元素(权重不变,避免求解器容差失真),上限 40%。
  • 最大 Sharpe:max_sharpe_long_only,用 (y,κ)(\mathbf{y},\kappa) 变量替换得到凸二次规划(第 9 章第 7 节与 9-C01 给出变换条件的证明,第 21 章复述并实现),均值取窗口内行业收益减 RF 的样本均值,上限 40%。这里不是“未经证明的凸 QP”:比值目标本身非凹,凸性来自变换。
  • ERC(不施加 40% 权重上限):risk_budget_weights,对 12y⊤Σy−∑ibiln⁡yi\tfrac12\mathbf{y}^\top\Sigma\mathbf{y}-\sum_ib_i\ln y_i 做 Newton 迭代,停止后核对每个资产的波动份额与 1/10 的偏差小于 10−610^{-6},否则报错。等权由定义每项 10%;ERC 是无上限的风险预算解,主规格实测最大权重约 19.83%,但这是本样本结果,不是约束保证。只有最小方差和最大 Sharpe 明确施加 40% 上限,其他数据上比较时应重新审查可行性。
  • 回退:仅优化调用所在try块捕获异常时,当月改持等权并记录原因;数据校验、协方差估计以及其后risk_contributions等不在该捕获范围,失败可直接终止,不能概括为所有输入错误都会回退。不用 shuffled K-fold,也不在评价期调参。

5. 账本一致性

每个策略、每个月记录(修订后的 primary_ledger.csv 含逐行业 pre_weight_*、target_weight_* 列和建仓现金权重):训练窗、状态、交易前权重(上月目标权重经上月收益漂移)、目标权重、换手、成本、毛收益、净收益、RF。tests/test_project03_backtest.py 检查:训练窗早于持有月;修改未来收益不改变过去权重和收益;换手按漂移后的交易前权重计算;净收益 =(1−cost)(1+gross)−1=(1-\text{cost})(1+\text{gross})-1;毛收益等于目标权重乘当月收益;长仓、满仓和上限成立;回退被记录。建仓前从现金开始,持有期没有现金、借款或卖空,RF 只用于超额收益。information_cutoff 为训练窗末月,decision_at/trade_at 始终为持有月前一月末;滞后只让信息截止更早,不将成交时点也前移。

6. 主规格结果(W60、Ledoit–Wolf、10 bp、上限 40%、滞后 0;1990-01..2026-08,440 个月)

指标 等权 最小方差 最大 Sharpe ERC
年化平均净超额收益 9.05% 7.03% 8.01% 8.66%
年化净波动 14.32% 11.78% 14.36% 13.37%
年化净 Sharpe 0.631 0.596 0.558 0.648
年化毛 Sharpe 0.634 0.605 0.576 0.650
净 CAGR 11.25% 9.42% 10.11% 10.98%
最大回撤(净) −48.1% −36.4% −41.5% −45.5%
平均月换手(不含首月) 2.6% 8.6% 21.5% 2.8%
年化平均费用占旧净值 0.03% 0.11% 0.26% 0.04%
年化平均毛净收益差(bp) 3.37 10.65 26.20 3.64
平均最大权重 10.0% 35.9% 37.8% 15.5%
平均有效资产数 1/∑w21/\sum w^2 10.0 4.0 3.5 9.3
平均最大事前风险份额 15.9% 35.4% 43.5% 10.0%
回退月数 0 0 1 0

净财富

图 1:横轴为月末,纵轴为对数刻度的净财富,1989-12 月末为 1.0。四条线计入 10 bp 成本。读法:等权与 ERC 几乎重合并居于最高;最小方差在 2000–2002 和 2008 年回撤较浅,但长期增长最慢;最大 Sharpe 路径波动最大。

目标权重

图 2:三组堆叠面积图,横轴为持有月,纵轴为目标权重(和为 1),颜色对应 10 个行业。读法:最小方差长期集中在 Utils、NoDur、Hlth 并常触 40% 上限;最大 Sharpe 每隔几个月整体换仓,追随最近 60 个月均值最高的行业(如 2003–2008 的 Enrgy、2019 年后的 HiTec);ERC 权重缓慢变化,接近等权。

7. 推断:差值是否区别于零

用循环移动块自助法(块长 12 个月,5,000 次,种子 20261006)对“策略月净收益 − 等权月净收益”的均值,以及成对重抽样的年化净 Sharpe 差,求 95% 百分位区间:

策略 平均净收益差(年化) 95% 区间 抽样中 >0 的比例 Sharpe 差 95% 区间 抽样中 >0 的比例
最小方差 −2.01% [−3.97%, −0.06%] 2.2% −0.035 [−0.174, 0.101] 29.2%
最大 Sharpe −1.04% [−3.30%, 1.27%] 18.4% −0.073 [−0.236, 0.089] 18.0%
ERC −0.38% [−0.92%, 0.13%] 7.8% +0.016 [−0.014, 0.050] 84.1%

相对等权

图 3:横轴为年化平均净收益差(%),点为点估计,误差线为 95% 块自助法区间,红线为零。

解读:最小方差的平均净收益差在未校正的单项 95% 区间中低于零,波动更低,风险调整后与等权无法区分。最大 Sharpe 在两个口径上都为负、区间跨零。ERC 的 Sharpe 点估计略高(0.016),但区间跨零,平均收益略低。三个组合都没有通过 H1 的研究筛选门槛。区间跨零表示未获得优势的充分证据,不能证明策略等价或总体优势为零。循环块法还假设所抽取的块能代表目标过程,跨1990–2026年的非平稳性不因分块自动消失;百分位区间与“抽样中>0比例”都不是后验优势概率或已校准的联合p值。区间只反映该重抽样方案下的不确定性,没有覆盖模型选择、数据修订和多重比较(本报告比较了 3 个策略 × 2 个指标,未做多重检验校正)。

8. 稳健性:窗口、协方差估计量、滞后与成本

完整表在 outputs/sensitivity.csv(12 规格 × 4 策略 × 4 成本档,共 192 行,全部保留)。10 bp 下的年化净 Sharpe:

规格 等权 最小方差 最大 Sharpe ERC
W36、LW、滞后 0 0.631 0.572 0.474 0.637
W60、LW、滞后 0(主) 0.631 0.596 0.558 0.648
W120、LW、滞后 0 0.631 0.617 0.549 0.647
W60、样本协方差、滞后 0 0.631 0.577 0.551 0.648
W60、LW、滞后 1 0.631 0.597 0.556 0.649

成本档(主规格,0/10/25/50 bp):等权 0.634/0.631/0.628/0.622;最小方差 0.605/0.596/0.583/0.560;最大 Sharpe 0.576/0.558/0.531/0.485;ERC 0.650/0.648/0.643/0.636。

敏感性

图 4:左图横轴为每单位换手成本(bp),纵轴为年化净 Sharpe;右图横轴为训练窗口(月),成本固定 10 bp。读法:最大 Sharpe 的斜率最陡(换手最高);窗口越短,均值估计越嘈杂,最大 Sharpe 和最小方差越差;ERC 与等权对两者都不敏感。

发现:

  • 排序在所有 12 个规格中相同:ERC 与等权接近,最小方差其次,最大 Sharpe 最低。
  • 收缩协方差对最小方差有小幅帮助(W60:0.596 对 0.577),对 ERC 几乎无影响。
  • 滞后 1 个月几乎不改变结果。这说明结论对“月末即可得”假设不敏感,不说明数据是 PIT。
  • W36 下最大 Sharpe 有 14 个月回退:其中 8 个月所有行业训练窗超额均值为负,6 个月存在正均值行业但 40% 上限下不存在正超额组合(2009 年前后)。

9. 子期

期间 等权 最小方差 最大 Sharpe ERC
1990-01..2007-12 净 Sharpe 0.611 0.494 0.534 0.628
2008-01..2026-08 净 Sharpe 0.653 0.686 0.579 0.668
1990-01..2007-12 最大回撤 −31.3% −30.9% −39.4% −28.7%
2008-01..2026-08 最大回撤 −45.8% −34.7% −41.5% −43.5%

最小方差只在后一子期 Sharpe 高于等权,排序随子期改变,不能外推。

10. 集中度、风险与收益来源

最小方差和最大 Sharpe 平均只有约 4 个有效资产,最大事前风险份额 35%–44%;ERC 按构造使每个行业贡献约 10% 的事前波动。主规格下各行业对年化平均毛收益的贡献(平均 wi,tRi,t×1200w_{i,t}R_{i,t}\times1200,%/年):

行业 等权 最小方差 最大 Sharpe ERC
NoDur 1.03 2.01 1.57 1.20
Durbl 1.36 0.19 −0.12 0.91
Manuf 1.23 0.46 1.01 1.07
Enrgy 1.20 1.19 1.79 1.21
HiTec 1.60 0.43 3.11 1.34
Telcm 0.78 0.02 0.28 0.78
Shops 1.25 1.13 0.90 1.23
Hlth 1.21 1.45 1.17 1.30
Utils 0.99 2.89 0.49 1.46
Other 1.11 0.07 0.77 0.89
合计 11.76 9.84 10.97 11.39

最小方差少持了评价期均值较高的 Durbl、HiTec、Manuf,把权重放在均值偏低的 Utils、NoDur,这解释了它约 2% 的年化收益缺口:低波动换来的是更低的平均收益,不是“免费”的风险下降。这是同期收益的会计分解,不是因果归因。

11. 后见之明对照(不可交易)

用整个评价期 1990-01..2026-08 的样本矩、同样 40% 上限计算最大 Sharpe 权重,固定目标权重毛收益路径的年化 Sharpe 为 0.754(分母使用同月毛收益减 RF 的样本标准差)(Utils 31%、Hlth 29%、HiTec 18%、Shops 16%、Enrgy 4%、NoDur 2%)。同样零成本下滚动版本为 0.576;计入10 bp费用后为0.558。求解器对给定样本矩的目标值为0.753856,分母是资产毛收益协方差,路径口径为0.754281,分母是实现超额收益标准差;RF随月变化使两者略有差别,不能混称同一数值。样本内组合用到了评价期全部信息,同时其估计窗、固定权重与滚动策略也不同;这些差值不是单独识别出的前视偏差因果效应,不能作为可交易表现。

12. 求解失败与回退记录

主规格:最大 Sharpe 1 个月回退(2003-04,40% 上限下无正超额组合);其他策略 0 次。全部 12 个规格的记录在 outputs/fallback_log.csv。开发过程中出现过两类实现问题:ERC Newton 在约 10−1210^{-12} 处停滞,旧代码误报“未收敛”并回退等权;CLARABEL 对带上限的不可行问题返回 infeasible。两者都已修复并说明原因,修复后 ERC 回退为 0,所有 infeasible 都被预检识别为输入导致。

13. 负结果与零结果

本项目的主要发现是负的:在 10 个行业、月频、长仓约束下,三种估计矩的组合都没有在成本后可信地优于等权。最大 Sharpe 是唯一使用均值估计的组合,也是表现最差、换手最高、对成本和窗口最敏感的组合,这与第 21 章的估计误差模拟和 DeMiguel、Garlappi、Uppal 工作论文版的结论方向一致(本项目只读了该文 2006 年会议稿的方法与摘要)。ERC与等权的差值区间跨零,当前样本未检出收益优势,也不证明等效;其事前风险分布更均匀,但本项目不据此宣称更高收益。

14. 局限

  • 当前修订历史、非 PIT;行业组合不可直接交易;不含借券、融资、税费和容量限制。
  • 只有 10 个资产,结论不能推广到大规模股票池。
  • 月频决策,忽略月内路径和执行时间。
  • 成本是线性比例假设,没有冲击成本和非线性规模效应。
  • 块自助法假设块内依赖足以刻画序列相关;未对多重比较做校正。
  • 只测试了一个上限(40%)和一种均值估计(样本均值);更多变体会增加选择偏差,应另行预注册。

15. 结论

在本项目的数据与假设下,三种策略都未通过 H1 的研究筛选门槛;这不是对“总体优势存在”的正式统计拒绝。等权与 ERC 在样本外净 Sharpe 上难以区分;最小方差降低了波动和回撤,但付出了点估计更低、未校正单项区间低于零的平均收益;最大 Sharpe 的费用敏感性与换手最高;均值估计误差是理论上的可能机制,当前对比没有单独识别其因果贡献。任何高 Sharpe 的样本内组合都不构成可交易优势的证据。

16. 历史复现路线

.venv/bin/python projects/project03/run_project03.py
.venv/bin/python -m pytest tests/test_project03_backtest.py tests/test_ch21_portfolio_construction.py -q

上述CLI是历史课程工作根命令,需对应环境与获授权的数据;历史记录耗时约25秒,不是当前默认运行承诺。该路线写入 projects/project03/outputs/ 和 figures/projects/project03_*.png;默认离线构造入口不执行它、不生成本报告的Bootstrap或敏感性表。Notebook:notebooks/project03_portfolio_oos.ipynb。练习与解答:exercises.md、solutions.md。

17. 来源与审核范围

滚动窗口与漂移后权重换手依据:DeMiguel、Garlappi、Uppal 2006会议稿 §3(印刷10–12页,式10–13);收益差/年化边界依据:Sharpe 1994作者网页 Definitions、Time Dependence段。历史审核实际核读上述范围,未称2009期刊终稿已读。协方差/ERC原文作者阅读范围见第21章来源记录,数据来源/hash见manifest;本项目指标与区间由本地代码计算,不是引文统计。

搜索教材

输入关键词开始搜索。