市场风险识别:系统性风险与因子暴露分析
做量化策略这么多年,我越来越觉得市场风险识别是策略的「体检报告」。你想想看,策略赚不赚钱是一回事,但能不能扛住系统性冲击,那才是生死线。今天我们就聊聊怎么识别这些风险。
系统性风险的三大来源
系统性风险,说白了就是「你躲不开的风险」。它不是某只股票暴雷,而是整个市场都在跌。我个人习惯把系统性风险分成三类:利率、汇率、商品价格。
1. 利率风险
利率是资金的「价格」。央行一加息,债券价格就跌,股票估值也会被压缩。我在项目中遇到过这样的情况:2022年美联储连续加息,我们一个固收+策略的净值回撤超过5%。原因很简单——久期暴露太大了。
关键指标:久期(Duration)、凸性(Convexity)、利率期限结构斜率
怎么量化?我一般用DV01(基点价值)来衡量。举个例子:
# 计算组合的DV01
def calculate_dv01(portfolio, yield_shift=0.0001):
"""
计算组合的基点价值
yield_shift: 利率变动1bp
"""
base_value = portfolio.current_value()
shifted_value = portfolio.shift_yield(yield_shift)
dv01 = (shifted_value - base_value) / yield_shift
return dv01
2. 汇率风险
做跨境策略的朋友,这个必须盯紧。我记得有一次,我们做港股通策略,人民币突然升值2%,结果组合净值直接缩水。嗯,这里要注意:汇率风险不只是外汇交易员的事,任何涉及跨境资产的策略都有。
| 汇率场景 | 对策略的影响 | 应对方式 |
|---|---|---|
| 本币升值 | 外币资产缩水 | 远期锁汇 |
| 本币贬值 | 进口成本上升 | 期权对冲 |
| 波动率飙升 | 策略回撤加大 | 降低仓位 |
3. 商品价格风险
商品价格波动,影响的不仅是CTA策略。你想想看,原油涨了,航空股是不是要跌?铜价涨了,电力设备成本是不是要上升?这就是传导效应。
我的经验:商品价格风险往往被低估。建议至少跟踪原油、铜、黄金三个品种的波动率,它们能反映通胀预期和避险情绪。
因子暴露分析
因子暴露分析,说白了就是「你的策略到底在赚什么钱」。是赚了市场的贝塔,还是赚了选股的阿尔法?
我常用的因子暴露分析框架是这样的:
# 因子暴露分析示例
import pandas as pd
import statsmodels.api as sm
def factor_exposure_analysis(returns, factors):
"""
returns: 策略收益率序列
factors: 因子收益率矩阵(市场、规模、价值、动量等)
"""
X = sm.add_constant(factors)
model = sm.OLS(returns, X).fit()
# 输出因子暴露系数
exposures = model.params
t_values = model.tvalues
return exposures, t_values
为什么要做这个?我曾经遇到一个策略,回测年化收益20%,结果一分析,90%的收益来自小市值因子暴露。后来小市值因子反转,策略直接崩了。所以,因子暴露分析能帮你识别「伪阿尔法」。
宏观情景分类
宏观情景分类,是我个人觉得最有意思的部分。你不能等风暴来了才想对策,得提前想好各种场景。
我一般把宏观情景分成四类:
- 繁荣期:经济增长、通胀温和、利率稳定。适合做多权益、信用债。
- 衰退期:经济下滑、通缩风险。适合做多国债、避险资产。
- 滞胀期:经济停滞、通胀高企。最难受的阶段,股债双杀。
- 复苏期:经济触底反弹、政策宽松。适合做多周期股、商品。
避坑指南:我曾经犯过一个错误——把情景分类做得太细,搞了十几个场景。结果每个场景的概率都很低,根本没法用。后来我学乖了,就保留4-5个核心场景,每个场景的概率不低于10%。
怎么把情景分类落地?我建议用Markov状态转换模型:
# 宏观情景分类的Markov模型
import numpy as np
from hmmlearn import hmm
def regime_classification(data, n_regimes=4):
"""
data: 宏观指标矩阵(GDP、CPI、利率等)
n_regimes: 情景数量
"""
model = hmm.GaussianHMM(n_components=n_regimes,
covariance_type="full")
model.fit(data)
# 预测当前所处情景
current_regime = model.predict(data[-1:])
# 状态转移概率矩阵
transition_matrix = model.transmat_
return current_regime, transition_matrix
下面这张图,是我自己总结的市场风险识别框架,你可以参考:
最后说一句:市场风险识别不是一次性工作。我每周都会跑一遍这个框架,看看因子暴露有没有漂移,宏观情景有没有切换。你想想看,市场在变,你的风险暴露也在变,不盯紧怎么行?
核心要点总结:
- 系统性风险三大来源:利率、汇率、商品价格
- 因子暴露分析帮你识别「真阿尔法」还是「伪阿尔法」
- 宏观情景分类保持4-5个核心场景即可,别贪多
- 定期复盘,动态调整
公众号:蓝海资料掘金营,微信deep3321