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. 时间契约与可交易性假设
对持有月
- 训练窗:滞后 0 时
;滞后 1 时 。窗口内只用这些月份估计协方差和均值。 - 决策与成交:
月末收盘,按收益隐含的收盘价成交,无日内冲击。 - 持有:整个
月不交易;月末权重随收益漂移。 - 成本:成交时从净值扣除
。
滞后 0 假设“
本项目使用归一化权重换手代理(Weight-Turnover Proxy)收费:先用旧净值下的漂移权重与目标权重之差估算费用,再把扣费后的资金按目标权重投资。它不是逐笔成交金额的精确自融资模型。若要求精确交易额口径,令费用占旧净值比例为
这里
4. 方法
- 协方差:Ledoit–Wolf(2004)向缩放单位阵收缩(主规格);样本协方差(敏感性)。见 src/quant_course/portfolio_construction.py 的 ledoit_wolf_identity。
- 最小方差:第 9 章 solve_mean_variance,零均值、协方差先除以最大元素(权重不变,避免求解器容差失真),上限 40%。
- 最大 Sharpe:max_sharpe_long_only,用
变量替换得到凸二次规划(第 9 章第 7 节与 9-C01 给出变换条件的证明,第 21 章复述并实现),均值取窗口内行业收益减 RF 的样本均值,上限 40%。这里不是“未经证明的凸 QP”:比值目标本身非凹,凸性来自变换。 - ERC(不施加 40% 权重上限):risk_budget_weights,对
做 Newton 迭代,停止后核对每个资产的波动份额与 1/10 的偏差小于 ,否则报错。等权由定义每项 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 检查:训练窗早于持有月;修改未来收益不改变过去权重和收益;换手按漂移后的交易前权重计算;净收益
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% |
| 平均有效资产数 |
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% 的事前波动。主规格下各行业对年化平均毛收益的贡献(平均
| 行业 | 等权 | 最小方差 | 最大 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 在约
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;本项目指标与区间由本地代码计算,不是引文统计。