A股市场状态识别:HMM隐马尔可夫模型 + Optuna超参优化的量化实战

A股市场状态识别:HMM隐马尔可夫模型 + Optuna超参优化的量化实战

作者:mokamo | 更新日期:2026-05-16
工具链:Python + HMM + Optuna + Walk-Forward Validation + Tushare
代码库:smart-trading-system
代码路径:src/models/stock_hmm_trainer.pysrc/models/unified_regime_hmm.py


一、背景:为什么需要隐状态识别?

1.1 A股的残酷现实

A股市场的结构特征决定了趋势策略的天然困境:

  • 高波动性:上证指数年化波动率长期在20%~30%区间,远高于成熟市场(标普500约15%)
  • 牛熊快速切换:2015年、2018年、2022年均出现短时间内从牛市到熊市的剧烈转换,往往在数周内完成
  • 震荡市占据大半时间:根据历史数据估算,A股市场有超过60%的时间处于区间震荡格局,趋势策略在这些阶段频繁产生"双亏"——既亏手续费,又亏假信号
  • 政策市特征:A股受政策影响极大,模型容易在政策拐点处产生滞后判断

1.2 传统技术指标的困境

传统技术指标(均线、RSI、MACD)的共同问题是:阈值主观、市场适应性差

以RSI为例:

  • 超买/超卖阈值固定:传统设置是RSI>70超买、RSI<30超卖。但牛市里RSI长期在6080徘徊,熊市里RSI长期在2040徘徊——固定阈值根本无法适应
  • 参数孤岛问题:RSI(14)有效吗?RSI(6)更敏感,RSI(28)更平滑——哪个更好?没有理论答案
  • 时滞性:移动平均线天然滞后,MACD是双均线差分,滞后更严重

我们需要一个更底层的模型来回答一个本质问题:

“当前市场处于什么状态?”

这个问题比"明天涨还是跌"更基础,也更容易被建模。

1.3 HMM的核心思想

HMM(隐马尔可夫模型,Hidden Markov Model)的核心思想恰好与此吻合——市场状态是"隐藏"的,我们只能通过可观测的价格数据来推断当前最可能处于哪种状态

举一个直观的例子:

你看不到房间里的天气(隐藏状态),但你能看到窗外行人的行为(观测):
- 行人带伞 → 推断:外面在下雨
- 行人戴墨镜打伞 → 推断:外面出太阳但可能有阵雨
- 行人都待在室内 → 推断:外面可能是暴风雨

同样,股价数据就是"行人行为",市场状态(牛市/熊市/震荡)就是"天气"。

在HMM框架下:

  • 隐藏状态:BULL(上涨)、SIDEWAYS(震荡)、BEAR(下跌)
  • 观测变量:收益率、波动率、成交量等金融特征
  • 模型参数:状态转移矩阵、每个状态的均值/协方差矩阵

二、方法论:GaussianHMM 三状态模型

2.1 模型数学形式

选用 GaussianHMM(高斯隐马尔可夫模型),这是HMM家族中最适合金融数据的变体。每个隐藏状态对应一个多维高斯分布:

模型参数:

  • 初始状态概率 π=[π1,π2,π3]\pi = [\pi_1, \pi_2, \pi_3]π=[π1,π2,π3]P(S1=s)P(S_1 = s)P(S1=s)
  • 状态转移矩阵 A=[aij]A = [a_{ij}]A=[aij]aij=P(St=j∣St−1=i)a_{ij} = P(S_t = j | S_{t-1} = i)aij=P(St=jSt1=i)
  • 发射概率 B={ bj(x)}B = \{b_j(x)\}B={ bj(x)}:在状态 jjj 下观测到 xxx 的概率密度

bj(x)=N(x;μj,Σj)=1(2π)d∣Σj∣exp⁡(−12(x−μj)TΣj−1(x−μj))b_j(x) = \mathcal{N}(x; \mu_j, \Sigma_j) = \frac{1}{\sqrt{(2\pi)^d |\Sigma_j|}} \exp\left(-\frac{1}{2}(x - \mu_j)^T \Sigma_j^{-1} (x - \mu_j)\right)bj(x)=N(x;μj,Σj)=(2π)dΣj 1exp(21(xμj)TΣj1(xμj))

状态数固定为3,对应市场三种典型形态:

状态 标签 典型特征
状态0 BULL 收益率均值为正、波动率适中、动量向上
状态1 SIDEWAYS 收益率均值接近零、波动率较低、无明显方向
状态2 BEAR 收益率均值为负、波动率高、动量向下

2.2 为什么选3个状态?

这是经过实践验证的折中:

  • 2个状态太少:只有"涨/跌"两种,无法描述"震荡"这个在实际交易中最重要也最难处理的状态
  • 4个状态太多:参数空间急剧膨胀(4个转移概率+4个均值向量+4个协方差矩阵),在小样本下极易过拟合
  • 3个状态正好:BULL/SIDEWAYS/BEAR 覆盖了市场的主要矛盾,参数数量适中(3+9+6=18个独立参数),在有足够训练数据时能够稳定估计

2.3 输入特征工程

模型的效果高度依赖输入特征的质量。从原始日线数据中提取11种候选特征,组成7个特征集(C1~C7),由Optuna自动选择最优组合。

特征详解:

# ── 特征定义(代码来源:stock_hmm_trainer.py 第125-137行)──
_FEATURE_MAP = {
   
   
    "log_return":       ("pct_chg",          True),   # 对数收益率,动态Z-score标准化
    "realized_vol":     ("volatility_20d",    False),  # 已实现波动率,直接使用
    "trend_strength":   ("price_position_20d", False), # 均线位置(close/MA20),直接使用
    "volume_ratio":     ("volume_ratio",      False),  # 量比(当日成交量/20日均量)
    "macd_momentum":    ("macd_hist",         False),  # MACD柱子值(DIFF-DEA)
    "boll_position":
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MUKAMO

你的鼓励是我们创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值