# ETF 自适应网格策略回测报告(新配置) - 配置来源:`py-client/etc/_etf.yaml`(**回测直接读取该文件,不再维护副本**) - 回测区间:**2025-12-22 ~ 2026-09-18(182 个交易日)** - 标的:`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.34(−0.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.34,−0.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 完整轮次 | 项 | 值 | | --- | ---: | | 完整轮次 | 32(32 胜 0 负) | | 单轮平均利润 | +195.81(最好 +684.48,最差 +139.36) | | 平均持有 | 3.7 天(最长 23 天) | | **持有 ≤1 天就了结** | **22 / 32(69%)** | | 平均档位 / 最大档位 | 1.16 / 4 | | 底仓 / 补仓次数 | 33 / 5 | **69% 的轮次在 1 天内完成**:新配置把单档金额放大到 1.8~14 万后,1% 的止盈目标对应的绝对金额 变成 18~140 元/档,达到速度没变,但**单轮利润的绝对值被放大**。 同时 **平均只用 1.16 档**(补仓 5 次),阶梯依然远未铺开。 ### 3.2 资金占用 | 项 | 值 | | --- | ---: | | 有持仓天数 | 73 / 182(40.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+1(min_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,534(0.31%) | **+6,111(1.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-18,182 个交易日)、同一份日线、同一 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,226(2.45%)、`×4` 得 +24,453(4.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 买入持有 ```