第三节:宏观因子体系——构建基于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图,展示了我这套框架的核心逻辑。你可以把它当作「宏观状态识别器」的说明书。

宏观状态识别器框架 PMI CPI PPI 社融 利率 状态识别器 阈值判断 + 滚动均值 + 组合规则 宏观状态标签 复苏 / 过热 / 滞胀 / 衰退 行业配置映射 金融地产 / 资源品 / 消费医药 / 成长科技 滚动更新

这张图你看懂了吗?从左到右,五个指标输入,经过状态识别器处理,输出宏观状态标签,最后映射到行业配置。右侧的反馈箭头表示——这个框架不是一次性的,每个月数据更新后都要重新计算。

3.6 几个实战要点

  1. 数据频率要统一:PMI是月度,CPI/PPI是月度,社融是月度,利率是日度。我一般把利率也降频到月度,取月末值。
  2. 阈值要动态调整:固定阈值(比如PMI=50)在长期回测中会失效。我建议用滚动12个月的分位数,比如PMI高于过去12个月的70%分位才算「扩张」。
  3. 不要过度拟合:我见过有人把宏观状态分成16种、32种,结果回测漂亮,实盘一塌糊涂。记住,状态越少,信号越稳健。
  4. 注意领先滞后关系:社融领先PMI大约3-6个月,利率领先经济周期大约6-9个月。你可以利用这个做「前瞻性配置」。

我的核心建议:这套宏观因子体系,不是用来预测未来的,而是用来「确认当下」的。你不需要猜下个月PMI是多少,你只需要知道「现在处于什么状态」,然后做对应的行业配置。就这么简单。

好了,宏观状态识别器就讲到这里。记住,工具是死的,人是活的。多复盘、多调整,这套框架才能真正变成你的「赚钱利器」。

专注资料整理