Files
big-qmt/labs/analysis/etf/REPORT-new-config.md
2026-09-19 19:45:43 +08:00

355 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ETF 自适应网格策略回测报告(新配置)
- 配置来源:`py-client/etc/_etf.yaml`**回测直接读取该文件,不再维护副本**
- 回测区间:**2025-12-22 ~ 2026-09-18182 个交易日)**
- 标的:`588000.SH``510300.SH``518880.SH`;日线 242 根2025-09-19 ~ 2026-09-18**未复权**
- 账户:起始 **50 万**`min_cash_ratio=0.10`、佣金 `max(5, 金额×0.0003)`
- 复现:`py -3.14 -B labs/analysis/etf/run.py`(结果落 `results.json` / `run_report.txt`
- 对照脚本:`compare.py`(旧 vs 新)、`capital.py`(资金需求)、`sweep.py`(参数)、`drawdown.py`(浮亏轨迹)
- 本报告只做分析,**未修改任何策略代码**。
## 本次配置变化
| 标的 | 旧 `buy_shares` | 新 `buy_shares` | 新 `max_shares` |
| --- | ---: | ---: | ---: |
| 588000.SH | 1,000 | **10,000** | 100,000 |
| 510300.SH | 1,000 | **4,000** | 20,000 |
| 518880.SH | 1,000 | **2,000** | 10,000 |
`defaults`add_pct 3.0 / min_profit_pct 1.0 / channel_pct 15 / max_adds 9 等)**未改**。
---
## 一、结论摘要
| 指标 | 基准(触价成交) | 贴近实盘(反弹价) | 悲观(收盘价) |
| --- | ---: | ---: | ---: |
| **账户权益变动** | **+6,110.84+1.22%** | +8,426.54+1.69% | **2,551.340.51%** |
| 最大回撤(权益口径) | 0.48% | 0.56% | 1.68% |
| 完整轮次 / 胜率 | 32 / **32 胜 0 负** | 27 / 27 胜 | 13 / 13 胜 |
| 单轮平均已了结利润 | **+195.81** | — | — |
| 平均持有 / 最大持有 | **3.7 天 / 23 天** | — | — |
| 平均档位 / 最大档位 | 1.16 / 4 | — | — |
| 佣金合计 | 401.79 | 343.75 | 197.34 |
| 平均资金占用 / 峰值 | **2.24% / 17.41%** | 3.40% / 17.85% | 6.71% / 24.83% |
**和旧配置比,收益放大了 4 倍,但收益率只从 0.31% 提到 1.22%(同一 50 万账户)——因为放大的是仓位,不是机会。**
| | 旧配置 | 新配置 | 倍数 |
| --- | ---: | ---: | ---: |
| 买入名义额 | 176,668 | **664,705** | **3.76×** |
| 权益变动50 万账户) | +1,534.14 | **+6,110.84** | **3.98×** |
| 收益率 | 0.31% | **1.22%** | 3.98× |
| 最大回撤 | 0.25% | 0.48% | 1.9× |
| 平均资金占用 | 0.67% | **2.24%** | 3.3× |
| 占用 ROI权益/平均占用) | 45.68% | **54.48%** | 1.19× |
| 完整轮次 | 28 | 32 | 1.14× |
| 单轮平均利润 | 55.98 | **195.81** | 3.5× |
**四个关键读数**
1. **放大股数 ≈ 等比例放大盈亏**:名义额 ×3.76、盈亏 ×3.98,几乎 1:1。这是"加杠杆"
不是"改进了策略";风险(回撤)同步从 0.25% 升到 0.48%。
2. **入场机会没有变多**:轮次 28 → 32+14%)。机会频率仍由市场决定(一年 59 个信号,见 §四)。
3. **资金利用率仍然极低**:平均只投出 **2.24%** 的钱,峰值 17.41%。
**绝对盈亏与账户规模无关**——把资金从 20 万加到 120 万,盈亏始终是 +6,110.84
收益率从 3.06% 被摊薄到 0.51%`compare.py` §C。这说明**50 万并没有被用满**。
4. **悲观成交假设下会亏钱**2,551.340.51%)。新配置把仓位放大 4 倍后,
结论对成交假设的敏感度也放大了:`touch` +6,111 / `bounce` +8,427 / `close` 2,551。
---
## 二、逐标的归因(基准)
| 标的 | 完整轮次 | 已了结净额 | 了结时仍持有 | 按成本净额 | 未实现 | 按市价净额 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| 588000.SH | 12 | +2,011.94 | 0 | +2,011.94 | 0 | +2,011.94 |
| 510300.SH | 13 | +2,521.97 | **4,000 股** | **15,961.17** | 155.14 | **16,116.31** |
| 518880.SH | 7 | +1,732.07 | 0 | +1,732.07 | 0 | +1,732.07 |
| 合计 | 32 | **+6,265.98** | — | **12,217.16** | 155.14 | **12,372.31** |
对平关系(已用脚本验证):`权益变动 +6,110.84 = 已了结净额含未了结成本12,217.16 + 未了结成本 18,483.14 未实现 155.14`
`已了结净额` 是**现金流口径**(把还在手上的仓位当成已花掉的钱),**不是亏损**32 个了结轮次合计 **+6,265.98**。
**⚠️ 最大的问题在这里**`510300.SH` 的 13 个轮次全部盈利(合计 +2,521.97),但**最终一笔未了结的
4,000 股(成本 18,483** 让它的净额变成 15,961。一只标的的未了结仓位吃掉了三只标的
全部已了结利润(+6,266的两倍半。旧配置里这个数字是 4,035**放大 4 倍仓位后变成 15,961**。
---
## 三、成交结构与资金
### 3.1 完整轮次
| 项 | 值 |
| --- | ---: |
| 完整轮次 | 3232 胜 0 负) |
| 单轮平均利润 | +195.81(最好 +684.48,最差 +139.36 |
| 平均持有 | 3.7 天(最长 23 天) |
| **持有 ≤1 天就了结** | **22 / 3269%** |
| 平均档位 / 最大档位 | 1.16 / 4 |
| 底仓 / 补仓次数 | 33 / 5 |
**69% 的轮次在 1 天内完成**:新配置把单档金额放大到 1.8~14 万后1% 的止盈目标对应的绝对金额
变成 18~140 元/档,达到速度没变,但**单轮利润的绝对值被放大**。
同时 **平均只用 1.16 档**(补仓 5 次),阶梯依然远未铺开。
### 3.2 资金占用
| 项 | 值 |
| --- | ---: |
| 有持仓天数 | 73 / 18240.1% |
| 平均占用 | 11,216 元 = **2.24%** |
| 峰值占用 | 87,052 元 = **17.41%** |
| 买入名义 / 换手 | 664,705 元 / **1.33 倍** |
| 资金需求(按各标的区间最低价估) | 三只各 1 档 ≈ **46,518**;铺满 10 档 ≈ **465,180** |
- 配置现在的**理论满载需求是 46.5 万**(三只各铺满 10 档50 万账户刚好能承载。
- 但实际峰值只用到 8.7 万17.4%)、平均 1.1 万2.24%)——**账户有 80% 以上的钱全年闲置**。
### 3.3 佣金(新配置下更不是瓶颈)
| 项 | 值 |
| --- | ---: |
| 佣金合计 | 401.79 |
| 占买入名义 | **0.06%**(旧配置 0.184% |
| 佣金率 0 → 0.0003 → 0.001 | +6,149.52 → +6,110.84 → +5,643.61 |
单档金额变大后几乎全部按 `0.0003` 计费(不再吃 5 元最低佣金),**佣金成本降到可忽略**。
`min_profit_pct=1%` 的绝对余量非常大(每档毛利润 ≈ 18~140 元 vs 双边佣金 10 元)。
### 3.4 逐月权益
| 月份 | 权益变动 | 幅度 |
| --- | ---: | ---: |
| 2025-12 | 0.00 | 0.000% |
| 2026-01 | +260.08 | +0.052% |
| 2026-02 | +105.42 | +0.021% |
| 2026-03 | **773.15** | 0.155% |
| 2026-04 | +2,234.72 | +0.447% |
| 2026-05 | +456.96 | +0.091% |
| 2026-06 | +925.85 | +0.184% |
| 2026-07 | +1,530.46 | +0.304% |
| 2026-08 | +767.21 | +0.152% |
| 2026-09 | +603.29 | +0.119% |
9 个月里 1 个月亏损、8 个月盈利,但**全部落在 ±0.45% 以内**——典型的"小仓位、稳定、无感"。
---
## 四、为什么收益率还是上不去(新配置下的定量结论)
### 4.1 根因没变:机会数量由市场决定
| 标的 | 可回放日 | 最低价跌破门槛 | **入场信号** | 跌破门槛天数占比 |
| --- | ---: | ---: | ---: | ---: |
| 588000.SH | 182 | 44 | 20 | 24.2% |
| 510300.SH | 182 | 47 | 29 | 25.8% |
| 518880.SH | 182 | 30 | 10 | 16.5% |
| 合计 | 546 | 121 | **59** | — |
一年 59 个信号(≈ 每天 0.32 次),本次实际建网 33 次、了结 32 轮。**机会已被用尽**。
33 次建网里,现价在过去 60 日收盘的分位中位数 **6.7%**19/33 落在 10% 分位以下——**入场门槛执行到位**。
### 4.2 单档股数放大后,绝对盈亏与账户无关
| 起始资金 | 权益变动 | 收益率 | 平均占用 | 峰值占用 |
| ---: | ---: | ---: | ---: | ---: |
| 200,000 | +6,110.84 | **3.06%** | 5.61% | 43.53% |
| 300,000 | +6,110.84 | 2.04% | 3.74% | 29.02% |
| **500,000** | **+6,110.84** | **1.22%** | 2.24% | 17.41% |
| 800,000 | +6,110.84 | 0.76% | 1.40% | 10.88% |
| 1,200,000 | +6,110.84 | 0.51% | 0.93% | 7.25% |
**同一份交易、同一个盈亏,只因为分母变大,收益率就摊薄 6 倍。**
所以"收益率低"要拆成两件事:①策略**绝对赚钱能力**(这 9 个月 +6,111 元);
②**账户里有多少钱在真正干活**(平均 2.24%)。
### 4.3 继续放大股数:收益线性涨、风险同步涨
| 场景50 万账户) | 权益变动 | 收益率 | 最大回撤 | 平均占用 | 占用 ROI | 收益/回撤 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| `buy_shares`×0.25 | +1,418.64 | 0.28% | 0.12% | 0.58% | 48.8% | 2.30 |
| `buy_shares`×0.5 | +3,077.19 | 0.62% | 0.24% | 1.11% | 55.4% | 2.54 |
| **现配置** | **+6,110.84** | **1.22%** | **0.48%** | **2.24%** | **54.5%** | **2.56** |
| `buy_shares`×2 | +12,226.40 | 2.45% | 0.95% | 4.49% | 54.5% | 2.57 |
| `buy_shares`×4 | +24,452.81 | 4.89% | 1.89% | 8.97% | 54.5% | 2.59 |
**占用 ROI 恒定在 48.8%~54.5%,收益/回撤恒定在 2.3~2.6** —— 说明在这段样本里,
放大股数**既不改善也不恶化风险调整后收益,只是等比放大**。
既然风险调整后收益不变,放大到多大就取决于账户能承受的回撤:若接受 1.9% 回撤,
`×4` 可把 9 个月收益做到 +2.4 万4.89%)。
---
## 五、参数敏感性28 组,基准=当前 `_etf.yaml`
| 场景 | 权益变动 | 收益率 | 最大回撤 | 底仓 | 补仓 | 主出口 | 副出口 | 佣金 | 平均占用 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| **基准(当前配置)** | **+6,110.84** | 1.222% | 0.478% | 33 | 5 | 32 | 0 | 401.79 | 2.24% |
| add_pct=2.0 | +5,856.05 | 1.171% | 0.362% | 32 | 4 | 31 | 0 | 378.00 | 2.78% |
| add_pct=4.0 | +5,794.31 | 1.159% | 0.356% | 33 | 3 | 32 | 0 | 382.15 | 2.37% |
| add_pct=5.0 | +5,104.25 | 1.021% | 0.412% | 31 | 1 | 30 | 0 | 339.29 | 2.71% |
| min_profit_pct=0.5 | +3,475.39 | 0.695% | 0.498% | 41 | 4 | 40 | 0 | 477.22 | 1.56% |
| min_profit_pct=0.8 | +5,220.81 | 1.044% | 0.486% | 37 | 4 | 36 | 0 | 432.96 | 1.80% |
| **min_profit_pct=1.5** | **+6,560.59** | **1.312%** | 0.438% | 23 | 4 | 22 | 0 | 284.56 | 3.21% |
| min_profit_pct=2.0 | +5,680.19 | 1.136% | 0.448% | 19 | 5 | 17 | 2 | 246.20 | 3.96% |
| channel_pct=1 | +3,287.51 | 0.658% | 0.677% | 23 | 4 | 22 | 0 | 283.33 | 3.07% |
| channel_pct=10 | +5,350.72 | 1.070% | 1.289% | 27 | 6 | 26 | 0 | 349.58 | 5.46% |
| channel_pct=20 | +5,579.94 | 1.116% | 0.480% | 28 | 6 | 27 | 0 | 352.61 | 3.25% |
| channel_pct=30 | +4,779.74 | 0.956% | 0.381% | 23 | 4 | 22 | 0 | 295.36 | 2.53% |
| max_adds=3 / 5 / 15 | +6,110.84 | 1.222% | 0.478% | 33 | 5 | 32 | 0 | 401.79 | 2.24% |
| inner_step=0.2 | +5,848.68 | 1.170% | 0.478% | 35 | 5 | 34 | **1** | 423.10 | 2.01% |
| inner_step=0.4 | +6,110.84 | 1.222% | 0.478% | 33 | 5 | 32 | 0 | 401.79 | 2.24% |
| 无副出口 | +6,110.84 | 1.222% | 0.478% | 33 | 5 | 32 | 0 | 401.79 | 2.24% |
| atr_multiplier×0.5 / ×2.0 | +6,110.84 | 1.222% | 0.478% | 33 | 5 | 32 | 0 | 401.79 | 2.24% |
| 无 T+1min_hold_days=0 | +6,110.84 | 1.222% | 0.478% | 33 | 5 | 32 | 0 | 401.79 | 2.24% |
| 佣金率=0 / 0.001 | +6,149.52 / +5,643.61 | 1.230% / 1.129% | 0.478% / 0.491% | 33 | 5 | 32 | 0 | 350 / 1,317 | 2.24% |
| 成交=反弹确认价 | +8,426.54 | 1.685% | 0.558% | 28 | 5 | 27 | 0 | 343.75 | 3.40% |
| **成交=收盘价** | **2,551.34** | **0.510%** | 1.676% | 15 | 6 | 13 | 0 | 197.34 | 6.71% |
**与旧配置一致的三个"零影响参数"依然零影响**(新配置下同样验证):
- **`atr_multiplier`×0.5 / ×2.0 → 结果一模一样**:格距不参与任何触发价(`docs/etf.md` §3.3 的设计后果)。
逐标的 ATR 倍数标定0.5/1.0/1.0**对成交没有任何影响**。
- **`max_adds`=3 / 5 / 15 → 结果一模一样**:一年只补仓 5 次、最多 4 档9 档闸门从未生效。
- **`inner_step`=0.4 / 无副出口 → 结果一模一样**`inner_grids×inner_step`(1.4%~1.8%) 仍大于
`min_profit_pct`(1.0%),副出口在基准下 **0 次成交**;只有压到 0.2 才触发 1 次。
- `min_profit_pct=1.5%` 是本批唯一略优于基准的参数(+6,560.59 vs +6,110.84
但差异仅 7%**在 32 个轮次的样本上不足以判定**(旧配置同参数反而略差)。
---
## 六、风险:无止损 + 未了结仓位
### 6.1 未了结仓位的浮亏轨迹(均价法)
| 标的 | 持仓天数 | 最长连续浮亏天数 | 最深浮亏 | 最深浮亏% | 期末浮亏 |
| --- | ---: | ---: | ---: | ---: | ---: |
| 588000.SH | 27 | 13 | 1,191 | **8.25%** | +2 |
| 510300.SH | 47 | 7 | 651 | 3.54% | 150 |
| 518880.SH | 22 | 5 | 2,518 | 3.57% | +135 |
- **这三个标的的浮亏都不深**(最深 8.25%),且**最后都回正**(期末浮亏仅 150 / +2 / +135
样本期(含 MA60 向下的 3~7 月)没有出现真正的单边下跌,**尾部风险未被覆盖**。
- 510300 的期末浮亏只有 **150 元**0.8%),不是因为"亏得多",而是因为
**4,000 股 × 4.62 的成本额18,483被算成了现金流出**,所以在现金流口径里显得很吓人。
### 6.2 时间止损反事实(分析用)
| 规则 | 权益变动 | 收益率 | 占用 ROI | 强平次数 |
| --- | ---: | ---: | ---: | ---: |
| 不止损(现配置) | +6,110.84 | 1.222% | 54.48% | 0 |
| 持有 >5 天且浮亏即平 | +5,914.84 | 1.183% | 52.73% | 3 |
| 持有 >10 天且浮亏即平 | +5,474.84 | 1.095% | 48.81% | 3 |
| 持有 >20 天且浮亏即平 | +4,838.84 | 0.968% | 43.14% | 3 |
**时间止损在这段样本里是负收益**(越早平仓越差),因为浮亏最终都修复了。
这说明:**在均值回归有效的样本里,无止损是特征不是缺陷**;它真正的风险只在单边下跌时才暴露,
而那部分样本这里没有。要不要加闸门,取决于你能否承受"一次单边下跌把 32 轮利润全部回吐"
(旧配置里 510300 已经演示过一次13 轮盈利被一笔未了结仓位反超)。
---
## 七、与旧配置的结论对比
| 项 | 旧配置1,000 股/档) | 新配置10,000/4,000/2,000 | 结论变化 |
| --- | --- | --- | --- |
| 50 万账户 9 个月收益 | +1,5340.31% | **+6,1111.22%** | 放大 4 倍(等比于仓位) |
| 最大回撤 | 0.25% | 0.48% | 同步放大 |
| 轮次 / 胜率 | 28 / 28 胜 | 32 / 32 胜 | 机会未变多 |
| 单轮平均利润 | 55.98 | **195.81** | 3.5 倍(仓位放大) |
| 平均资金占用 | 0.67% | 2.24% | 仍极低 |
| 占用 ROI | 45.68% | 54.48% | 略优(大单摊薄佣金) |
| 佣金/名义 | 0.184% | **0.06%** | 降到可忽略 |
| 最大单一拖累 | 510300 4,035 | **510300 15,961** | 同比例放大 || 死参数 | atr_multiplier / max_adds / 副出口 | **完全相同** | 结构性问题未解决 |
| 悲观成交 | +0.16% | **0.51%(转负)** | 敏感度放大到会亏钱 |
**新配置解决了"钱太少"的一部分(单轮利润从 56 元到 196 元),但没解决三件结构性问题:**
①机会频率(由市场决定);②资金利用率(平均 2.24%);③无止损下单一标的拖累(同比例放大)。
---
## 八、和"买入持有"比:收益率更低,但资金效率与回撤好得多
同一区间2025-12-22 ~ 2026-09-18182 个交易日)、同一份日线、同一 50 万账户
`vs_hold.py`,买入持有=首日等权买入三只 ETF 持到期末,忽略整手限制):
| 策略 | 期末权益 | 总收益 | 年化 | 最大回撤 | 日波动 | 夏普 | 卡玛 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| ETF 网格(现配置) | 506,110.84 | **+1.22%** | 1.70% | **0.48%** | **0.080%** | **1.34** | **2.56** |
| 等权买入持有 | 526,201.75 | **+5.24%** | 7.33% | 16.75% | 1.747% | 0.40 | 0.31 |
逐标的区间涨跌:`588000.SH` **+24.13%**(期间最大回撤 31.19%)、`510300.SH` 3.13%、
`518880.SH` 5.28%(最大回撤 30.52%)。
**分三种口径回答"哪个更好"**
| 口径 | 胜者 | 差距 |
| --- | --- | --- |
| **绝对收益**(同样 50 万) | **买入持有** | +5.24% vs +1.22%(多赚 2 万,是网格的 4.3 倍) |
| **风险调整后**(夏普/卡玛) | **网格** | 夏普 1.34 vs 0.40;卡玛 2.56 vs 0.31 |
| **资金效率** | **网格** | 平均只占用 2.24% 的钱就赚了 1.22%(占用部分 ROI **54.48%**);买入持有 100% 占用 |
**但是"同风险"才是公平的比法。** 网格只投 2.24% 的钱、回撤 0.48%;买入持有投 100%、回撤 16.75%。
把网格单档股数放大到接近买入持有的回撤:
| 放大倍数 | 权益变动 | 总收益 | 最大回撤 | 平均占用 | 夏普 | 卡玛 |
| ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| 1×现配置 | +6,110.84 | 1.22% | 0.48% | 2.24% | 1.34 | 2.56 |
| 4× | +24,452.81 | 4.89% | 1.89% | 8.97% | 1.35 | 2.59 |
| 10× | +31,729.14 | **6.35%** | 6.42% | 33.63% | 0.87 | 0.99 |
| 20× | +40,473.94 | **8.09%** | 7.40% | 40.16% | 0.97 | 1.09 |
| 35× | 放大过头,被资金/10 档上限挡住,回测归零 | — | — | — | — | — |
**结论**:把仓位放大到 **4~20 倍**(回撤仍在买入持有的一半以内),网格的绝对收益
4.89% ~ 8.09%)就能**超过买入持有的 5.24%**。也就是说——
**现在配置下"买入持有更好"只是因为网格几乎没下注;同风险下网格的效明显更高。**
但要注意这是同一段历史的外推,且样本期 `588000.SH` 涨 24%,是偏向"持有"的行情。
---
## 九、建议(按证据强度排序)
| # | 措施 | 量化依据 | 代价 | 需要改代码 |
| ---: | --- | --- | --- | --- |
| 1 | **把 `buy_shares` 提到风险预算允许的上限**(或改成"每档 = 现金的 x%" | 占用 ROI 恒定 48~55%、收益/回撤恒定 2.3~2.6`×2` 得 +12,2262.45%)、`×4` 得 +24,4534.89% | 回撤同步到 0.95% / 1.89% | 只改 `_etf.yaml` |
| 2 | **扩充标的白名单**(目标 6~10 只) | 收益率随标的数近似线性1→3 只0.20%→0.77%,见旧报告 §10.3);当前峰值占用仅 17.4%,容量充足 | 需逐标的标定筛选 | 只改 `_etf.yaml` |
| 3 | **接受或修掉 `510300.SH` 的未了结拖累** | 它的 13 轮盈利 +2,534 被一笔未了结仓位变成 15,961是三只里唯一的净负项 | 加闸门会引入已实现亏损§6.2 显示样本内为负收益) | 需改 `positions.py` |
| 4 | **让副出口可达或删除** | `inner_step` 0.4 与"无副出口"结果完全一致0.2 才有 1 次成交 | 改 `_etf.yaml` 一行 | 只改 `_etf.yaml` |
| 5 | **不要动** `add_pct` / `channel_pct` / `atr_multiplier` | 现值均不劣于邻域;`atr_multiplier` 完全无效 | — | — |
| 6 | **验证成交假设** | `touch` +6,111 / `bounce` +8,427 / `close` **2,551**;新配置下悲观模型已经转负 | 需 tick/分钟级数据 | — |
**一句话**:新配置把"每轮赚多少"放大了 3.5 倍,但**收益率仍受限于"一年 59 个机会 × 平均只用 2.24% 的钱"**。
下一步要提收益,只有两条路:**扩标的(更多并行机会)** 和 **在可承受回撤内继续放大单档股数**
调参已被数据否决(唯一例外是 `min_profit_pct=1.5%`,但样本量不足以定论)。
---
## 十、复现
```
labs/analysis/etf/
├── backtest.py 回测内核日线近似、三种成交模型、共享资金、T+1、sizer
│ —— 配置直接读 py-client/etc/_etf.yaml
├── run.py 总报告生成器 → results.json / run_report.txt
├── compare.py 旧 vs 新配置对照 + 资金需求 + 规模敏感性
├── capital.py 资金需求与账户规模扫描
├── analysis.py 轮次统计 / 资金占用 / 逐月 / 28 组敏感性
├── sweep.py 改进方案扫描(参数 / 规模 / 组合)
├── universe.py 标的数量 × 资金规模
├── entries.py 入场机会频率
├── drawdown.py 未了结仓位浮亏轨迹 + 时间止损反事实
├── vs_hold.py 网格 vs 等权买入持有(同区间、同账户)
└── cache/*.json 日线缓存
```
```powershell
cd D:\work\quant\big-qmt
py -3.14 -B labs/analysis/etf/run.py # 当前 _etf.yaml 的基准回测与报告
py -3.14 -B labs/analysis/etf/compare.py # 旧 vs 新对照
py -3.14 -B labs/analysis/etf/capital.py # 资金需求
py -3.14 -B labs/analysis/etf/drawdown.py # 浮亏轨迹
py -3.14 -B labs/analysis/etf/vs_hold.py # 网格 vs 买入持有
```