Files
MoFin/docs/max_hold分析结论.md

85 lines
4.4 KiB
Markdown
Raw Permalink 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.
# max_hold(持有期上限)分析与优化结论
> 日期:2026-08-17
> 背景:老莫发现策略回测里大量个股"到期自然出货"exit_reason=time)而非到 RR 卖点(target),质疑 max_hold 是拍脑袋定的。要求重新测算并评估对收益率/年化的影响。
## 一、结论速览
1. **老莫质疑成立**:各策略 max_hold 大部分是硬编码拍定,缺乏专项测算。
2. **分温区网格扫描后**:最优 max_hold 随市场环境变化——**trend_down/choppy 下 20d 最优,trend_up 下 15dv_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槽, 含资金空窗)
| max_hold | 20d | 30d | 40d | 60d |
|----------|-----|-----|-----|-----|
| v_mr | 10.3% | **11.7%** | 9.9% | 8.9% |
| s2_panic_v2 | **5.5%** | 4.8% | 5.4% | 4.6% |
| hk_pe_oversold | 22.4% | 21.9% | **23.2%** | 22.6% |
**重要修正(老莫质疑后复测)**:此前"20d 最优"基于 8槽满仓近似(过度乐观,未计资金空窗/满仓跳过)。
真实资金模拟(portfolio_nav)显示:v_mr 最优 30d、hk_pe_oversold 最优 40d、仅 s2_panic_v2 20d。
→ hk_pe_oversold_v2 已回退 40d、v_mr 调 30d。占仓太久不好,占仓太短也不好,需真实资金模拟找平衡。
### 旧近似(作废参考)
| 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