第三节:宏观因子体系——构建基于PMI、CPI、PPI、社融、利率的宏观状态识别器
做行业轮动,说白了就是跟宏观环境「跳舞」。
你想想看,经济好的时候,周期股涨;经济差的时候,防御板块扛。这个道理谁都懂,但难就难在——你怎么知道现在是什么「状态」?
我个人的习惯是,不靠单一指标拍脑袋。而是用一套宏观因子体系,把PMI、CPI、PPI、社融、利率这几个核心变量揉在一起,构建一个「宏观状态识别器」。今天我就把这套框架拆开讲给你听。
3.1 为什么是这五个指标?
市场上宏观指标少说几十个,但我只盯这五个。为什么?
- PMI(采购经理人指数):经济的「体温计」。50以上是扩张,50以下是收缩。我一般看制造业PMI,因为它对工业周期最敏感。
- CPI(居民消费价格指数):通胀的「风向标」。温和通胀(2%-3%)是好事,太高或太低都麻烦。
- PPI(工业生产者出厂价格指数):上游价格的「晴雨表」。PPI涨,说明上游赚钱;PPI跌,中下游成本压力缓解。
- 社融(社会融资规模):资金的「水龙头」。社融增速往上,说明信用扩张,企业愿意借钱搞生产。
- 利率(10年期国债收益率):资金的「价格」。利率低,流动性宽松;利率高,资金成本上升。
这五个指标,基本覆盖了「增长、通胀、信用、流动性」四个维度。嗯,够用了。
核心逻辑:宏观状态 = 增长(PMI) × 通胀(CPI/PPI) × 信用(社融) × 流动性(利率)
3.2 宏观状态识别器的设计思路
我不喜欢搞复杂的模型。我的做法很简单——把每个指标分成「高/低」或「扩张/收缩」两个状态,然后组合出8种宏观情景。
举个例子:
- PMI > 50 且 社融增速上升 → 经济扩张 + 信用宽松 → 利好周期股
- PMI < 50 且 利率下降 → 经济收缩 + 流动性宽松 → 利好成长股
- CPI > 3% 且 PPI > 0 → 通胀上行 → 利好资源品
你看,逻辑其实很直白。但关键是怎么把这些「定性判断」变成「定量信号」?
3.3 实战:用Python构建状态识别器
下面是我在实际项目中用过的代码框架。注意,这不是完整的回测代码,而是核心逻辑的演示。
import pandas as pd
import numpy as np
# 假设你已经有了这五个指标的月度数据
# 数据格式:日期、PMI、CPI、PPI、社融增速、10Y国债收益率
def macro_state_identifier(df):
"""
宏观状态识别器
输入:包含五个指标的DataFrame
输出:每个时间点的宏观状态标签
"""
# 1. 计算各指标的「状态」
df['PMI_state'] = np.where(df['PMI'] > 50, '扩张', '收缩')
df['CPI_state'] = np.where(df['CPI'] > 2.5, '高通胀', '低通胀')
df['PPI_state'] = np.where(df['PPI'] > 0, '上行', '下行')
df['社融_state'] = np.where(df['社融增速'] > df['社融增速'].rolling(12).mean(), '扩张', '收缩')
df['利率_state'] = np.where(df['10Y国债收益率'] > df['10Y国债收益率'].rolling(12).mean(), '高利率', '低利率')
# 2. 组合成宏观状态标签
df['宏观状态'] = (
df['PMI_state'] + '_' +
df['CPI_state'] + '_' +
df['社融_state'] + '_' +
df['利率_state']
)
return df
# 使用示例
# df_result = macro_state_identifier(your_data)
# print(df_result['宏观状态'].value_counts())
个人经验:我建议不要用绝对值做阈值,而是用滚动均值或历史分位数。因为不同时期的经济环境不一样,固定阈值容易失效。比如2015年的3%通胀和2020年的3%通胀,含义完全不同。
3.4 状态到行业的映射规则
有了宏观状态,下一步就是映射到行业配置。这是我总结的一张映射表:
| 宏观状态 | PMI | CPI | 社融 | 利率 | 推荐行业 |
|---|---|---|---|---|---|
| 复苏期 | 扩张 | 低通胀 | 扩张 | 低利率 | 金融、地产、可选消费 |
| 过热期 | 扩张 | 高通胀 | 扩张 | 高利率 | 资源品、能源、材料 |
| 滞胀期 | 收缩 | 高通胀 | 收缩 | 高利率 | 必选消费、医药、公用事业 |
| 衰退期 | 收缩 | 低通胀 | 收缩 | 低利率 | 成长、科技、债券 |
这张表看起来简单,但实际用起来有个坑——状态切换有滞后。我曾经在2021年三季度,PMI刚跌破50就切到防御板块,结果四季度周期股又涨了一波。后来我加了「确认信号」:连续两个月处于同一状态,才做切换。
避坑指南:我曾经犯过一个错误——用月度数据做日频交易。宏观数据一个月才更新一次,你用它做日频调仓,信号太稀疏了。我现在的做法是:宏观状态决定「方向」,技术指标决定「时机」。
3.5 可视化:宏观状态轮动图
下面这张SVG图,展示了我这套框架的核心逻辑。你可以把它当作「宏观状态识别器」的说明书。
这张图你看懂了吗?从左到右,五个指标输入,经过状态识别器处理,输出宏观状态标签,最后映射到行业配置。右侧的反馈箭头表示——这个框架不是一次性的,每个月数据更新后都要重新计算。
3.6 几个实战要点
- 数据频率要统一:PMI是月度,CPI/PPI是月度,社融是月度,利率是日度。我一般把利率也降频到月度,取月末值。
- 阈值要动态调整:固定阈值(比如PMI=50)在长期回测中会失效。我建议用滚动12个月的分位数,比如PMI高于过去12个月的70%分位才算「扩张」。
- 不要过度拟合:我见过有人把宏观状态分成16种、32种,结果回测漂亮,实盘一塌糊涂。记住,状态越少,信号越稳健。
- 注意领先滞后关系:社融领先PMI大约3-6个月,利率领先经济周期大约6-9个月。你可以利用这个做「前瞻性配置」。
我的核心建议:这套宏观因子体系,不是用来预测未来的,而是用来「确认当下」的。你不需要猜下个月PMI是多少,你只需要知道「现在处于什么状态」,然后做对应的行业配置。就这么简单。
好了,宏观状态识别器就讲到这里。记住,工具是死的,人是活的。多复盘、多调整,这套框架才能真正变成你的「赚钱利器」。