HMM 市场状态色带:图表上的空头、震荡与多头状态
HMM 状态叠加层在已加载 K 线上拟合一个高斯隐马尔可夫模型,为每根 K 线绘制一条颜色色带:最可能的状态(空头、震荡、多头)以及模型的置信度。它可以观测价格收益率,也可以观测该 K 线的订单流 delta。
Senzoukria · 文档 · 更新于 2026 年 9 月
位置
- 位置
- 图表 → 指标面板 → 「量化模型」分组 → 「HMM Regime(量化)」
- 默认
- 关闭。3 个状态,观测价格收益率,拟合窗口 500 根 K 线,色带 6 px
- 所需数据
- 拟合窗口内至少 30 个可用观测;delta 模式会跳过成交量为零的 K 线
它做什么
隐马尔可夫模型假设市场在 K 个状态之间切换,每个状态按自己的高斯分布发出观测。Senzoukria 在当前已加载的 K 线上拟合这个模型(Baum-Welch),解码每根 K 线最可能的状态(Viterbi),并在每根 K 线列的顶部按该状态的颜色画一条细色带。色带的强度承载后验概率,也就是模型对这根 K 线有多确定。
状态始终按均值排序,因此状态 0 最偏空、最后一个状态最偏多。3 个状态时标签为空头、震荡和多头;2 个状态时为空头和多头;4 个状态时为强空、空头、多头和强多。
拟合是确定性的:均值由样本自身的分位数播种,没有随机初始化,而且模型只在 K 线收盘时重新拟合。两次收盘之间,已拟合的模型被冻结,实时 K 线用前向滤波解码,因此 K 线成形过程中色带不会闪烁。
参数设置
| 设置 | 默认 | 改变什么 |
|---|---|---|
| 状态数 | 3 — 空头 / 震荡 / 多头 | 隐状态数量:2(空头 / 多头)、3,或 4(强空 → 强多) |
| 观测对象 | 价格收益率 | 观测序列:以基点表示的对数收益率,或订单流 delta(K 线 delta / K 线成交量,取值在 [−1, 1]) |
| 拟合窗口 | 500 根 K 线(60–2000,步长 20) | 只用最后 N 根 K 线做拟合;代码把下限设为 50 |
| 色带高度 | 6 px(2–24) | 画在每根 K 线上方的状态色带高度 |
| 为整列着色 | 关闭 | 不只画色带,而是用状态颜色给整根 K 线列着色 |
| 空头 / 震荡 / 多头 | #ef4444 / #6b7280 / #22c55e | 排序后各状态的颜色;4 个状态时两端复用空头和多头的颜色 |
怎么用
用「价格收益率」回答那个经典问题 —— 上涨趋势、下跌趋势,还是来回震荡 —— 而用「订单流 delta」去分类主动成交而不是价格:两根 K 线可以打印出相同的收益率却有相反的资金流,只有 delta 这个数据源能把它们分开。
让拟合窗口贴近你交易的时间尺度。在三个月的 1 分钟 K 线上拟合出的状态,会被一段并不属于你当下市场的历史主导;500 根 K 线这个默认值是在稳定性和反应速度之间的折中。如果色带消失了,说明窗口内没有 30 个可用观测(例如一段没有波动的序列)。
限制与易错点
- 模型只读已加载的 K 线;只加载了一部分的时段会得到一个不完整的拟合。
- 后验置信度是模型对自身的确定程度,不是价格会移动的概率。
- 色带是对过去和当前这根 K 线的分类,不是预测;不承诺任何结果。
相关页面
其他语言版本
常见问题
- 为什么状态颜色在多次重绘之间从不互换?
- 每次拟合之后,状态都会按均值升序重新标号,因此索引 0 始终是最偏空的状态。没有这一步,EM 会任意编号,于是「状态 2」在一次重绘中意味着多头、在下一次却意味着空头。
- HMM 每个 tick 都重新拟合吗?
- 不会。模型在 K 线收盘时重新拟合。实时 K 线成形期间,被冻结的模型用一步前向滤波解码新的观测,开销很小,也让色带保持稳定。
- HMM 色带和 Hurst MR 有什么区别?
- HMM 按收益率或 delta 的分布对状态进行分类。Hurst MR 用重标极差指数衡量长记忆性,并发出均值回归信号。它们是同一个「量化模型」分组下两个独立的叠加层。