/~learn/s/60aec8d2
> 复盘对象:截面选基的「持仓惯性」层 —— 用真实历史行情做 135 个交易日的隔离回放,
> 看它到底把日换手压到什么程度、一周持仓怎么变、以及「因子分掉了却还得继续持有」这类 case 有多普遍。
>
> 数据来源:本机历史行情缓存 + 真实因子打分,回放状态全部写在 /tmp/sim_inertia/,未触碰实盘。
> 生成方式:/tmp/sim_inertia.py(回放)→ /tmp/sim_report.py(本报告,数字全部现算)。
惯性层把日度新进从无惯性时的平均 2.07 只压到 0.60 只(最多 3 只),但它是「滚动 5 个交易日最多新进 3 只」,不是自然周配额;卖出/硬退出不受配额限制;你这段时间 745 个「高分新面孔被挡在门外」的持仓日(覆盖 135 天、51 个品种),另有 565 个「原始排名已掉出前 10 但仍真实有仓位」的持仓日×品种(另有 257 个只是名单占位、当天 0 仓位)。
⚠️ 最重要的发现不是策略本身,而是:生产链路上惯性状态每生成一次推送就会被清空,实盘大概率从未真正积累过惯性(详见第 6 节,附实盘状态文件证据)。本报告展示的是「修好之后」应有的效果。
| 项 | 取值 |
| ---- | ------ |
| 区间 | 2026-04-03 ~ 2026-10-23,135 个交易日 / 30 个自然周 |
| 预热 | 20 个交易日(只喂状态,不计入统计) |
| 每日调用 | run_selection(date, top_n=99) → 惯性层 eff_n=10 |
| 权重 | _compute_portfolio_weights(top_n=10, score_weighted, exposure_cap=当日regime上限) |
| 核心名单 | = 分散化后 ranked.head(10),也是惯性层提交的 10 只;日均其中只有 6.86 只真实有仓位(min 3 / max 10),其余是 0 权重占位 |
| 实际组合 | _compute_portfolio_weights 输出的 holdings,日均 10.03 只(7~12),权重已归一化到当日 exposure_cap 内(合计 98.7%);其中平均 3.17 只不在核心名单(国债固定对冲位 / _ensure_min 补位) |
| 状态隔离 | regime 状态、惯性历史、信号连击库全部重定向到 /tmp/sim_inertia/ |
| QDII 溢价 | 打桩为空(回放不联网),不影响排名主体(溢价只作用于同指数克隆择优) |
| regime 分布 | MILD_BULL 73 天,RANGING 62 天 |
| hold_src 分布 | allocator 135 天 |
已知前提偏差:同一区间两次回放(full2 / full3),有 71/135 天的「前 3 名」不完全一致,原因是行情缓存当日刷新/数据源切换(日志里 load_best 在 tushare / akshare 之间选择)。本报告所有数字以 replay_full3 为唯一来源;这类漂移也说明:因子分对数据源敏感,结论看结构不看个位数。
| 你的说法 | 代码实际 | 影响 |
| --------- | --------- | ------ |
| 日换手能到 30% | 无惯性时原始 Top10 平均每天换 2.07 只(= 21% 仓位名字变化),最多 7 只 | 记忆方向正确 |
| 每周最多换 3 只 | 实际是滚动 5 个交易日窗口内最多新进 3 只(_MAX_NEW_PER_WINDOW=3、_NEW_WINDOW_DAYS=5) | 跨自然周可能看到 4 只新进(见 3.2),不是 bug |
| 卖出不受限、只限制准入 | 正确。配额只约束 new_entries,卖出/硬退出(分数<0.20)随时可走 | 与你的预期一致 |
| 相当于一个惯性 | 惯性来自两层:①在位加分 +3.0%~4.5%;②新进配额 3 只/5 日 | 你问的「分掉了还留着」主要是①,②决定「进来的名额有限」 |
| 熊市怎么办 | BEAR/SEVERE_BEAR 时整个惯性层停用(不写配额账、不加分) | 本区间没有熊市日,分支未触发(见 Case 5) |
一致性校验:prev_top 与上一交易日最终核心组合 134/134 天完全一致(无不一致)。
| 周 | 最后交易日 | regime | 仓位上限 | 权重和 | 本周新进 | 本周剔除 | 明细(实际持仓·权重,降序) |
| :--: | ----------- | -------- | :-------: | :-----: | :--------: | :--------: | ------------------ |
| W0403 | 2026-04-03 | RANGING | 51.0% | 100.0% | 4 | 3 | 30年国债ETF39.6%,十年国债ETF11.1%,豆粕ETF9.3%,电力ETF6.8%,德国ETF6.6%,沙特ETF6.2%,稀土ETF5.6%,光伏ETF5.3%,科创100ETF4.0%,东证指数ETF3.4%,恒生ETF2.0% |
| W0410 | 2026-04-10 | RANGING | 62.0% | 100.0% | 4 | 4 | 30年国债ETF39.6%,十年国债ETF11.1%,法国ETF7.3%,东证指数ETF7.2%,沙特ETF7.1%,煤炭ETF6.1%,光伏ETF6.0%,豆粕ETF5.6%,科创100ETF4.2%,黄金ETF3.9%,恒生科技ETF1.9% |
| W0417 | 2026-04-17 | MILD_BULL | 72.0% | 100.0% | 2 | 2 | 30年国债ETF39.6%,十年国债ETF11.1%,沙特ETF7.9%,东证指数ETF7.9%,标普油气ETF7.1%,煤炭ETF6.2%,豆粕ETF5.6%,黄金ETF5.1%,新能源ETF3.9%,科创100ETF3.6%,恒生科技ETF2.0% |
| W0424 | 2026-04-24 | MILD_BULL | 72.0% | 100.0% | 1 | 1 | 30年国债ETF39.6%,十年国债ETF11.1%,沙特ETF8.0%,标普油气ETF7.3%,化工ETF7.2%,豆粕ETF6.3%,煤炭ETF6.2%,东证指数ETF5.1%,新能源ETF3.9%,科创100ETF3.3%,恒生科技ETF1.9% |
| W0430 | 2026-04-30 | MILD_BULL | 74.0% | 100.0% | 2 | 2 | 30年国债ETF39.6%,十年国债ETF11.1%,豆粕ETF8.3%,东证指数ETF8.0%,标普油气ETF7.9%,化工ETF7.4%,红利低波ETF6.8%,新能源ETF3.9%,科创100ETF3.5%,恒生科技ETF1.9%,港股红利ETF1.7% |
| W0508 | 2026-05-08 | MILD_BULL | 78.0% | 100.0% | 3 | 3 | 30年国债ETF39.6%,十年国债ETF11.1%,标普油气ETF8.6%,东证指数ETF8.1%,标普生物科技ETF7.2%,黄金ETF6.6%,豆粕ETF5.6%,新能源车ETF4.0%,新能源ETF3.8%,科创100ETF3.5%,恒生科技ETF2.0% |
| W0515 | 2026-05-15 | MILD_BULL | 82.0% | 100.0% | 3 | 3 | 30年国债ETF39.6%,十年国债ETF11.1%,标普油气ETF9.1%,日经ETF8.1%,标普生物科技ETF7.2%,豆粕ETF5.6%,新能源车ETF5.3%,黄金ETF4.9%,中证1000ETF3.8%,科创100ETF3.4%,恒生科技ETF2.0% |
| W0522 | 2026-05-22 | MILD_BULL | 82.0% | 100.0% | 2 | 2 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,标普油气ETF9.5%,标普生物科技ETF7.2%,新能源车ETF5.3%,新能源ETF4.3%,豆粕ETF3.8%,中证1000ETF3.7%,科创100ETF3.6%,恒生科技ETF2.0% |
| W0529 | 2026-05-29 | MILD_BULL | 83.0% | 100.0% | 4 | 5 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,标普油气ETF9.8%,沙特ETF8.7%,标普生物科技ETF7.2%,煤炭ETF5.6%,科创100ETF3.8%,黄金ETF2.2%,港股通科技ETF2.0% |
| W0605 | 2026-06-05 | MILD_BULL | 83.0% | 95.0% | 3 | 5 | 30年国债ETF39.6%,煤炭ETF11.1%,十年国债ETF11.1%,道琼斯ETF10.0%,东证指数ETF9.9%,标普生物科技ETF7.2%,科创100ETF4.2%,中概互联ETF1.9% |
| W0612 | 2026-06-12 | MILD_BULL | 80.0% | 85.5% | 3 | 4 | 30年国债ETF39.6%,十年国债ETF11.1%,东证指数ETF9.9%,标普油气ETF9.7%,纳指ETF7.8%,豆粕ETF5.6%,中概互联ETF1.9% |
| W0618 | 2026-06-18 | MILD_BULL | 81.0% | 85.9% | 2 | 1 | 30年国债ETF39.6%,十年国债ETF11.1%,德国ETF8.2%,美国50ETF7.9%,纳指ETF7.8%,豆粕ETF5.6%,东证指数ETF3.9%,中概互联ETF1.9% |
| W0626 | 2026-06-26 | MILD_BULL | 81.0% | 96.3% | 3 | 2 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,德国ETF8.4%,纳指ETF7.9%,美国50ETF7.9%,豆粕ETF5.6%,东证指数ETF3.9%,恒生科技ETF1.9% |
| W0703 | 2026-07-03 | MILD_BULL | 81.0% | 100.0% | 2 | 1 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,道琼斯ETF8.4%,纳指ETF7.9%,美国50ETF7.9%,证券ETF5.7%,东证指数ETF3.9%,豆粕ETF3.5%,恒生科技ETF1.9% |
| W0710 | 2026-07-10 | MILD_BULL | 80.0% | 100.0% | 3 | 3 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,标普消费ETF8.7%,美国50ETF8.1%,纳指ETF7.9%,证券ETF5.8%,东证指数ETF3.9%,豆粕ETF3.4%,香港证券ETF1.5% |
| W0717 | 2026-07-17 | RANGING | 63.0% | 100.0% | 2 | 2 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,道琼斯ETF8.8%,美国50ETF8.1%,纳指ETF7.9%,证券ETF4.0%,东证指数ETF3.9%,豆粕ETF3.7%,科创100ETF2.9% |
| W0724 | 2026-07-24 | RANGING | 52.0% | 100.0% | 2 | 1 | 30年国债ETF39.6%,十年国债ETF11.1%,纳指生物科技ETF9.3%,道琼斯ETF8.4%,美国50ETF8.0%,纳指ETF7.9%,豆粕ETF4.2%,东证指数ETF3.9%,证券ETF3.1%,科创100ETF2.5%,恒生互联网ETF1.9% |
| W0731 | 2026-07-31 | RANGING | 43.0% | 96.4% | 1 | 2 | 30年国债ETF39.6%,十年国债ETF11.1%,纳指生物科技ETF8.5%,道琼斯ETF8.0%,美国50ETF7.9%,纳指ETF7.8%,豆粕ETF5.5%,东证指数ETF3.9%,证券ETF2.1%,恒生生物科技ETF2.0% |
| W0807 | 2026-08-07 | RANGING | 55.0% | 100.0% | 3 | 4 | 30年国债ETF39.6%,十年国债ETF11.1%,纳指生物科技ETF9.1%,道琼斯ETF8.2%,纳指ETF7.8%,标普生物科技ETF7.2%,日经ETF7.1%,新兴亚洲ETF7.0%,证券ETF3.0% |
| W0814 | 2026-08-14 | MILD_BULL | 61.0% | 100.0% | 1 | 0 | 30年国债ETF39.6%,十年国债ETF11.1%,纳指生物科技ETF9.2%,道琼斯ETF8.2%,纳指ETF7.8%,新兴亚洲ETF7.8%,标普生物科技ETF7.2%,证券ETF3.5%,消费50ETF3.0%,日经ETF2.7% |
| W0821 | 2026-08-21 | MILD_BULL | 60.0% | 100.0% | 2 | 2 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,道琼斯ETF8.3%,纳指生物科技ETF8.2%,日经ETF7.7%,标普生物科技ETF7.2%,证券ETF3.1%,消费50ETF2.8%,恒生ETF2.0% |
| W0828 | 2026-08-28 | RANGING | 60.0% | 99.9% | 2 | 2 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,纳指生物科技ETF9.9%,道琼斯ETF8.4%,新兴亚洲ETF7.7%,消费50ETF4.4%,养殖ETF4.1%,证券ETF2.8%,恒生ETF2.0% |
| W0904 | 2026-09-04 | RANGING | 56.0% | 100.0% | 2 | 3 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,道琼斯ETF8.5%,法国ETF7.5%,新兴亚洲ETF7.4%,标普生物科技ETF7.2%,纳指生物科技ETF6.4%,证券ETF2.3% |
| W0911 | 2026-09-11 | RANGING | 54.0% | 100.0% | 3 | 2 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,纳指生物科技ETF10.0%,道琼斯ETF8.6%,德国ETF7.4%,标普生物科技ETF7.2%,证券ETF2.2%,恒生ETF2.0%,豆粕ETF1.9% |
| W0918 | 2026-09-18 | RANGING | 52.0% | 100.0% | 3 | 3 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,纳指生物科技ETF10.0%,道琼斯ETF8.6%,德国ETF7.2%,标普生物科技ETF7.2%,消费50ETF3.5%,恒生ETF2.0%,黄金ETF0.9% |
| W0924 | 2026-09-24 | RANGING | 53.0% | 100.0% | 4 | 3 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,纳指生物科技ETF9.9%,道琼斯ETF8.7%,标普生物科技ETF7.2%,消费50ETF4.0%,央企ETF4.0%,恒生ETF2.0%,恒生科技ETF1.9%,豆粕ETF1.7% |
| W0930 | 2026-09-30 | RANGING | 48.0% | 100.0% | 1 | 1 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,纳指生物科技ETF9.9%,道琼斯ETF8.6%,标普生物科技ETF7.2%,央企ETF3.4%,消费50ETF3.4%,豆粕ETF3.0%,恒生ETF2.0%,恒生科技ETF1.9% |
| W1009 | 2026-10-09 | RANGING | 48.0% | 100.0% | 2 | 3 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,标普油气ETF10.0%,纳指生物科技ETF9.8%,道琼斯ETF8.5%,东证指数ETF4.4%,消费50ETF3.4%,恒生科技ETF1.8%,央企ETF1.3% |
| W1016 | 2026-10-16 | RANGING | 46.0% | 100.0% | 3 | 2 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,标普油气ETF10.0%,纳指生物科技ETF9.8%,道琼斯ETF8.5%,东证指数ETF4.1%,稀土ETF1.9%,恒生科技ETF1.8%,豆粕ETF1.8%,房地产ETF1.5% |
| W1023 | 2026-10-23 | RANGING | 44.0% | 100.0% | 0 | 1 | 30年国债ETF39.6%,十年国债ETF11.1%,标普500ETF10.0%,标普油气ETF10.0%,纳指生物科技ETF9.9%,道琼斯ETF8.6%,东证指数ETF3.8%,豆粕ETF3.7%,恒生科技ETF1.9%,房地产ETF1.5% |
> 明细 = 当日实际持仓(含国债固定对冲位、补位/QDII 保底),按权重降序;「本周新进/剔除」= 相对上周最后一个交易日的实际持仓变化。3.2 的配额统计仍用「惯性核心名单」口径(配额只作用于名单准入)。
| 一周新进只数 | 周数 |
| :---: | :---: |
| 0 只 | 1 周 |
| 1 只 | 3 周 |
| 2 只 | 4 周 |
| 3 只 | 19 周 |
| 4 只 | 3 周 |
超过 3 只的周:3 个(2026-04-17 新进 4 只,2026-07-24 新进 4 只,2026-10-16 新进 4 只)。
_ensure_min 补位/QDII 保底)。按核心序位(分数高低,不是权重高低;0 权重也计入分母):
| 序位 | 平均权重 | 区间 | 有仓位天数占比 |
| :---: | :-------: | ------ | :---: |
| #1 | 5.2% | 0.0% ~ 10.0% | 61% |
| #2 | 5.5% | 0.0% ~ 10.0% | 70% |
| #3 | 5.0% | 0.0% ~ 10.0% | 70% |
| #4 | 5.1% | 0.0% ~ 10.0% | 81% |
| #5 | 5.7% | 0.0% ~ 39.6% | 81% |
| #6 | 6.0% | 0.0% ~ 39.6% | 75% |
| #7 | 5.0% | 0.0% ~ 39.6% | 78% |
| #8 | 5.0% | 0.0% ~ 39.6% | 74% |
| #9 | 3.2% | 0.0% ~ 10.0% | 59% |
| #10 | 4.4% | 0.0% ~ 39.6% | 36% |
按当日真实权重降序(仅核心名单内,真正花了多少钱):
| 权重名次 | 平均权重 | 区间 |
| :---: | :-------: | ------ |
| #1 | 14.3% | 7.0% ~ 39.6% |
| #2 | 8.9% | 6.3% ~ 10.0% |
| #3 | 8.2% | 6.0% ~ 10.0% |
| #4 | 6.9% | 0.0% ~ 8.6% |
| #5 | 5.0% | 0.0% ~ 7.9% |
| #6 | 3.5% | 0.0% ~ 7.2% |
| #7 | 2.2% | 0.0% ~ 6.4% |
| #8 | 1.0% | 0.0% ~ 4.2% |
| #9 | 0.1% | 0.0% ~ 2.8% |
| #10 | 0.0% | 0.0% ~ 2.0% |
> 权重高度集中在头部:#1 平均 14.3%(含 30年国债ETF(511090.SH) 的对冲大仓,属于防御位而非进攻仓),#8~#10 平均只有 1.0% / 0.1% / 0.0%。所以「惯性多留一个名字」占的是候选名额,多数时候并不占用资金。
> 注:核心序位表里 #5~#8 的 39.6% 上限不是异常 —— 那是 30年国债ETF(511090.SH) 的固定对冲额度,它按当日调整后分数落在名单的不同序位上,所以「固定大仓」会在不同序位之间跳。
| 指标 | 无惯性(原始 Top10) | 有惯性(实际) |
| ------ | :---: | :---: |
| 日均新进只数 | 2.07 | 0.60 |
| 单日最多新进 | 7 | 3 |
| 零新进天数 | 10/134 | 77/134 |
| 换手率(名字口径) | 21%/日 | 6%/日 |
持仓年龄(回放期内每只品种的最长连续持有天数):
| 最长连续持有 | 品种数 |
| :---: | :---: |
| ≥20 日 | 18 |
| 10~19 日 | 20 |
| 5~9 日 | 14 |
| <5 日 | 7 |
平均 18.7 日;最长的几只:创业板ETF(159915.SZ) 69 日,道琼斯ETF(513400.SH) 68 日,纳指生物科技ETF(513290.SH) 62 日,证券ETF(512880.SH) 59 日,科创100ETF(588220.SH) 49 日,东证指数ETF(513800.SH) 46 日。
定义:当天在核心名单里,但原始因子排名已经掉出前 10。
| 口径 | 数量 |
| ------ | :---: |
| 名单内(含 0 权重占位) | 822 个「持仓日×品种」 |
| 真实有仓位(权重 >0) | 565 个「持仓日×品种」,涉及 35 个品种、124 段 |
| 仅名单占位、当天权重 0 | 257 个 |
| 国债固定对冲位(511090/511260,强制候选、固定额度) | 22 个「名单日」,已从上表剔除 |
> 511090.SH(30年国债ETF)与 511260.SH(十年国债ETF)由 bond_fixed_slots 强制进候选池并给固定额度,与因子排名、惯性都无关,所以不列入「惯性留住」统计。
为什么会这样(机制,不是“加分加得多”):配额用满后,所有超配额新面孔被压到「入选线 − 0.015」,而在位者只要分数 ≥0.20 就仍占据前 10 位;只要在位者够 10 只,排名表就被老成员填满,跟新面孔多少分无关。全期 66/135 天配额是满的;下表 ≥5 日的长段里,有 12/44 段期间配额多数时间满额,另一半是「还有名额、但被在位加分 + 分散化保护留住」。
下列为真实有仓位且连续 ≥5 个交易日(「整整一周以上」)都在原始前 10 之外的段:
| 品种 | 区间 | 天数 | 原始排名 | 原始分 | 权重 |
| ------ | ------ | :---: | :---: | :---: | :---: |
| 东证指数ETF(513800.SH) | 2026-06-03 ~ 2026-07-29 | 40 | 12 ~ 32 | 0.564 ~ 0.732 | 3.9% ~ 9.9% |
| 豆粕ETF(159985.SZ) | 2026-04-16 ~ 2026-05-22 | 24 | 11 ~ 48 | 0.508 ~ 0.703 | 2.0% ~ 11.1% |
| 证券ETF(512880.SH) | 2026-06-29 ~ 2026-07-29 | 23 | 11 ~ 23 | 0.665 ~ 0.733 | 2.5% ~ 6.1% |
| 标普生物科技ETF(159502.SZ) | 2026-05-06 ~ 2026-06-02 | 20 | 11 ~ 34 | 0.577 ~ 0.706 | 7.2% ~ 7.2% |
| 恒生科技ETF(513180.SH) | 2026-09-24 ~ 2026-10-23 | 16 | 18 ~ 36 | 0.531 ~ 0.611 | 1.8% ~ 1.9% |
| 消费50ETF(515650.SH) | 2026-08-14 ~ 2026-09-02 | 14 | 14 ~ 25 | 0.590 ~ 0.677 | 2.6% ~ 4.5% |
| 消费50ETF(515650.SH) | 2026-09-17 ~ 2026-10-14 | 14 | 20 ~ 54 | 0.493 ~ 0.617 | 3.0% ~ 4.0% |
| 德国ETF(159561.SZ) | 2026-06-15 ~ 2026-06-29 | 10 | 20 ~ 29 | 0.599 ~ 0.641 | 8.2% ~ 8.4% |
| 纳指生物科技ETF(513290.SH) | 2026-08-19 ~ 2026-09-01 | 10 | 25 ~ 36 | 0.575 ~ 0.600 | 2.5% ~ 10.0% |
| 新兴亚洲ETF(520580.SH) | 2026-08-27 ~ 2026-09-09 | 10 | 11 ~ 31 | 0.555 ~ 0.696 | 3.6% ~ 7.7% |
| 德国ETF(513030.SH) | 2026-09-10 ~ 2026-09-23 | 10 | 12 ~ 25 | 0.604 ~ 0.664 | 7.0% ~ 7.8% |
| 科创100ETF(588220.SH) | 2026-04-15 ~ 2026-04-24 | 8 | 11 ~ 25 | 0.587 ~ 0.707 | 3.3% ~ 4.0% |
| 中证1000ETF(512100.SH) | 2026-05-13 ~ 2026-05-22 | 8 | 12 ~ 29 | 0.590 ~ 0.685 | 3.6% ~ 3.8% |
| 美国50ETF(513850.SH) | 2026-06-23 ~ 2026-07-02 | 8 | 11 ~ 14 | 0.709 ~ 0.735 | 7.9% ~ 7.9% |
| 恒生ETF(159920.SZ) | 2026-09-10 ~ 2026-09-21 | 8 | 11 ~ 17 | 0.652 ~ 0.686 | 2.0% ~ 2.0% |
| 稀土ETF(516780.SH) | 2026-10-13 ~ 2026-10-22 | 8 | 24 ~ 42 | 0.507 ~ 0.581 | 1.4% ~ 1.9% |
| 东证指数ETF(513800.SH) | 2026-10-14 ~ 2026-10-23 | 8 | 14 ~ 20 | 0.601 ~ 0.663 | 3.8% ~ 4.4% |
| 法国ETF(513080.SH) | 2026-04-08 ~ 2026-04-16 | 7 | 15 ~ 32 | 0.544 ~ 0.674 | 6.8% ~ 7.8% |
| 东证指数ETF(513800.SH) | 2026-04-16 ~ 2026-04-24 | 7 | 12 ~ 19 | 0.657 ~ 0.712 | 5.1% ~ 8.1% |
| 东证指数ETF(513800.SH) | 2026-04-30 ~ 2026-05-13 | 7 | 13 ~ 36 | 0.587 ~ 0.652 | 8.0% ~ 9.4% |
| 美国50ETF(159577.SZ) | 2026-07-07 ~ 2026-07-15 | 7 | 12 ~ 14 | 0.719 ~ 0.747 | 8.1% ~ 8.1% |
| 标普生物科技ETF(159502.SZ) | 2026-08-19 ~ 2026-08-27 | 7 | 19 ~ 34 | 0.578 ~ 0.634 | 1.6% ~ 7.2% |
| 标普生物科技ETF(159502.SZ) | 2026-08-31 ~ 2026-09-08 | 7 | 12 ~ 29 | 0.594 ~ 0.670 | 1.9% ~ 7.2% |
| 证券ETF(512880.SH) | 2026-09-08 ~ 2026-09-16 | 7 | 11 ~ 39 | 0.521 ~ 0.687 | 1.8% ~ 2.4% |
| 央企ETF(510060.SH) | 2026-09-24 ~ 2026-10-12 | 7 | 25 ~ 63 | 0.472 ~ 0.572 | 1.3% ~ 4.0% |
| 标普油气ETF(159518.SZ) | 2026-10-15 ~ 2026-10-23 | 7 | 11 ~ 21 | 0.597 ~ 0.693 | 10.0% ~ 10.0% |
| 化工ETF(159870.SZ) | 2026-04-24 ~ 2026-05-06 | 6 | 16 ~ 26 | 0.592 ~ 0.660 | 7.0% ~ 7.4% |
| 标普油气ETF(159518.SZ) | 2026-05-13 ~ 2026-05-20 | 6 | 14 ~ 62 | 0.508 ~ 0.701 | 8.9% ~ 9.3% |
| 日经ETF(513520.SH) | 2026-08-07 ~ 2026-08-14 | 6 | 13 ~ 23 | 0.614 ~ 0.668 | 2.7% ~ 7.7% |
| 养殖ETF(159865.SZ) | 2026-08-26 ~ 2026-09-02 | 6 | 18 ~ 27 | 0.605 ~ 0.638 | 2.6% ~ 4.2% |
> 共 44 段 ≥5 日;表中列前 30 段。
逐日明细示例:东证指数ETF(513800.SH),2026-06-03 ~ 2026-07-29 连续 40 个交易日
| 日期 | regime | 原始排名 | 原始分 | 惯性后分 | 权重 | 说明 |
| ------ | -------- | :-------: | :------: | :-------: | :---: | ------ |
| 2026-06-03 | MILD_BULL | 14 | 0.665 | 0.695 | 9.9% | 已在原始前10之外 |
| 2026-06-04 | MILD_BULL | 15 | 0.682 | 0.714 | 9.9% | 已在原始前10之外 |
| 2026-06-05 | MILD_BULL | 15 | 0.687 | 0.721 | 9.9% | 已在原始前10之外 |
| 2026-06-08 | MILD_BULL | 17 | 0.681 | 0.717 | 9.8% | 已在原始前10之外 |
| 2026-06-09 | MILD_BULL | 13 | 0.700 | 0.738 | 9.9% | 已在原始前10之外 |
| 2026-06-10 | MILD_BULL | 13 | 0.693 | 0.733 | 9.8% | 已在原始前10之外 |
| 2026-06-11 | MILD_BULL | 13 | 0.703 | 0.745 | 9.8% | 已在原始前10之外 |
| 2026-06-12 | MILD_BULL | 14 | 0.701 | 0.745 | 9.9% | 已在原始前10之外 |
| 2026-06-15 | MILD_BULL | 12 | 0.687 | 0.732 | 9.9% | 已在原始前10之外 |
| 2026-06-16 | MILD_BULL | 12 | 0.684 | 0.729 | 9.9% | 已在原始前10之外 |
| 2026-06-17 | MILD_BULL | 14 | 0.688 | 0.733 | 3.9% | 已在原始前10之外 |
| 2026-06-18 | MILD_BULL | 15 | 0.672 | 0.717 | 3.9% | 已在原始前10之外 |
| 2026-06-22 | MILD_BULL | 18 | 0.667 | 0.713 | 3.9% | 已在原始前10之外 |
| 2026-06-23 | MILD_BULL | 19 | 0.647 | 0.692 | 3.9% | 已在原始前10之外 |
| 2026-06-24 | MILD_BULL | 18 | 0.651 | 0.696 | 3.9% | 已在原始前10之外 |
| 2026-06-25 | MILD_BULL | 16 | 0.667 | 0.712 | 3.9% | 已在原始前10之外 |
| 2026-06-26 | MILD_BULL | 17 | 0.687 | 0.732 | 3.9% | 已在原始前10之外 |
| 2026-06-29 | MILD_BULL | 16 | 0.674 | 0.719 | 3.9% | 已在原始前10之外 |
| 2026-06-30 | MILD_BULL | 17 | 0.653 | 0.698 | 3.9% | 已在原始前10之外 |
| 2026-07-01 | MILD_BULL | 17 | 0.677 | 0.722 | 3.9% | 已在原始前10之外 |
| 2026-07-02 | MILD_BULL | 18 | 0.659 | 0.704 | 3.9% | 已在原始前10之外 |
| 2026-07-03 | MILD_BULL | 21 | 0.621 | 0.666 | 3.9% | 已在原始前10之外 |
| 2026-07-06 | MILD_BULL | 20 | 0.664 | 0.709 | 3.9% | 已在原始前10之外 |
| 2026-07-07 | MILD_BULL | 18 | 0.702 | 0.747 | 3.9% | 已在原始前10之外 |
| 2026-07-08 | MILD_BULL | 19 | 0.705 | 0.750 | 3.9% | 已在原始前10之外 |
| 2026-07-09 | MILD_BULL | 18 | 0.712 | 0.757 | 3.9% | 已在原始前10之外 |
| 2026-07-10 | MILD_BULL | 14 | 0.732 | 0.777 | 3.9% | 已在原始前10之外 |
| 2026-07-13 | MILD_BULL | 15 | 0.712 | 0.757 | 3.9% | 已在原始前10之外 |
| 2026-07-14 | MILD_BULL | 20 | 0.683 | 0.728 | 3.9% | 已在原始前10之外 |
| 2026-07-15 | MILD_BULL | 20 | 0.693 | 0.738 | 3.9% | 已在原始前10之外 |
| 2026-07-16 | MILD_BULL | 18 | 0.690 | 0.735 | 3.9% | 已在原始前10之外 |
| 2026-07-17 | RANGING | 32 | 0.593 | 0.638 | 3.9% | 已在原始前10之外 |
| 2026-07-20 | RANGING | 20 | 0.615 | 0.660 | 3.9% | 已在原始前10之外 |
| 2026-07-21 | RANGING | 16 | 0.651 | 0.696 | 3.9% | 已在原始前10之外 |
| 2026-07-22 | RANGING | 17 | 0.634 | 0.679 | 3.9% | 已在原始前10之外 |
| 2026-07-23 | RANGING | 22 | 0.620 | 0.664 | 3.9% | 已在原始前10之外 |
| 2026-07-24 | RANGING | 25 | 0.590 | 0.635 | 3.9% | 已在原始前10之外 |
| 2026-07-27 | RANGING | 22 | 0.614 | 0.658 | 3.9% | 已在原始前10之外 |
| 2026-07-28 | RANGING | 26 | 0.593 | 0.638 | 3.9% | 已在原始前10之外 |
| 2026-07-29 | RANGING | 27 | 0.564 | 0.609 | 3.9% | 已在原始前10之外 |
定义:当天原始排名 ≤10、但最终没进核心 10 只,且不是被分散化剔除(惯性 Top10 里也没有它)。全期 745 条记录、覆盖 135 天、51 个品种。
> 口径说明:「被挡」只归因到惯性这一层。这些新面孔里有一部分是同指数克隆,即使放开配额也可能被后续克隆去重/类别上限剔除,所以这里统计的是「惯性层挡住」的上限值。
被挡次数最多的品种:
| 品种 | 被挡天数 | 最高原始排名 |
| ------ | :-------: | :---: |
| 纳指ETF(513390.SH) | 65 | #2 |
| 纳指ETF(513100.SH) | 61 | #2 |
| 标普500ETF(159612.SZ) | 60 | #2 |
| 纳斯达克ETF(513300.SH) | 54 | #1 |
| 标普ETF(159655.SZ) | 54 | #1 |
| 纳指科技ETF(159501.SZ) | 51 | #1 |
| 美国50ETF(513850.SH) | 39 | #3 |
| 标普500ETF(513650.SH) | 31 | #1 |
| 创业板综ETF(159908.SZ) | 29 | #3 |
| 美国50ETF(159577.SZ) | 29 | #3 |
| 纳指ETF(159941.SZ) | 20 | #2 |
| 国芯ETF(512760.SH) | 18 | #5 |
配额锁死的代表例(高分新面孔 vs 最弱在位者):
| 日期 | 新面孔 | 原始排名 | 原始分 | 被压到 | 最弱在位者 | 其原始排名/分 | 其惯性后分 | 其权重 |
| ------ | -------- | :---: | :---: | :---: | ----------- | :---: | :---: | :---: |
| 2026-10-21 | 纳指科技ETF(159501.SZ) | #1 | 0.875 | 0.533 | 稀土ETF(516780.SH) | #42 / 0.508 | 0.548 | 1.9% |
| 2026-04-30 | 创业板50ETF(159949.SZ) | #1 | 0.841 | 0.567 | 煤炭ETF(515220.SH) | #41 / 0.537 | 0.582 | 0.0% |
| 2026-09-28 | 标普500ETF(513650.SH) | #1 | 0.831 | 0.571 | 消费50ETF(515650.SH) | #28 / 0.546 | 0.586 | 3.7% |
| 2026-09-14 | 标普ETF(159655.SZ) | #1 | 0.821 | 0.553 | 标普500ETF(513650.SH) | #4 / 0.804 | 0.553 | 10.0% |
| 2026-09-15 | 标普500ETF(513500.SH) | #1 | 0.821 | 0.565 | 证券ETF(512880.SH) | #33 / 0.535 | 0.580 | 1.8% |
| 2026-09-23 | 标普油气ETF(159518.SZ) | #1 | 0.804 | 0.583 | 游戏ETF(159869.SZ) | #34 / 0.553 | 0.598 | 0.0% |
| 2026-06-18 | 纳斯达克ETF(513300.SH) | #1 | 0.793 | 0.633 | 标普生物科技ETF(159502.SZ) | #23 / 0.618 | 0.648 | 0.0% |
被惯性加分挤出的代表例(配额还有余额):
| 日期 | 新面孔 | 原始排名 | 原始分 | 被压到 | 备注 |
| ------ | -------- | :---: | :---: | :---: | ------ |
| 2026-10-22 | 纳指ETF(159941.SZ) | #2 | 0.854 | 0.590 | 窗口已用 2/3,仍被在位加分顶掉 |
| 2026-10-23 | 纳指ETF(159941.SZ) | #3 | 0.850 | 0.618 | 窗口已用 1/3,仍被在位加分顶掉 |
| 2026-10-22 | 纳指ETF(513100.SH) | #3 | 0.849 | 0.590 | 窗口已用 2/3,仍被在位加分顶掉 |
| 2026-07-13 | 纳指科技ETF(159501.SZ) | #3 | 0.833 | 0.618 | 窗口已用 2/3,仍被在位加分顶掉 |
| 2026-10-22 | 纳斯达克ETF(513300.SH) | #4 | 0.831 | 0.590 | 窗口已用 2/3,仍被在位加分顶掉 |
| 2026-10-23 | 纳斯达克ETF(513300.SH) | #4 | 0.831 | 0.618 | 窗口已用 1/3,仍被在位加分顶掉 |
最弱在位者的五因子明细(为什么它还能留在组合里):
| 日期 | 最弱在位者 | 动量 | 夏普 | 反追高 | 稳定性 | 估值锚 | 权重 |
| ------ | ----------- | :---: | :---: | :---: | :---: | :---: | :---: |
| 2026-10-21 | 稀土ETF(516780.SH) | 0.22 | 0.43 | 0.51 | 0.31 | 0.96 | 1.9% |
| 2026-04-30 | 煤炭ETF(515220.SH) | 0.88 | 0.95 | 0.12 | 0.95 | 0.14 | 0.0% |
| 2026-09-28 | 消费50ETF(515650.SH) | 0.50 | 0.75 | 0.36 | 0.74 | 0.51 | 3.7% |
| 2026-09-14 | 标普500ETF(513650.SH) | 0.97 | 0.89 | 0.27 | 0.88 | 0.13 | 10.0% |
| 2026-09-15 | 证券ETF(512880.SH) | 0.28 | 0.34 | 0.99 | 0.28 | 0.73 | 1.8% |
| 2026-09-23 | 游戏ETF(159869.SZ) | 0.25 | 0.41 | 0.93 | 0.26 | 0.85 | 0.0% |
| 2026-06-18 | 标普生物科技ETF(159502.SZ) | 0.67 | 0.63 | 0.30 | 0.63 | 0.23 | 0.0% |
> 被挡的新面孔没有落库的因子明细(_get_factor_detail 只覆盖最终排名表里的 13~18 只),所以这里只能列出「谁守住了位置、靠的是哪几个因子」这一侧。
0 例。原因:能留在核心的品种,当天综合分都 ≥0.20;真正掉队的品种在原始排名层面就已被挤出前 10,轮不到硬退出阈值出手。这条规则是「兜底」,本区间没被触发。
有 135/135 天,惯性层给出的 Top10 与 _compute_portfolio_weights 输出的实际持仓不完全相同(这是结构性的:国债固定位/补位总会插进来);其中 70/135 天连「核心名单 10 只」都不一样。
| 类型 | 品种数 | 含义 |
| ------ | :---: | ------ |
| 惯性 Top10 → 最终一分钱没投(权重 0) | 50 | 被分散化/区域 CAP/相关性闸门剔除,或留在名单里但仓位被挤成 0 |
| 惯性 Top10 → 仍有仓位但不在核心 10 只名单里 | 1 | 被挪到候选名额之外,但仍分到仓位 |
| 最终实际持仓但不在惯性 Top10 | 39 | 国债固定对冲位 / _ensure_min 补位 / QDII 保底塞进来的 |
惯性 Top10 里最终 0 仓位最多的品种:
| 品种 | 天数 | 最近一次 |
| ------ | :---: | :---: |
| 创业板ETF(159915.SZ) | 69 | 2026-07-17 |
| 创业板50ETF(159949.SZ) | 52 | 2026-07-21 |
| 人工智能ETF(159819.SZ) | 50 | 2026-07-28 |
| 游戏ETF(159869.SZ) | 30 | 2026-10-23 |
| 传媒ETF(159805.SZ) | 26 | 2026-10-23 |
| 机器人ETF(562500.SH) | 25 | 2026-07-06 |
| 芯片ETF(159995.SZ) | 16 | 2026-06-16 |
| 纳指科技ETF(159501.SZ) | 16 | 2026-10-23 |
| 生物医药ETF(512290.SH) | 16 | 2026-08-12 |
| 纳斯达克ETF(513300.SH) | 15 | 2026-10-16 |
仍有仓位但被挪出核心名单的品种:
| 品种 | 天数 | 最近一次 |
| ------ | :---: | :---: |
| 十年国债ETF(511260.SH) | 1 | 2026-04-08 |
非惯性进入核心(补位/保底)的品种:
| 品种 | 天数 |
| ------ | :---: |
| 十年国债ETF(511260.SH) | 134 |
| 30年国债ETF(511090.SH) | 119 |
| 豆粕ETF(159985.SZ) | 56 |
| 恒生科技ETF(513180.SH) | 46 |
| 中概互联ETF(513050.SH) | 16 |
| 黄金ETF(518880.SH) | 15 |
| 煤炭ETF(515220.SH) | 12 |
| 黄金ETF(159937.SZ) | 11 |
| 香港证券ETF(513090.SH) | 8 |
| 港股通科技ETF(159636.SZ) | 6 |
本区间 regime 全是 MILD_BULL 73 天、RANGING 62 天,BEAR/SEVERE_BEAR 共 0 天,所以「熊市整体停用惯性」这条分支没有被验证到。真要验证得挑 2021-2023 或 2024 年初的区间单独回放。
代码路径(已逐行核对):
generate_push_message() 第一步调用 run_selection() → 内部 _commit_inertia_portfolio() 写入惯性历史;_compute_weekly_backtest_drawdown() 为了跑周频回测,执行 self._save_inertia_history({})(engine.py)清空惯性历史;_restore_regime_snapshot),没有恢复惯性历史。
结果:下一次选品时 prev_set 为空 → 没有在位加分、recent_new_entries 为空 → 3 只配额永远满血,惯性层等于完全失效,实盘每天仍是「原始排名直出」。
实盘证据(adata/db/.holding_inertia.json,2026-10-24 17:03 写入):
{"last_top_codes": ["159501.SZ", "513100.SH", ...], "last_date": "2026-10-23",
"streaks": {"159501.SZ": 1, "513100.SH": 1, ... 全部为 1},
"recent_new_entries": []}
10 只在位品种的 streaks 全部等于 1、recent_new_entries 为空 —— 只有「历史被清空后重新建仓」才会出现这种状态。如果惯性正常生效,连板品种的 streak 应该是 2、3、5…
建议修法(最小改动):把惯性历史像 regime 快照一样做「备份 → 回测 → 恢复」,或者干脆让回测使用独立的临时历史文件。需要我直接改就说一声(改完会在隔离回放里验证 streak 能连续增长)。
exposure_cap 之内(组合权重和 98.7%):核心名单内只占 50.0%,其余约一半落在核心名单之外的持仓(国债固定对冲位、补位/QDII 保底)。也就是说「惯性多留一个名字」多数时候只是占名单,不占资金。
# 1) 隔离回放(约 2 分钟,135 个交易日)
env -u PYTHONHOME PYTHONPATH=/Users/aohan/PycharmProjects/adata \
.venv/bin/python /tmp/sim_inertia.py --days 135 --warmup 20 --tag full3
# 2) 生成本报告
env -u PYTHONHOME PYTHONPATH=/Users/aohan/PycharmProjects/adata \
.venv/bin/python /tmp/sim_report.py
> 回放状态文件:/tmp/sim_inertia/inertia.json、regime_state.json;原始数据:replay_full3.json。