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

4.4 KiB
Raw Blame History

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