动量过滤器全层参数调优:适配分钟级快进快出交易

动量过滤器全层参数调优:适配分钟级快进快出交易

日期: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*s6-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 修正(这是可接受的)

Read more

跑步的技巧(滚动落地)

“滚动落地(rolling contact / rolling foot strike)”不是一种教条式的“脚法”,而是一种 让冲击沿着整只脚、整条后链逐级传递的落地机制。 它的核心不是“你先用哪儿着地”,而是: 你的脚落地之后,冲击是不是像轮子一样滚过去,而不是像锤子一样砸下去。 这就是滚动落地的本质。 一、什么叫“滚动落地”? 你可以把它理解成两种完全不同的落地方式: 1. 砸地(撞击式) 脚像锤子一样拍到地上: * 要么后跟先砸 * 要么前掌先戳 * 冲击集中在一个点 * 一个结构瞬间吃掉大部分载荷 结果就是: * 后跟砸 → 膝盖难受 * 前掌戳 → 前脚掌磨烂 * 都不是长跑友好模式 这叫 撞击式着地(impact strike)。 2. 滚地(滚动式) 脚像轮胎一样“滚”过地面: * 不是某一点硬砸 * 而是外侧中足先轻触 * 再向前滚到前掌 * 最后从大脚趾蹬离

By SHI XIAOLONG

AMI的优越性

世界模型(World Models)的具体例子 如下,我按类型分类,便于理解。每类都附带实际实现、演示效果和应用场景。 1. Yann LeCun / Meta 的 JEPA 系列(最直接对应“世界模型”概念) 这些是 LeCun 主张的非生成式抽象预测世界模型代表。 * I-JEPA(Image JEPA,2023) 输入一张图像,模型把不同区域(context 和 target)编码成抽象表示,然后预测 target 的表示(不在像素级别重建)。 例子:给定一张遮挡了部分物体的图片,模型能预测“被遮挡物体的大致位置和属性”,构建对物体持久性和空间关系的理解。 这是一个“原始世界模型”,能学习物理常识(如物体不会凭空消失)。 * V-JEPA / V-JEPA 2(Video JEPA,

By SHI XIAOLONG

什么是:“世界模型(World Models)”

世界模型(World Models) 是人工智能领域的一个核心概念,尤其在 Yann LeCun 等研究者推动的下一代 AI 架构中占据中心位置。它指的是 AI 系统在内部构建的对现实世界的抽象模拟或内部表示,让机器能够像人类或动物一样“理解”物理世界、预测未来、规划行动。 简单比喻 想象你闭上眼睛也能“看到”房间里的物体会如何移动、碰撞或掉落——这就是你大脑里的世界模型。AI 的世界模型就是类似的“数字孪生”(digital twin)或“内部模拟器”:它不是简单记住数据,而是学习世界的动态、因果关系和物理直觉(如重力、物体持久性、遮挡、因果等)。 为什么需要世界模型? 当前主流的大型语言模型(LLM) 擅长处理文本(统计模式预测),但存在根本局限: * 缺乏对物理世界的真正理解 → 容易“幻觉”、无法可靠规划。 * 样本效率低 → 人类/

By SHI XIAOLONG

K线周期可配置化设计方案

K线周期可配置化设计方案 1. 背景与目标 当前 Beta 套利策略的 K 线周期硬编码为 "1h",分散在多个文件中。需要: 1. 将 K 线周期从 1h 改为 2h 2. 提取为环境变量 BETA_ARB_KLINE_INTERVAL,使其可在 .env 中配置 2. 影响范围分析 2.1 需要修改的文件(共 6 个) 文件 硬编码位置 修改内容 src/trading/config.py BetaArbConfig dataclass 新增 kline_interval 字段,

By SHI XIAOLONG