动量过滤器全层参数调优:适配分钟级快进快出交易
动量过滤器全层参数调优:适配分钟级快进快出交易
日期:2026-03-11
涉及文件:src/trading/momentum_filter.py
前置文档:docs/BOCPD参数调优_适配分钟级交易.md(Layer 0 BOCPD 部分)
关联设计文档:docs/开仓动量过滤器设计方案_v5.1.md
1. 背景
在完成 Layer 0 BOCPD 参数调优(hazard_rate / drift_threshold / max_run)后,对四层过滤器的剩余参数进行全面审查,发现多个参数仍然按小时级交易的假设设定,与系统实际的分钟级交易特征不匹配。
系统交易特征
| 特征 | 说明 |
|---|---|
| 持仓周期 | 大部分 ≤30 分钟(6 根 5min K 线) |
| 信号来源 | 短暂价差异常(协整配对的暴跌/暴涨偏离) |
| 关注尺度 | 小级别价格变化导致的价差异常 |
| 交易频率 | 高频,快进快出 |
2. 变更总览
| 层级 | 参数 | 变更前 | 变更后 | 时间含义变化 |
|---|---|---|---|---|
| Layer 0 | _hurst_lookback |
60 | 24 | 5h → 2h |
| Layer 1 | _sustained_n |
30 | 12 | 2.5h → 1h |
| Layer 1 | _mtf_lookback |
6 | 3 | 6h → 3h |
| Layer 3 | _spread_hl_max |
48 - 24*s |
6 - 4*s |
s=0.5: 36h → 4h |
| Layer 3 | _spread_lookback |
40 | 30 | 偏长 → 平衡 |
3. 逐参数推导
3.1 Layer 0:_hurst_lookback 60 → 24
角色:DFA-2(Detrended Fluctuation Analysis 二阶去趋势)的回看窗口,作为 BOCPD 预热期(前 20 根 K 线)的后备趋势检测。
问题:60 根 = 5 小时。DFA-2 用 5 小时数据计算 Hurst 指数,时间尺度远超 30 分钟持仓周期。5 小时前的价格行为对当前短期交易没有参考价值。
推导:
BOCPD 调优后期望机制长度 = 1/0.05 = 20 根 = 1.7h
DFA-2 回看窗口应与 BOCPD 机制长度对齐
→ 24 根 = 2h(略大于 1.7h,确保足够样本)
约束:DFA-2 算法最少需要 20 个数据点(_hurst_dfa2 函数中 if n < 20: return None),24 根满足此下限。
3.2 Layer 1:_sustained_n 30 → 12
角色:Kaufman Efficiency Ratio(ER)的计算窗口。ER = 方向位移 / 路径长度,衡量价格走势的"效率"(趋势性)。
问题:30 根 = 2.5 小时。过长的窗口会把"已经走完的趋势"纳入计算,导致趋势结束后仍然触发拦截。
推导:
持仓 ≤30min = 6 根 K 线
ER 窗口应覆盖"对持仓期有影响的近期动量"
→ 2~3 倍持仓周期 = 12~18 根
→ 取 12 根 = 1h:既能捕捉近期趋势,又不会被远期历史干扰
影响:
- ER 对趋势的响应更快(窗口更短 → 更快反映当前状态)
- 趋势结束后更快放行(不会被 2 小时前的下跌"拖累")
- 净位移阈值
_sustained_base_thresh = 0.008(0.8%)不变,1h 内 0.8% 的净位移仍然是有意义的趋势信号
3.3 Layer 1:_mtf_lookback 6 → 3
角色:MTF(Multi-Timeframe)确认指标的 1h bar 回看数量。用更大时间框架的 ER 来确认 5m 级别的趋势。
问题:6 根 1h bar = 6 小时。6 小时的趋势对 30 分钟持仓几乎无影响。真正危险的是"当前 1~3 小时的加速趋势"。
推导:
MTF 的目的:确认 5m 趋势在更大时间框架也成立
对 30min 持仓,"更大时间框架" ≈ 2~3h
→ 3 根 1h bar = 3h
影响:
- MTF ER 的计算基于 3+1=4 个 1h bar 收盘价(需要
lookback+1个点) - 仍然有足够样本计算 ER
- 不会因为 6 小时前的趋势而错误降低 ER 阈值
3.4 Layer 3:_spread_hl_max 48-24*s → 6-4*s
角色:Layer 3 仲裁中 OU 过程半衰期的上限。当 Layer 1 软拦截时,如果 spread 被确认为平稳(PP/ADF + KPSS),还需检查半衰期是否足够短——半衰期过长意味着回归太慢,持仓期内无法获利。
问题:s=0.5 时半衰期上限 = 36 小时。一个半衰期 36h 的均值回归过程在 30 分钟内的预期回归幅度:
回归比例 = 1 - exp(-ln2 * 0.5h / 36h) = 1 - exp(-0.0096) ≈ 0.96%
即 30 分钟内 spread 只回归不到 1%,几乎无法获利。
推导:
目标:持仓 30min 内 spread 回归至少 ~10%
→ 1 - exp(-ln2 * 0.5 / HL_max) >= 0.10
→ HL_max ≈ 3.3h
放宽为 4h(s=0.5),留一定余量:
→ 30min 内回归 ~8.3%,在配合 z-score 选时的情况下可接受
strength 联动对照:
| strength | 变更前 | 变更后 | 30min 内预期回归 |
|---|---|---|---|
| 0.0(宽松) | 48h | 6h | ~5.6% |
| 0.25 | 42h | 5h | ~6.7% |
| 0.5(默认) | 36h | 4h | ~8.3% |
| 0.75 | 30h | 3h | ~10.9% |
| 1.0(严格) | 24h | 2h | ~15.9% |
3.5 Layer 3:_spread_lookback 40 → 30
角色:用于平稳性检验(PP/ADF + KPSS)和 ER 计算的 z4h 历史窗口长度。
问题:40 个 z4h 值覆盖时间较长,包含过多历史信息。
权衡:
- 统计检验需要足够样本:PP/ADF 至少需要 ~15 个点,KPSS 也类似
- 30 个点仍远超最低要求,检验功效有保障
- 窗口缩短后 spread 状态更能反映近期特征
建议:30 是一个平衡点。此参数优先级较低,如需进一步调整可通过实盘观察决定。
4. 参数调整前后全景对比
# ══════════════════════════════════════════
# 调整前(小时级交易假设)
# ══════════════════════════════════════════
# Layer 0
_hurst_lookback = 60 # 5.0h
# Layer 1
_sustained_n = 30 # 2.5h
_mtf_lookback = 6 # 6.0h
# Layer 3
_spread_hl_max = 48 - 24*s # s=0.5 → 36h
_spread_lookback = 40
# ══════════════════════════════════════════
# 调整后(分钟级快进快出)
# ══════════════════════════════════════════
# Layer 0
_hurst_lookback = 24 # 2.0h(与 BOCPD 期望机制 1.7h 对齐)
# Layer 1
_sustained_n = 12 # 1.0h(≈2× 持仓周期)
_mtf_lookback = 3 # 3.0h(关注近期加速趋势)
# Layer 3
_spread_hl_max = 6 - 4*s # s=0.5 → 4h(持仓内可回归 ~8%)
_spread_lookback = 30 # 平衡检验功效与时效性
5. 联合调优后各层时间尺度一致性
结合前次 BOCPD 调优,全部参数的时间覆盖范围现已统一收敛到分钟~小时级:
| 组件 | 时间覆盖 | 说明 |
|---|---|---|
| BOCPD 期望机制长度 | 1.7h | 变点检测的核心时间尺度 |
| BOCPD max_run | 5.0h | 追踪历史上限 |
| DFA-2 回看窗口 | 2.0h | 后备检测与 BOCPD 对齐 |
| Layer 1 ER 窗口 | 1.0h | 近期动量评估 |
| Layer 1 MTF 回看 | 3.0h | 多时间框架确认 |
| Layer 3 半衰期上限 | 4.0h | 回归速度约束 |
| Layer 3 spread 回看 | 30 个 z4h 值 | 平稳性检验窗口 |
| 持仓周期 | ≤0.5h | 系统设计目标 |
各层时间尺度形成从小到大的合理梯度:持仓(0.5h) < ER(1h) < BOCPD机制(1.7h) < DFA(2h) < MTF(3h) < 半衰期(4h) < max_run(5h)。
6. 后续观察建议
- Layer 1 误杀率:
_sustained_n从 30 缩短到 12 后,ER 对短期波动更敏感。若出现"短暂反弹后又被 ER 拦截"的情况,可考虑微调到 15 - Layer 3 放行率:
_spread_hl_max大幅缩短后,更多软拦截会被 Layer 3 维持(因为半衰期检查更严格)。这是预期行为——半衰期过长的 spread 确实不适合短持仓 - MTF 样本量:
_mtf_lookback=3意味着只需 4 根 1h bar 即可计算 MTF ER。启动后约 4 小时 MTF 才生效,之前不会有 MTF 修正(这是可接受的)