第二章:宏观因子初探——GDP、CPI、PMI、利率、汇率
各位同学,欢迎来到第二章。
上一章我们聊了协整的数学本质,说白了就是找一组变量,它们各自乱跑,但线性组合却稳稳当当。那问题来了:我们该选哪些变量来组这个组合?
我个人习惯,先从最经典的五个宏观因子入手:GDP、CPI、PMI、利率、汇率。这五个家伙,基本能勾勒出一个经济体的全貌。
2.1 GDP:经济的体温计
定义:国内生产总值,衡量一个国家或地区在一定时期内生产的所有最终商品和服务的市场价值。
嗯,教科书定义很严谨。但做策略时,我更关心它的同比增速和环比折年率。同比剔除了季节性,环比更敏感。
数据来源:
- 中国:国家统计局(季度公布,偶尔修正)
- 美国:BEA(Bureau of Economic Analysis,有三次预估)
- 高频替代:GDP Now(亚特兰大联储的实时预测模型)
处理要点:
- GDP是季度数据,频率太低。我一般会做线性插值转成月度,或者干脆用工业增加值作为月度代理变量。
- 注意基期效应。比如去年GDP因为疫情暴跌,今年同比就会异常高。这时候环比数据更有参考价值。
💡 个人经验:我曾经用GDP同比增速做协整,结果模型在2020年Q2彻底崩了。后来改用环比折年率,并加入疫情哑变量,才算稳住。记住:宏观数据有结构性断点,协整检验前一定要做断点检验。
2.2 CPI:通胀的脉搏
定义:消费者价格指数,衡量一篮子固定商品和服务的价格水平变化。
做策略时,我们通常关注核心CPI(剔除食品和能源),因为食品和能源波动太大,会掩盖真实通胀趋势。
| 指标 | 频率 | 滞后性 | 我的用法 |
|---|---|---|---|
| CPI同比 | 月度 | 约2周 | 长期趋势判断 |
| 核心CPI同比 | 月度 | 约2周 | 协整模型主力变量 |
| CPI环比 | 月度 | 约2周 | 短期预警信号 |
⚠️ 避坑指南:我曾经用中国CPI数据做模型,发现2015-2016年数据异常平稳。后来一查,是因为统计局调整了权重。所以,每次数据发布后,一定要检查统计口径变更公告。
2.3 PMI:经济的先行官
定义:采购经理人指数,通过对企业采购经理的月度调查编制而成。50是荣枯线,高于50表示扩张,低于50表示收缩。
PMI最大的优点是及时。每月第一个工作日发布,比GDP早一个多月。而且它是扩散指数,天然具有领先性。
我个人习惯用制造业PMI和服务业PMI两个版本。如果做全球策略,还会看摩根大通全球PMI。
数据来源:
- 中国:国家统计局(官方PMI)和财新PMI(更偏向中小企业)
- 美国:ISM(供应管理协会)和Markit(标普全球)
- 欧元区:标普全球(HCOB PMI)
处理要点:
- PMI是月度数据,但有时会季节性调整。我建议直接用季调后的数据,省去自己动手的麻烦。
- PMI的新订单分项和就业分项,往往比综合指数更有预测力。我在做协整时,有时会拆开用。
2.4 利率:资金的成本
定义:利率是借贷资金的成本。宏观层面,我们主要关注政策利率(如美联储联邦基金利率、中国LPR)和市场利率(如10年期国债收益率)。
为什么利率重要?因为它直接影响所有资产的定价。你想想看,无风险利率一变,股票、债券、房地产的估值模型都得重算。
💡 我的习惯:做协整时,我倾向于用实际利率(名义利率 - 通胀预期),而不是名义利率。因为实际利率才真正反映资金的真实成本。通胀预期可以用TIPS盈亏平衡通胀率(美国)或5年期国债收益率 - 5年期国债利率(中国)来近似。
数据来源:
- 政策利率:各国央行官网
- 国债收益率:Bloomberg、Wind、FRED(美联储经济数据库)
- 利率期货:CME FedWatch(预测美联储利率路径)
2.5 汇率:国家间的价格
定义:一国货币与另一国货币的兑换比率。我们通常关注实际有效汇率(REER),它考虑了贸易权重和通胀差异,比名义汇率更能反映竞争力。
汇率在协整模型里,往往扮演调节变量的角色。比如,当国内通胀高企时,汇率贬值可以缓解一部分压力。但汇率本身也受资本流动、利差、风险偏好等因素影响,非常复杂。
⚠️ 避坑指南:我曾经用人民币兑美元汇率做协整,结果模型在2015年“811汇改”后完全失效。因为汇改改变了汇率形成机制,相当于数据生成过程变了。所以,制度变化是宏观因子协整的最大敌人。一定要做子样本稳定性检验。
2.6 数据处理的通用流程
好了,五个因子介绍完了。但光有数据不行,还得处理。我总结了一套标准流程,供你参考:
- 数据清洗:处理缺失值(前向填充、插值)、异常值(3σ原则或分位数截断)
- 频率统一:把日度、周度、月度、季度数据统一到同一频率(我一般用月度)
- 平稳性检验:ADF检验、KPSS检验,确定每个变量的单整阶数
- 季节性调整:X-13ARIMA-SEATS(美国普查局方法)或移动平均
- 对数化处理:对GDP、CPI等水平值取对数,使方差更稳定
代码示例:Python数据预处理
import pandas as pd
import numpy as np
from statsmodels.tsa.stattools import adfuller
# 读取数据
df = pd.read_csv('macro_factors.csv', index_col=0, parse_dates=True)
# 1. 缺失值处理:前向填充
df.fillna(method='ffill', inplace=True)
# 2. 对数化处理(对GDP和CPI)
df['log_gdp'] = np.log(df['gdp'])
df['log_cpi'] = np.log(df['cpi'])
# 3. 平稳性检验
def adf_test(series):
result = adfuller(series.dropna())
return result[1] # p值
for col in ['log_gdp', 'log_cpi', 'pmi', 'interest_rate', 'exchange_rate']:
p_value = adf_test(df[col])
print(f'{col}: ADF p-value = {p_value:.4f}')
2.7 知识体系总览
说了这么多,我们来画张图,把这一章的核心逻辑串起来。
这张图把本章的核心逻辑串起来了。五个因子经过统一的数据处理流程,进入协整模型,最终输出可交易的信号。记住,数据质量决定了模型的上限。我见过太多人花大量时间调模型参数,却忽略了数据本身的问题。
💡 最后一个小建议:刚开始做宏观因子协整时,别贪多。先拿两个因子(比如GDP和CPI)练手,跑通流程,再加第三个。我当年就是一口气加了五个因子,结果模型诊断花了两周才找到问题所在。
好了,这一章就到这里。数据准备好了,下一章我们就要真正开始写代码,做协整检验了。