第十五章:状态转换模型——马尔可夫转换模型识别宏观状态
各位同学,咱们今天聊点硬核的。宏观状态这东西,说白了就是市场情绪的晴雨表。牛市、熊市、震荡市,这些词大家天天挂在嘴边,但怎么量化?怎么让机器自动识别?
我个人习惯用马尔可夫转换模型(Markov Switching Model)来解决这个问题。这玩意儿不是新东西,但用在波动率曲面上,效果出奇的好。
15.1 为什么需要状态转换模型?
先问个问题:你见过哪个市场永远一个样?没有吧。波动率曲面也是,牛市里微笑曲线平缓,熊市里陡峭得像悬崖。如果用单一模型去拟合,结果就是两头不讨好。
我在2018年做美股波动率交易时,就吃过这个亏。当时用GARCH模型预测波动率,结果2018年2月的“波动率末日”直接把我模型打爆了。后来我才意识到——市场状态变了,模型却没跟着变。
马尔可夫转换模型的核心思想很简单:市场有N种隐藏状态,每种状态下,数据的生成过程不同。模型会自动判断当前最可能处于哪个状态,并给出状态切换的概率。
核心公式:
P(S_t = j | S_{t-1} = i) = p_{ij}
其中S_t是t时刻的状态,p_{ij}是从状态i转移到状态j的概率。
15.2 模型结构:两状态马尔可夫转换
我一般用两状态模型,够用且稳定。状态1:低波动环境(牛市/震荡市);状态2:高波动环境(熊市/危机)。
每个状态下,波动率曲面的参数服从不同的分布。比如:
- 状态1(低波): 隐含波动率均值15%,偏度小,峰度低
- 状态2(高波): 隐含波动率均值30%,偏度大,峰度高
你想想看,如果模型告诉你当前有80%概率处于状态2,你还敢卖深度虚值期权吗?不敢了吧。
15.3 实战:用Python实现马尔可夫转换模型
下面这段代码,是我在实盘项目中用过的简化版。注意,这里用的是statsmodels库,它内置了马尔可夫转换模型。
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.regime_switching.markov_regression import MarkovRegression
# 假设我们有VIX指数日度数据
# 以及波动率曲面参数:ATM波动率、偏度、峰度
data = pd.read_csv('vol_surface_params.csv', index_col=0, parse_dates=True)
# 构建模型:两状态,因变量为ATM波动率
model = MarkovRegression(
data['atm_vol'],
k_regimes=2, # 两个状态
trend='c', # 包含常数项
switching_variance=True # 允许方差在不同状态下不同
)
# 拟合模型
results = model.fit()
# 查看状态概率
smoothed_probs = results.smoothed_marginal_probabilities
print(smoothed_probs.tail())
我的经验: 拟合时如果报收敛错误,试试把search_reps参数调大,或者先标准化数据。我曾经因为数据量纲问题,卡了整整一个下午。
15.4 不同状态下的曲面特征
模型跑出来后,咱们得看看每个状态下的曲面长什么样。这才是重点。
| 特征 | 状态1(低波) | 状态2(高波) |
|---|---|---|
| ATM波动率均值 | 12-18% | 25-40% |
| 偏度(Skew) | 轻微负偏 | 深度负偏 |
| 峰度(Kurtosis) | 3-4 | 5-8 |
| 曲面陡峭度 | 平缓 | 陡峭 |
| 期限结构 | 正常向上 | 倒挂或平坦 |
嗯,这里要注意:状态2的深度负偏意味着什么?意味着市场极度恐惧,虚值看跌期权贵得离谱。这时候做卖方要格外小心。
15.5 状态转换与宏观数据的联动
光看曲面还不够,得跟宏观数据对上。我一般会把状态概率跟以下指标做对比:
- VIX指数: 状态2概率 > 70%时,VIX通常 > 25
- 信用利差: 高收益债利差扩大时,状态2概率飙升
- PMI数据: 低于50时,状态1概率下降
举个例子,2020年3月,模型在3月9日就给出了状态2概率98%的信号,比VIX冲到80还早了三天。这就是提前量。
避坑指南: 我曾经犯过一个错误——直接用状态概率做交易信号。结果发现,状态切换有滞后性,等模型确认了,行情已经走了一半。正确做法是:用状态概率作为权重,动态调整期权组合的Delta和Vega暴露。
15.6 知识体系总览
下面这张图,是我自己总结的马尔可夫转换模型在波动率曲面上的应用框架。你看一眼,心里就有数了。
15.7 模型评估与调参
模型跑完了,怎么知道好不好?我一般看三个指标:
- 状态区分度: 两个状态的参数估计值差异是否显著?比如状态1的波动率均值15%,状态2的30%,差异够大才算好。
- 状态持续性: 转移矩阵的对角线元素应该接近1(比如0.95以上),说明状态不会频繁切换,符合直觉。
- 经济意义: 状态切换的时间点是否跟重大宏观事件吻合?比如2020年3月、2008年9月。
小技巧: 如果模型给出的状态概率一直在0.4-0.6之间摇摆,说明两个状态区分度不够。这时候可以试试增加状态数,或者换一组输入变量。我一般会加入偏度和峰度作为额外解释变量。
好了,这一章的内容就到这儿。马尔可夫转换模型不是万能药,但用好了,确实能帮你提前感知市场情绪的变化。下一章咱们聊聊怎么把这些状态概率用到实盘交易中。
公众号:蓝海数据掘金营,微信deep3321