IMM Kalman β vs OLS β:Z-score 与 AZ 差异分析
IMM Kalman β vs OLS β:Z-score 与 AZ 差异分析
版本:IMM Kalman v5.0(M=5 并行滤波器,Blom & Bar-Shalom 1988)
生效日期:2026-03-16
对应代码:src/utils/analysis/analysis_core.py,src/trading/strategy.py
背景
升级前,价差(spread)使用 OLS 滚动回归估计 β:
spread_ols = log_alt - β_ols × log_base
β_ols = OLS 回归,100 根 4h K 线等权窗口(≈ 17 天)
升级后(热身完成,n_updates ≥ 20),切换为 IMM Kalman 后验 β:
spread_kalman = log_alt - β_kalman × log_base
β_kalman = IMM 混合后验估计,递归更新,每 4h 一步
Z-score 和 AZ 均基于 spread 计算:
Z-score = (current_spread - spread_mean) / spread_std # zscore_window=30
AZ = (z4h - ema_z4h) / effective_std # 策略层二次标准化
因此 β 的差异直接传导至 Z-score,再间接影响 AZ。
响应速度对比
| 指标 | OLS β | Kalman β(高 Q 模型) |
|---|---|---|
| 更新频率 | 每 4h 一次 | 每 4h 一次(相同) |
| β 反映一半偏移所需时间 | ~50 根 K 线 ≈ 8 天 | ~5 根 K 线 ≈ 20 小时 |
| β 90% 反映偏移所需时间 | ~90 根 K 线 ≈ 15 天 | ~10 根 K 线 ≈ 40 小时 |
| 响应速度提升 | — | 约 5-10 倍 |
分场景差异分析
场景一:β 稳定期(大多数时候)
两者差异极小。Kalman 收敛后与 OLS β 偏差通常在 ±0.05 以内,Z-score 和 AZ 几乎一致,信号行为无实质变化。
场景二:β 缓慢漂移期(最常见的有意义差异)
OLS β 滞后 8-15 天,spread 均值产生系统性偏移:
OLS spread(滞后)= log_alt - β_ols_旧 × log_base
→ 价差非零漂移 → Z-score 持续偏向某一侧 → 虚假信号增多
Kalman spread(近实时)= log_alt - β_kalman_新 × log_base
→ 价差更接近真实均衡 → Z-score 更居中,幅度更小
实际影响
- Kalman Z-score 在幅度上更保守
- OLS 因 β 滞后可能产生持续偏向的虚假开仓信号
- Kalman 能有效抑制此类噪声
场景三:β 突变期(体制切换)
| 维度 | OLS | Kalman + Gate3 |
|---|---|---|
| β 突变后 1-5 根 K 线 | spread 剧烈偏移,Z-score 冲至极端 | 高 Q 模型接管,β 快速追踪,Z-score 幅度受控 |
| 开仓保护 | 无 | regime_score > 0.7 → Gate3 拦截 |
| 信号性质 | 极可能为虚假信号 | 被过滤 |
Gate3 在 analyze_multi_period 中实现,拦截后返回 failure_reason='gate3',同时保存最新 Kalman state 供下次继续更新。
场景四:β 大幅偏离(最需关注)
当真实 β 与 OLS β 偏差较大时,Z-score 符号可能相反:
示例:真实 β = 1.5,OLS β(滞后)= 1.0
OLS spread = log_alt - 1.0 × log_base → alt 偏贵,Z > 0 → 做空 alt
Kalman spread = log_alt - 1.5 × log_base → alt 偏便宜,Z < 0 → 做多 alt
两个方向完全相反。这是本次升级最关键的改变:方向判断更准确。
代价:过渡期(Kalman 热身的前 20 步)β 估计不稳定时,信号方向可能短暂抖动。
场景五:AZ 的过渡期问题
AZ 的 ema 和 std 是对历史 z4h 序列的累积统计(std_window,通常 30-50 步)。
- 热身前(< 20 步):历史 z4h 由 OLS β 计算,混入 AZ 的缓冲区
- 热身后:z4h 切换为 Kalman β 计算
切换后,AZ 的 ema/std 完全过渡到 Kalman β 体系约需 30-50 根 K 线(5-8 天)。
过渡期内 AZ 阈值判断可能偏松或偏紧,但影响是渐进的,不会突变。
差异总览
| 场景 | Z-score 变化 | AZ 变化 | 信号影响 |
|---|---|---|---|
| β 稳定 | 几乎无差异 | 几乎无差异 | 无 |
| β 缓慢漂移 | 幅度偏小、更居中 | 更稳定 | 减少虚假信号 |
| β 突变 | 被 Gate3 过滤 | 被 Gate3 过滤 | 过滤假信号 |
| β 大幅偏离 | 符号可能翻转 | 跟随翻转 | 方向更准,过渡期需监控 |
| AZ 过渡期 | 无 | 基准混合,渐进偏移 | 5-8 天内恢复 |
监控建议
升级上线后,建议在前 30-50 根 4h K 线(5-8 天) 内重点关注以下日志:
# 每步 Kalman β vs OLS β 偏差
[IMM] PURR/.../HYPE/... # 42 | β=0.6523(K) +0.0042vsOLS | ...
# 体制穿越(Gate3 触发前的预警)
[IMM] ...-体制↑ # 104 | regime_score 0.283→0.731 穿越阈值0.7 ...
# ν 适应(尾部分布变化)
[IMM] ...-ν适应 # 103 | ν: 8.30→7.65 ↓厚尾 ...
如果 β(K) vsOLS 偏差持续 > 0.1 或频繁出现体制穿越,说明两个算法对当前配对的 β 认知差异较大,需结合实际 PnL 判断哪个更准确。
相关配置
| 参数 | 默认值 | 说明 |
|---|---|---|
IMM_KALMAN_WARMUP |
20 | 热身步数,未达到时 Z-score 仍用 OLS β |
IMM_REGIME_GATE_THRESHOLD |
0.7 | Gate3 触发阈值 |
BETA_WINDOW |
100 | OLS β 滚动窗口(K 线数) |
ZSCORE_WINDOW |
30 | Z-score 统计窗口(K 线数) |
HEDGE_BETA_MIN |
0.1 | Kalman β 用于 hedge ratio 的下界 |
HEDGE_BETA_MAX |
5.0 | Kalman β 用于 hedge ratio 的上界 |