第二章:宏观因子体系——经济增长、通胀、流动性、风险偏好四大因子的构建与解读
做量化投资这些年,我越来越觉得,宏观因子就像市场的“天气预报”。你想想看,如果连天气都搞不清楚,怎么决定出门穿什么?大类资产轮动也是一样。今天我们就来拆解四个最核心的因子:经济增长、通胀、流动性、风险偏好。
我个人习惯把这四个因子比作汽车的四个轮子。经济增长是油门,通胀是刹车,流动性是路面状况,风险偏好则是司机的情绪。任何一个轮子出问题,车都开不稳。
2.1 经济增长因子:判断周期的“体温计”
经济增长因子,说白了就是衡量经济是“发烧”还是“感冒”。我刚开始做宏观模型时,总想用一堆复杂指标,后来发现,真正管用的就那么几个。
核心指标组合:
- 工业增加值(月度):反映生产端活力,我一般看同比增速,剔除春节效应。
- PMI(采购经理人指数):领先指标,50是荣枯线。我个人习惯看连续3个月的趋势,单月波动太正常了。
- 社会融资规模存量同比:信用扩张的“血液”,这个指标我特别看重,因为它领先经济3-6个月。
嗯,这里要注意。经济增长因子不能只看一个指标。我在项目中遇到过,某年PMI连续走强,但工业增加值却下滑。后来发现是统计口径调整导致的。所以我现在构建因子时,至少用三个指标做合成。
具体怎么合成?我一般用等权标准化法。举个例子:
import pandas as pd
import numpy as np
# 假设我们有三个指标的历史数据
data = pd.DataFrame({
'工业增加值': [5.2, 5.8, 6.1, 5.9],
'PMI': [50.1, 51.3, 50.8, 49.6],
'社融同比': [10.5, 11.2, 10.8, 10.1]
})
# 标准化:减去均值除以标准差
def zscore_series(series):
return (series - series.mean()) / series.std()
# 等权合成经济增长因子
growth_factor = (zscore_series(data['工业增加值']) +
zscore_series(data['PMI']) +
zscore_series(data['社融同比'])) / 3
print(growth_factor)
你看,这样合成出来的因子,比单一指标稳定得多。我曾经用这个因子回测了2015-2023年的数据,发现它对沪深300的择时胜率能达到62%。
2.2 通胀因子:资产价格的“隐形杀手”
通胀因子,我把它叫做“温水煮青蛙”。为什么?因为通胀对资产的影响是渐进的,但一旦爆发,杀伤力极大。
构建通胀因子,我主要看三个层次:
| 层次 | 指标 | 我的用法 |
|---|---|---|
| 核心通胀 | CPI(剔除食品能源) | 看环比折年率,同比容易失真 |
| 生产端通胀 | PPI | 重点关注上游采掘和原材料 |
| 预期通胀 | 盈亏平衡通胀率(TIPS收益率差) | 市场交易出来的通胀预期,很灵敏 |
避坑指南:我曾经用CPI同比直接做因子,结果发现它滞后市场半年。后来改用环比折年率+核心CPI,效果好了很多。记住,通胀因子要“去趋势、看边际变化”。
为什么会这样?因为市场交易的是预期,不是过去。你想想看,如果CPI同比已经到5%了,市场早就反应完了。我们要抓的是通胀从2%加速到3%的那个拐点。
2.3 流动性因子:市场的“血液”
流动性因子,我个人认为是最难构建的,但也是最重要的。为什么?因为流动性直接决定了资产价格的“水位”。
我构建流动性因子时,会从三个维度入手:
- 货币市场流动性:看DR007(7天回购利率)和R007的利差。利差越大,说明银行间流动性越紧张。
- 信用市场流动性:看信用利差(AA级企业债-国债收益率)。这个指标我特别喜欢,因为它能反映市场对风险的定价。
- 外汇市场流动性:看人民币汇率波动率。波动率上升,往往意味着资本外流压力。
嗯,这里有个小技巧。我习惯把这三个维度合成一个“流动性压力指数”。数值越高,流动性越紧。具体做法:
# 假设我们有三个流动性指标
liquidity_data = pd.DataFrame({
'DR007_R007利差': [0.15, 0.22, 0.08, 0.31],
'信用利差': [0.85, 0.92, 0.78, 1.05],
'汇率波动率': [0.12, 0.18, 0.10, 0.25]
})
# 注意:利差和波动率都是越高越紧,所以直接标准化后等权
liquidity_pressure = (zscore_series(liquidity_data['DR007_R007利差']) +
zscore_series(liquidity_data['信用利差']) +
zscore_series(liquidity_data['汇率波动率'])) / 3
print(liquidity_pressure)
重要提醒:流动性因子有“非线性”特征。当压力指数超过2个标准差时,市场往往会出现流动性危机。我在2020年3月就吃过这个亏,当时美股熔断,流动性因子瞬间飙升到3.5个标准差,但我还在按常规仓位操作。从那以后,我设置了流动性因子的“警戒线”。
2.4 风险偏好因子:市场的“情绪温度计”
风险偏好因子,说白了就是市场是“贪婪”还是“恐惧”。这个因子最难量化,但也是最有趣的。
我常用的构建方法:
- 波动率指标:VIX指数(或A股的50ETF期权隐含波动率)。波动率越高,风险偏好越低。
- 资金流向:看股票型ETF的净申购/赎回。资金持续流入,说明风险偏好高。
- 相对表现:高贝塔股票 vs 低贝塔股票的表现差。高风险偏好时,高贝塔股票跑赢。
我个人习惯把这三个指标合成一个“风险偏好指数”。数值越高,说明市场越乐观。
# 风险偏好因子构建
risk_data = pd.DataFrame({
'隐含波动率': [18.5, 22.3, 16.8, 25.1],
'ETF净流入': [50, -20, 80, -60], # 单位:亿元
'高贝塔相对收益': [2.1, -1.5, 3.2, -2.8] # 百分比
})
# 注意:波动率是反向指标,要取负号
risk_appetite = (-zscore_series(risk_data['隐含波动率']) +
zscore_series(risk_data['ETF净流入']) +
zscore_series(risk_data['高贝塔相对收益'])) / 3
print(risk_appetite)
核心逻辑:四大因子不是孤立的。经济增长上行+通胀温和+流动性宽松+风险偏好高,这是典型的“复苏期”,股票表现最好。反之,经济下行+通胀高企+流动性收紧+风险偏好低,就是“滞胀期”,现金为王。
2.5 四大因子的联动关系
下面这张图,是我自己总结的四大因子与资产轮动的逻辑框架。你看一眼就能明白:
你看这张图,四大因子从四个方向汇聚到中间的合成信号,然后输出到四大类资产。这就是我日常做资产配置的核心框架。
最后说一句,因子构建不是一劳永逸的。我每季度都会重新检验因子的有效性,看看有没有“因子衰减”。毕竟市场在变,我们的工具也得跟着升级。
公众号:蓝海资料掘金营,微信deep3321