ETF轮动:把趋势质量、资产切换和仓位控制放在一起
两套原策略的结论发生了什么变化
第一轮审计中,线上52周高策略的已公布历史持仓重估,年化7.95%、最大回撤-33.07%;原39只行业ETF的NAV120单持仓,年化14.31%、回撤-45.77%。这两项截至2026-08-10。它们的集中风险和成本口径不能支持直接用于实盘。此前10%波动预算的保守改版改善了回撤,但约10%年化也不符合本轮更高收益目标。
提高仓位本身没有解决问题:本轮不做波动缩减的趋势方案虽有20%以上年化,却出现38%—41%的全期回撤。改善来自三件事同时使用:按趋势质量选行业,在市场转弱时把风险资金转到黄金,以及估计波动升高时减少持仓。黄金是另一项风险资产,不能被视为保本资产。
主回测比较
| 策略 | 年化收益 | 最大回撤 | 夏普 |
|---|---|---|---|
| 固定50%沪深300、25%黄金、25%国债 | 9.58% | -18.95% | 0.910 |
| 单持黄金ETF | 16.48% | -30.52% | 0.999 |
| 历史大池NAV120,单行业满仓 | 10.96% | -59.85% | 0.461 |
| 40日趋势质量,月度,最终候选 | 25.62% | -22.24% | 1.062 |
| 90日趋势质量,周度,对照候选 | 24.41% | -17.53% | 1.125 |
| 多窗口动量,周度,对照候选 | 24.65% | -19.24% | 1.047 |
可以复现的规则
- 行业与主题股票ETF需在当日已有200个有效价格交易日,20日平均成交额至少1000万元;按当时上市、退市状态与可交易报价过滤。历史池含退市产品,最终候选没有实际持有已退市基金。仍缺历史分类快照和完整退市清算资料。
- 用拆分调整后的价格收益构造价格序列,对最近40个交易日的log价格做直线拟合,评分为244 × 斜率 × R²,选择最高的一只。不是按全年收益事后找赢家,也不再依赖NAV公告作为选股信号。NAV仍可用于实际折溢价检查。
- 每月最后一个实际交易日收盘检查沪深300是否高于120日均线。高于时目标为所选行业ETF;低于或没有合格行业ETF时目标为黄金ETF518880.SH。每月一次判断,月间保持持仓自然漂移。
- 用最近60个交易日目标组合的价格收益,计算年化波动。仓位乘min(1,25% ÷ 估计波动),不放大仓位,不借款,未投入资金留现金。25%是估计波动预算,不是回撤上限;过去最大回撤22.24%也不是未来损失保证。
- 信号后一交易日收盘调仓,旧持仓收益保留到实际成交;买卖都计成本。没有必需报价时推迟整次替换。缓存止于月中时,日历仍使用该月真实完整交易日,避免把缓存末日误当月末。
- 执行近似使用100份买入单位,先卖后买,保留最低5元佣金和滑点;单笔不超过前一日已知20日均成交额的1%。未完成金额留现金或原持仓,到下一次计划换仓再评估。已有账户需以真实资金与持仓生成净额订单。
主样本平均投入比例87.1%,年化买卖总成交金额约净资产的13.03倍。模型允许集中持有一只行业ETF或黄金,资产分散程度有限;这也是保留仓位缩减的原因。
参数选择和阶段表现
| 阶段 | 年化收益 | 最大回撤 | 交易日数 |
|---|---|---|---|
| 2019—2021,训练 | 31.33% | -18.32% | 730 |
| 2022—2023,参数验证 | 19.34% | -19.35% | 484 |
| 2024年以来,近期探索 | 24.11% | -19.58% | 631 |
第一轮2,592组参数及180组防御细化,第二轮8,748组资产切换组合。按2019—2023的收益排序,先筛回撤不超过30%、2022—2023年化不低于−5%及过期持仓占比低于1%。第二轮查看后,另加必须具有波动控制的门槛,再冻结每个信号家族的领先方案。此研究过程具有适应性,不能包装成完全预注册验证。
2024年以来数据已被之前研究及本轮多次查看,统一标为近期探索。选择比较与多重试验会高估收益。相对固定配置的60日成对区块重采样,年化差5%/50%/95%分位为-0.13/15.64/36.49个百分点,正差比例94.8%;区间仍跨零,而且没有修正参数选择偏差,不能据此宣称稳定超额已被证明。
| 年份 | 年化收益 | 该年最大回撤 | 交易日数 |
|---|---|---|---|
| 2019 | 6.30% | -15.61% | 244 |
| 2020 | 72.09% | -16.57% | 243 |
| 2021 | 23.94% | -13.90% | 243 |
| 2022 | -11.52% | -19.35% | 242 |
| 2023 | 60.96% | -12.56% | 242 |
| 2024 | -2.70% | -13.12% | 242 |
| 2025 | 52.24% | -11.53% | 243 |
| 2026 | 32.22% | -19.58% | 146 |
2026年只有部分年度,表中为年化数值。2022年亏损约11.5%,2024年也亏损。滚动244个交易日的最差收益为-19.47%,其中46.75%的窗口没有达到20%。去掉2020年后,其他年份的拼接收益年化为19.77%;这只是收益依赖诊断,不是重新训练后的回测。
成本和调仓日期压力
| 压力场景 | 年化收益 | 最大回撤 | 夏普 |
|---|---|---|---|
| 买卖各0.30% | 24.00% | -22.66% | 1.008 |
| 买卖各0.50% | 20.81% | -23.51% | 0.899 |
| 月末信号提前1日 | 27.44% | -20.59% | 1.130 |
| 月末信号提前2日 | 25.00% | -26.73% | 1.032 |
| 波动预算20% | 21.81% | -18.35% | 1.062 |
| 波动预算30% | 26.81% | -24.66% | 1.017 |
| 月末信号提前5日 | 20.63% | -22.16% | 0.937 |
| 月末信号提前10日 | 18.92% | -26.07% | 0.856 |
没有改用敏感性表中事后最好的日期、波动预算或均线参数。两个周度对照虽有较高主回测收益,却更怕换仓日期和交易成本:90日趋势质量方案买卖各0.50%时降为18.01%,信号提前2日降为16.60%;多窗口周度方案成本各0.50%时为14.05%。因此保留月度方案继续跟踪。
窗口不是任意换都能成立
| 趋势窗口 | 市场MA100,年化/回撤 | 市场MA120,年化/回撤 | 市场MA140,年化/回撤 |
|---|---|---|---|
| 30 | 27.07% / -27.32% | 23.71% / -23.35% | 25.33% / -24.01% |
| 40 | 31.97% / -25.37% | 25.62% / -22.24% | 28.48% / -25.03% |
| 50 | 24.99% / -26.88% | 21.81% / -21.33% | 22.03% / -25.01% |
| 60 | 19.75% / -23.21% | 16.61% / -22.10% | 15.29% / -30.99% |
30—50日邻近窗口多数维持20%以上收益,60日窗口明显下降,且60日/MA140出现超过30%的回撤。MA100的31.97%只是探索结果,没有据此替换冻结的MA120。原39只池敏感性年化22.24%、回撤-22.77%,说明结果并非完全依赖扩大历史池;该39只池仍有当前选池偏差。
历史池实际入选过银行AH价格优选ETF517900.SH,不能把原结果严格说成全部只持A股。进一步剔除AH、沪港、港股及海外关键词后,年化28.28%、回撤-22.24%,属于分类边界敏感性,不用较高结果抬升主指标。同样的市场均线、黄金切换与风险规则,只把行业选择换成沪深300,年化4.69%;行业选择在本样本中有贡献,但仍需未来验证。
账户规模与执行近似
| 初始资金 | 离散订单年化 | 最大回撤 | 订单数 |
|---|---|---|---|
| 10万元 | 26.20% | -19.54% | 136 |
| 30万元 | 29.24% | -18.40% | 146 |
| 100万元 | 29.40% | -18.22% | 150 |
容量约束改变了实际持仓轨迹,有时恰好提高历史收益;这些高于主回测的数字不能理解为真实成交必然更好。此试验对买单检验100份整数倍、现金不为负、总风险暴露不超过100%,最大参与率为前一日已知均成交额的1%。拆分和派息通过调整收益计价,尚未逐笔重建券商分红到账日、竞价排队、涨跌停、买卖价差及盘口冲击。
数据时点与下一步使用
本轮完整历史池的主样本截至2026-08-11,原39只池截至2026-08-10。最后历史模型持有黄金,但不能当作2026年10月的实时指令。没有用第一轮39只池的9月30日数据假装更新454只历史池的新方案。进一步实盘化需用整个合格价格池的新行情生成信号,再按账户现有持仓净额执行;冻结后的实际跟踪业绩才是新的样本外证据。
可用行业日线缓存从2018年开始,200日入池门槛使早期大多属于预热,无法验证2015股灾。净值历史修订、名称与分类变更、当前历史池完整性、ETF现金分红的逐笔结算仍是限制。价格缓存、原研究报告、线上策略和只增不改台账未被覆盖。
复现和文件
python3 my-app/public/reports/etf-return20-20261003/backtest.py # 重跑完整网格(顺序执行) python3 my-app/public/reports/etf-return20-20261003/backtest.py --full-search python3 -m unittest discover -s research -p 'test_etf_return20_study.py' -v python3 -m unittest discover -s research -p 'test_etf_practical_optimization.py' -v
冻结规则 · 验证指标 · 额外敏感性 · 逐日权重 · 每月信号 · 10万元离散订单 · 逐日收益 · 初始设计 · 第二轮设计 · 冻结候选及选择过程 · 输入校验清单 · 复现依赖
独立Python与编译账本逐日收益一致;23项账本及边界测试覆盖旧持仓收益、双边成本、缺行情延迟、禁止借款、分批资金、同分排序、上市退市、200日历史、NAV公告新鲜度及未完月份的调仓日。科学图使用Matplotlib导出,可独立分享。
复现入口 · 完整研究代码 · 运行依赖 · search.json压缩下载 · extension.json压缩下载