IMM Kalman Filter 模块参数详解(v5.0)
IMM Kalman Filter 模块参数详解(v5.0)
IMM(Interacting Multiple Model)是一个时变 [α, β] 联合估计器,核心思想来自 Blom & Bar-Shalom (1988):M=5 个并行 Kalman Filter 各自使用不同的 (Q_β, Φ_β) 参数对,通过贝叶斯模型概率实时加权融合。双用途输出:体制检测(regime_score → 入场过滤)+ Hedge Ratio(kalman_beta → 仓位加权)。
一、状态空间模型核心参数
1. IMM_Q_BETA_GRID — β 过程噪声网格
- 默认值:
[1e-6, 1e-5, 1e-4, 1e-3, 1e-2] - 含义: M=5 个模型各自的 β 过程噪声 Q_β,对数均匀分布,跨越 4 个数量级
- 物理解释:
1e-6(模型0): β 几乎不变,适配极度稳定的配对关系1e-5(模型1): β 缓慢变化1e-4(模型2): β 正常变化,"中位"模型1e-3(模型3): β 快速变化,弱回归1e-2(模型4): 结构性断裂,近自由漂移
- 作用: 不同 Q_β 使每个模型的 P∞_β(稳态不确定性)跨 5 个数量级(1e-5 → 1.0),确保模型间区分度强
2. IMM_PHI_BETA_GRID — β OU 回归强度网格
- 默认值:
[0.95, 0.97, 0.98, 0.99, 0.995] - 含义: 与 Q_β 配对的 OU 均值回归系数 Φ_β
- 设计原则: 低Q配高回归,高Q配弱回归
- 模型0: Q=1e-6, Φ=0.95 → 强回归 + 低噪声 = β 非常稳定
- 模型4: Q=1e-2, Φ=0.995 → 弱回归 + 高噪声 = β 近随机游走
- 状态方程:
x_t = Φ^(j) × x_{t-1} + (I − Φ^(j)) × x̄_t + w_t
3. IMM_Q_ALPHA — α 过程噪声
- 默认值:
1e-5 - 含义: 截距 α 的过程噪声(所有模型共享)
- 约束:
q_α = Q_β_grid[2] / 10,α 变化比中位 β 慢一个量级
4. IMM_PHI_ALPHA — α OU 回归系数
- 默认值:
0.995 - 含义: 截距 α 的均值回归强度(所有模型共享),几乎无回归(接近1),允许 α 缓慢漂移
二、初始化参数
5. IMM_P0_ALPHA — α 初始不确定性
- 默认值:
0.1 - 含义: α 的初始协方差 P₀[0,0],即 ±√0.1 ≈ ±0.32 的 1σ 区间
6. IMM_P0_BETA — β 初始不确定性
- 默认值:
0.1 - 含义: β 的初始协方差 P₀[1,1]
- 设计目的: 避免冷启动时
obs_weight过低导致更新停滞(P_β 太小 → Kalman 增益小 → 学不到东西)
三、观测噪声参数
7. IMM_R_FLOOR — 观测噪声下限
- 默认值:
1e-6 - 含义: Sage-Husa 自适应 R 的正定下限,匹配 spread 方差量级
- 作用: 防止 R → 0 导致数值不稳定
8. IMM_SAGE_HUSA_B — Sage-Husa 遗忘基数
- 默认值:
0.97 - 含义: 时变遗忘因子的基数 b,公式
d_k = (1-b)/(1-b^k) - 特性:
- 早期: d₁=1.0, d₂≈0.49 → 快速收敛
- 长期: d_k → 0.03 → 等效 EMA(0.03)
- 替换: v5 中替换了旧的 Robbins-Monro 方法
四、鲁棒性参数
9. IMM_CLIP_SIGMA — Huber 截断倍数
- 默认值:
3.0 - 含义: 创新量 ε 的截断边界为 ±c×√S,超过此范围的创新量被 clip
- 关键: 仅影响状态更新(Kalman gain 应用的 ε),不影响似然计算,确保体制检测不受极端值干扰但概率更新正常
10. IMM_STUDENT_T_NU — Student-t 初始自由度
- 默认值:
5.0 - 含义: Student-t 似然的初始自由度 ν
- 实际使用: 初始化时被 per-pair MLE 估计覆盖(用 OLS 残差做 MLE),5.0 仅为 fallback
- 范围: clip 在 [3.0, 30.0],ν→30 接近高斯,ν=3 极度重尾
11. IMM_NU_GAMMA — ν 在线学习率
- 默认值:
0.01 - 含义: 在线 ν 自适应的学习率(Step 8),有效窗口约 100 步
- 机制: 追踪预测分布的 4 阶矩 E[z⁴](v5 修正:不是 (E[z])⁴),excess kurtosis > 0.2 且 obs_weight > 0.3 时用
ν = clip(6/excess_kurt + 4, 3, 30)反解
五、转移概率矩阵(TPM)参数
12. IMM_TPM_LAMBDA — Dirichlet TPM 遗忘因子
- 默认值:
0.995 - 含义: TPM 的 Dirichlet 浓度参数衰减因子
- 有效窗口:
1/(1-0.995) = 200 步,4h bar 对应约 33 天 - 更新公式:
α_{TPM} = λ × α_{TPM} + c(c 为充分统计量)
13. IMM_TPM_KAPPA — Dirichlet 初始浓度
- 默认值:
20.0 - 含义: TPM Dirichlet 先验的总浓度参数
- 作用: 控制初始 TPM 的"硬度",κ 越大初始先验越强,TPM 更新越慢
14. IMM_TRANSITION_PROB — 初始 p_stay
- 默认值:
0.98 - 含义: 初始状态自转移概率(Dirichlet 先验均值),即 TPM 对角线元素
- 物理含义: 每个模型倾向于"留在原地",p_stay=0.98 意味着平均 50 步才切换一次模型
六、体制检测参数
15. IMM_HIGH_Q_THRESHOLD — 高Q模型判定阈值
- 默认值:
1e-3 - 含义: Q_β ≥ 此值的模型被视为"高Q模型"(模型3和4)
- 用途:
regime_score = Σ_{j: Q_β^(j) ≥ 1e-3} μ_j
16. IMM_REGIME_GATE_THRESHOLD — Gate3 体制拦截阈值
- 默认值:
0.7 - 含义: regime_score 超过此值时硬拦截开仓(Gate3)
- 体制区间:
- < 0.3: β 稳定,正常入场
- [0.3, 0.7): β 开始变化,阈值线性缩放
- ≥ 0.7: β 剧烈变化,禁止开仓
七、在线学习参数
17. IMM_MU_FLOOR — 模型概率下限
- 默认值:
1e-6 - 含义: 后验概率 μ_j 的最低值,防止任何模型被完全"杀死"
- 作用: 确保即使某个模型当前不活跃,仍保留微弱概率可以"复活"
18. IMM_OBS_GAMMA — 可观测性权重衰减
- 默认值:
0.05 - 含义: BTC 方差 EMA 的衰减系数
- 公式:
btc_var_ema = (1−γ_obs) × btc_var_ema + γ_obs × r_btc² - 作用:
obs_weight = min(r_btc² / btc_var_ema, 1.0)- r_btc ≈ 0 时 obs_weight → 0,模型概率几乎不更新,消除 BTC 横盘时的边界跳变
19. IMM_XBAR_GAMMA — x̄ 长期均值漂移学习率
- 默认值:
0.005 - 含义: OU 过程的长期均值 x̄ = [ᾱ, β̄] 的在线漂移速率
- 有效窗口:
1/0.005 = 200 步≈ 33 天(4h bar) - 约束:
γ_bar ≪ 1/(-ln(Φ_β_grid[2])),确保 x̄ 迁移远慢于 β 追踪速度
八、运行控制参数
20. IMM_KALMAN_WARMUP — 热身步数
- 默认值:
20 - 含义:
n_updates < 20时 Z-score 仍用 OLS β 而非 Kalman β - 原因: Kalman 初始阶段 P_β 大、估计不稳定,OLS 更可靠
- 数据库恢复: 重启时 kalman_state 的 n_updates ≥ 20 才从 DB 恢复,否则重新冷启动
21. IMM_INTRABAR_INTERVAL — bar 内降频间隔
- 默认值:
3600秒(1 小时) - 含义: 在 4h bar 内,每隔 1 小时才执行一次 Kalman 更新
- v5.1 修复的问题:
- v5.0 每次 WS tick 都更新 → 每根 4h bar 约 14000 次近似重复观测
- 导致 P_β 虚假坍缩 + Epps 效应使 β 向 0 偏移 + x̄ 正反馈漂移
- 设计: 1 小时间隔与 Φ 网格设计匹配,使用增量收益率(非累计)确保观测独立性
参数间的约束关系总结
| 约束 | 公式 | 目的 |
|---|---|---|
| α噪声 vs β噪声 | q_α = Q_β_grid[2] / 10 |
α 比 β 变化慢一个量级 |
| Q_β 与 Φ_β 配对 | 低Q ↔ 强回归,高Q ↔ 弱回归 | 确保 P∞ 跨数量级的区分度 |
| x̄ 漂移 vs β 追踪 | γ_bar ≪ 1/(-ln(Φ_β_grid[2])) |
长期均值远慢于状态追踪 |
| TPM 窗口 vs x̄ 窗口 | 两者都 ≈ 33 天 | 体制切换与均值漂移同步 |
| 降频间隔 vs bar 长度 | 3600s / 14400s(4h) = 25% | 每根 bar 最多更新 4 次,避免过度更新 |
参数配置速查表
# src/config.py
IMM_Q_BETA_GRID = [1e-6, 1e-5, 1e-4, 1e-3, 1e-2] # β 过程噪声网格 (M=5)
IMM_PHI_BETA_GRID = [0.95, 0.97, 0.98, 0.99, 0.995] # β OU 回归强度网格
IMM_Q_ALPHA = 1e-5 # α 过程噪声(共享)
IMM_PHI_ALPHA = 0.995 # α OU 回归系数(共享)
IMM_P0_ALPHA = 0.1 # α 初始不确定性
IMM_P0_BETA = 0.1 # β 初始不确定性
IMM_R_FLOOR = 1e-6 # 观测噪声下限
IMM_SAGE_HUSA_B = 0.97 # Sage-Husa 遗忘基数
IMM_CLIP_SIGMA = 3.0 # Huber 截断倍数
IMM_STUDENT_T_NU = 5.0 # Student-t 初始自由度(MLE 覆盖)
IMM_NU_GAMMA = 0.01 # ν 在线学习率
IMM_TPM_LAMBDA = 0.995 # Dirichlet TPM 遗忘因子
IMM_TPM_KAPPA = 20.0 # Dirichlet 初始浓度
IMM_TRANSITION_PROB = 0.98 # 初始 p_stay
IMM_HIGH_Q_THRESHOLD = 1e-3 # 高Q模型判定阈值
IMM_MU_FLOOR = 1e-6 # 模型概率下限
IMM_OBS_GAMMA = 0.05 # 可观测性权重衰减
IMM_XBAR_GAMMA = 0.005 # x̄ 长期均值漂移学习率
IMM_KALMAN_WARMUP = 20 # 热身步数
IMM_REGIME_GATE_THRESHOLD = 0.7 # Gate3 体制拦截阈值
IMM_INTRABAR_INTERVAL = 3600 # bar 内降频间隔(秒)