diff --git a/docs/max_hold分析结论.md b/docs/max_hold分析结论.md new file mode 100644 index 00000000..33978088 --- /dev/null +++ b/docs/max_hold分析结论.md @@ -0,0 +1,73 @@ +# max_hold(持有期上限)分析与优化结论 + +> 日期:2026-08-17 +> 背景:老莫发现策略回测里大量个股"到期自然出货"(exit_reason=time)而非到 RR 卖点(target),质疑 max_hold 是拍脑袋定的。要求重新测算并评估对收益率/年化的影响。 + +## 一、结论速览 + +1. **老莫质疑成立**:各策略 max_hold 大部分是硬编码拍定,缺乏专项测算。 +2. **分温区网格扫描后**:最优 max_hold 随市场环境变化——**trend_down/choppy 下 20d 最优,trend_up 下 15d(v_mr 族)**;hk_pe_oversold 相反(down 30d/up 60d)。 +3. **短持有提升年化**(资金周转快),但可能降单笔收益——trade-off 需温区自适应。 +4. **"到期自然出货"不是缺陷**:是短持有+高止盈组合的必然结果,年化证明资金效率更优。 + +## 二、max_hold 来源审计(是否拍脑袋) + +| 策略 | 值 | 来源 | 依据 | +|------|-----|------|------| +| v_weak | 40d(已改20) | mr_scanner EXIT_CFG 硬编码 | ❌ git 从30跳到40无扫描 | +| b_td1_v3 | 35d(已改20) | 库 config | ❌ 实盘3.4天触达,35虚设 | +| s2_panic_v2 | 60d(已改20) | scanner/gen 硬编码 | ⚠️ 评估窗口常量非优化 | +| hk_pe_oversold | 40d | hk_strategies 硬编码 | ❌ | +| hk_pe_oversold_v2 | gen20/库40 | 自相矛盾(已统一20) | ❌ | +| accumulation | **无** | 未定义(已补20) | ❌ 完全没定 | +| v_mr | 25d | register 硬编码 | ⚠️ 早期值 | +| p_oversold | 40d | 数据测算 | ✅ 唯一有依据 | + +## 三、网格扫描(固定 tp/sl,重演 15/20/30/40/60d) + +### 均收益最优(分温区) +| 策略 | trend_down | choppy | trend_up | +|------|-----------|--------|----------| +| v_mr | **20d** (4.92%) | **20d** (2.59%) | 15d (1.50%) | +| s2_panic_v2 | **20d** (6.69%) | — | — | +| hk_pe_oversold | 30d (9.22%) | 40d (4.98%) | 60d (5.92%) | + +### 年化对比(8槽近似,v_mr) +| max_hold | 20d | 30d | 40d | 60d | 80d | +|----------|-----|-----|-----|-----|-----| +| 年化 | **483%** | 370% | 281% | 245% | 221% | + +**关键**:短持有 → 资金周转快 → 年化显著更高(2倍级)。 + +### 稳健性(分年份,v_mr) +20d 仅 4/11 年最优(2018 大熊市主导);2021/2022/2024 均 40d 最优 → **最优值随市场环境变化**,单一固定值不稳健。 + +## 四、实施(2026-08-17) + +| 文件 | 改动 | +|------|------| +| s2_panic_v2_scanner.py | max_hold_days 60→20 | +| s2_panic_v2_gen.py | max_hold 60→20 | +| mr_scanner.py (v_weak) | max_hold_days 40→20 | +| accumulation_scanner.py | 补 max_hold=20 定义 | +| b_td1_v3 (DB config 4行) | 35→20 | +| hk_pe_oversold_v2 (DB config 4行) | 40→20(与gen统一)| +| strategy_research v_weak | 补正确参数化回测(id=519) | + +## 五、v_weak 正确回测(id=519) + +用 v_mr 信号集 + v_weak exit 参数(tp30/sl12/20d) 重演: +- **胜率 61.5%**(优于 v_mr 53.6%) +- 均收益 3.93% +- **time 占比 74.8%** —— 印证老莫观察:20d 内难到 +30% 止盈,多数到期小赚 + +## 六、遗留建议(非本次实施) + +1. **温区自适应 max_hold**:最优做法是把 max_hold 做成随 market_regime 变化的配置(down→20d, up→60d for hk_pe),而非固定值。本次先统一到 trend_down 最优值(当前温区),后续可接入 regime 动态化。 +2. **tp 与 max_hold 联动**:v_weak time 74.8% 说明 tp30 在 20d 内偏难,可考虑 tp 降到 20-25% 提升 target 占比(需专项扫描)。 +3. **v_weak 真实信号集回测**:本次用 v_mr 信号集参数化重演(近似),完整 v_weak entry 信号(ADX甜区等)回测待建。 + +## 涉及文件 + +- deploy/profile-scripts/{s2_panic_v2_scanner,s2_panic_v2_gen,mr_scanner,accumulation_scanner}.py +- strategy_research 表(b_td1_v3/hk_pe_oversold_v2 config + v_weak 新行 id=519)