Skip to content

15.3 通胀预期建模

名词解释:通胀预期(Inflation Expectations)

通胀预期是市场参与者对未来物价水平变化率的预期,是资产定价的核心变量。通胀预期影响名义利率水平、债券定价和资产配置决策。量化通胀预期需要综合利用TIPS市场、通胀互换、调查数据和统计模型的交叉验证。

一、盈亏平衡通胀率(BEI)

1.1 BEI 的定义与定价

盈亏平衡通胀率(Break-Even Inflation rate, BEI)定义为同期限名义国债收益率与 TIPS(通胀保护国债)收益率之差:

BEI(T)=ynominal(T)yTIPS(T)

BEI 分解为两个成分:

BEI=E[π]+IRP

其中 E[π] 是真实通胀预期,IRP 是通胀风险溢价(Inflation Risk Premium)。

1.2 从市场数据提取 BEI

PYTHON80 行 · 2.6 KB
📄此处有展示代码80 行 · 2.6 KB展开 ▼
python
import numpy as np
import pandas as pd
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt

def calculate_bei(nominal_yields: pd.DataFrame,
                   tips_yields: pd.DataFrame) -> pd.DataFrame:
    """
    计算各期限的盈亏平衡通胀率。

    参数:
        nominal_yields: 名义国债收益率,列为各期限
        tips_yields: TIPS收益率,列为各期限
    返回:
        BEI DataFrame
    """
    # 对齐期限
    common_tenors = nominal_yields.columns.intersection(tips_yields.columns)
    bei = nominal_yields[common_tenors] - tips_yields[common_tenors]
    bei.columns = [f'BEI_{c}' for c in common_tenors]

    return bei


def bei_term_structure(bei_latest: pd.Series) -> dict:
    """
    分析BEI的期限结构及其隐含信息。

    参数:
        bei_latest: 最新的BEI曲线(不同期限的BEI值)
    """
    tenors = np.array([float(str(c).replace('BEI_', '').replace('Y', ''))
                       for c in bei_latest.index])
    bei_values = bei_latest.values

    # 拟合曲线
    f = interp1d(tenors, bei_values, kind='cubic', fill_value='extrapolate')

    # 计算关键指标
    bei_5y = f(5)
    bei_10y = f(10)
    bei_30y = f(30)

    # 5年5年远期BEI
    bei_5y5y = ((1 + bei_10y / 100) ** 10 /
                (1 + bei_5y / 100) ** 5) ** (1/5) - 1
    bei_5y5y *= 100  # 转百分比

    # 通胀风险溢价(简化估计:长端BEI - 短期调查通胀预期)
    survey_lt_inflation = 2.0  # 简化:假设长期通胀预期调查为2%
    irp_estimate = bei_5y5y - survey_lt_inflation

    # 可视化
    fig, ax = plt.subplots(figsize=(10, 6))
    tenors_dense = np.linspace(1, 30, 100)
    bei_dense = f(tenors_dense)

    ax.plot(tenors_dense, bei_dense, 'b-', linewidth=2, label='BEI 拟合曲线')
    ax.scatter(tenors, bei_values, color='red', s=80, zorder=5,
               label='市场数据')
    ax.axhline(y=2.0, color='green', linestyle='--',
               label='美联储通胀目标 (2%)')
    ax.fill_between(tenors_dense, bei_dense, 2.0,
                     where=(bei_dense > 2.0),
                     alpha=0.2, color='red', label='通胀预期高于目标')
    ax.set_xlabel('期限(年)')
    ax.set_ylabel('BEI (%)')
    ax.set_title('盈亏平衡通胀率期限结构')
    ax.legend()
    ax.grid(True, alpha=0.3)
    plt.show()

    return {
        'BEI_5Y': bei_5y,
        'BEI_10Y': bei_10y,
        'BEI_30Y': bei_30y,
        'BEI_5Y5Y_forward': bei_5y5y,
        'IRP_estimate': irp_estimate,
        'term_premium_signal': 'steepening' if bei_30y > bei_5y else 'flattening'
    }
点击展开可浏览运行结果
📘 本段代码定义了 2 个函数/类:函数 `calculate_bei`(计算各期限的盈亏平衡通胀率)、函数 `bei_term_structure`(分析BEI的期限结构及其隐含信息)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。

二、TIPS 与名义国债定价

2.1 TIPS 的特殊性

TIPS(Treasury Inflation-Protected Securities)的本金随 CPI-U 指数调整,提供了对通胀的直接保护。TIPS 相对名义国债的关键特征:

  • 通缩保护:到期时至少返还原始本金(deflation floor)
  • 流动性差异:TIPS 市场的流动性显著低于名义国债市场
  • 税收处理:本金调整在当期征税(phantom income),影响应税投资者的定价

2.2 TIPS 公允价值的分解模型

PYTHON49 行 · 1.8 KB
📄此处有展示代码49 行 · 1.8 KB展开 ▼
python
def tips_fair_value(real_yield: float,
                     expected_inflation: np.ndarray,
                     inflation_volatility: float = 0.015,
                     maturity_years: int = 10,
                     nominal_par: float = 1000.0) -> float:
    """
    计算TIPS的理论公允价值。

    TIPS价格 = 预期通胀调整后的现金流现值 + 通缩保护期权价值

    参数:
        real_yield: 实际收益率(小数形式,如0.01=1%)
        expected_inflation: 未来各期的预期通胀率数组
        inflation_volatility: 通胀的年度波动率
        maturity_years: 到期年数
        nominal_par: 名义本金
    返回:
        TIPS理论价格
    """
    n_periods = len(expected_inflation)

    # 计算通胀调整后的本金路径
    inflation_index = np.cumprod(1 + expected_inflation)
    inflation_index = np.insert(inflation_index, 0, 1.0)

    # 票息(假设固定票息率)
    coupon_rate = real_yield  # 简化:实际收益率 = 票息率
    coupon = nominal_par * coupon_rate

    # 贴现因子
    discount_factors = (1 + real_yield) ** (-np.arange(1, n_periods + 1))

    # 通胀调整后的现金流
    pv_coupons = np.sum(
        coupon * inflation_index[1:] * discount_factors
    )
    pv_principal = nominal_par * inflation_index[-1] * \
        (1 + real_yield) ** (-n_periods)

    # 通缩保护期权的价值(简化:Black-Scholes类型估值)
    # 在到期日,回报为 max(Par - Adjusted Principal, 0)
    # 简化估计:通胀低于某个阈值的概率
    deflation_prob = np.mean(expected_inflation < 0)  # 负通胀概率
    floor_value = nominal_par * deflation_prob * \
        (1 + real_yield) ** (-n_periods) * 0.5

    fair_value = pv_coupons + pv_principal + floor_value

    return fair_value
点击展开可浏览运行结果
📘 本段代码定义了 1 个函数/类:函数 `tips_fair_value`(计算TIPS的理论公允价值)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。

三、通胀互换与通胀衍生品

3.1 零息通胀互换(ZCIS)

零息通胀互换是最基础的通胀衍生品。合约双方交换:

  • 通胀端(Inflation Leg):支付 N×(ITI01)
  • 固定端(Fixed Leg):支付 N×((1+K)T1)

其中 It 是参考CPI指数,K 是互换利率(零息通胀互换利率)。

PYTHON28 行 · 858 B
📄此处有展示代码28 行 · 858 B展开 ▼
python
def zcis_fair_rate(expected_cpi_path: np.ndarray,
                    discount_rates: np.ndarray,
                    maturity_years: float) -> float:
    """
    计算零息通胀互换的公平固定利率。

    公平条件:固定端的PV = 通胀端的PV

    参数:
        expected_cpi_path: 预期的CPI指数路径
        discount_rates: 对应期限的贴现率
        maturity_years: 到期年数
    返回:
        零息通胀互换利率 K
    """
    T = int(maturity_years)
    I_0 = expected_cpi_path[0]
    I_T = expected_cpi_path[-1]

    # 通胀端PV
    inflation_pv = (I_T / I_0 - 1) * (1 + discount_rates[-1]) ** (-T)

    # 求解 K 使得固定端PV = 通胀端PV
    # PV_fixed = ((1+K)^T - 1) * DF_T = PV_inflation
    df_T = (1 + discount_rates[-1]) ** (-T)
    K = (inflation_pv / df_T + 1) ** (1 / T) - 1

    return K
点击展开可浏览运行结果
📘 本段代码定义了 1 个函数/类:函数 `zcis_fair_rate`(计算零息通胀互换的公平固定利率)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。

3.2 通胀上限/下限期权(Inflation Caps/Floors)

通胀上限(Cap)为买方提供了通胀上升时的保护,每期支付为:

Payofft=max(It/It11K,0)×N

四、通胀因子在资产配置中的应用

4.1 通胀敏感性分析

不同资产类别对通胀的敏感度差异显著:

资产类别通胀敏感度机制
TIPS直接正敏感本金随CPI调整
商品(黄金、原油)正敏感实物资产对冲通胀
长期名义国债负敏感通胀侵蚀固定收益
权益(价值股)中性到正定价权较强的公司可转嫁成本
权益(成长股)负敏感远期的现金流被高通胀折现
REITs正敏感租金和物业价值随通胀上升

4.2 通胀对冲组合构建

PYTHON44 行 · 1.5 KB
📄此处有展示代码44 行 · 1.5 KB展开 ▼
python
def inflation_hedge_portfolio(inflation_regime: str,
                               risk_budget: float = 0.10) -> dict:
    """
    基于通胀环境构建对冲组合。

    参数:
        inflation_regime: 通胀环境
            - 'rising': 通胀上升
            - 'falling': 通胀下降/通缩
            - 'stable_high': 高通胀但稳定
            - 'stable_low': 低通胀且稳定
        risk_budget: 分配给通胀对冲的风险预算
    返回:
        对冲组合的资产配置权重
    """
    # 各资产在不同通胀环境下的配置权重
    hedge_allocation = {
        'rising': {
            'TIPS': 0.30, '黄金': 0.15, '商品期货': 0.20,
            '大宗商品股票': 0.15, '浮动利率债券': 0.10,
            'REITs': 0.05, '现金': 0.05
        },
        'falling': {
            '名义长期国债': 0.40, '投资级公司债': 0.25,
            '成长股': 0.15, 'TIPS': 0.10, '现金': 0.10
        },
        'stable_high': {
            'TIPS': 0.25, 'REITs': 0.20, '价值股': 0.15,
            '基础设施': 0.15, '商品': 0.10, '浮动利率债券': 0.15
        },
        'stable_low': {
            '名义国债': 0.20, '投资级公司债': 0.25,
            '成长股': 0.30, '高质量股利股': 0.15, 'TIPS': 0.10
        }
    }

    # 获取对应配置
    weights = hedge_allocation.get(inflation_regime,
                                    hedge_allocation['stable_low'])

    # 按风险预算缩放
    scaled_weights = {k: v * risk_budget for k, v in weights.items()}

    return scaled_weights
点击展开可浏览运行结果
📘 本段代码定义了 1 个函数/类:函数 `inflation_hedge_portfolio`(基于通胀环境构建对冲组合)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。

4.3 BEI 变化率的交易信号

BEI 的变化率(而非水平值)是更有效的短期交易信号。当 BEI 加速上升时,表明市场正在快速重估通胀前景:

PYTHON27 行 · 919 B
📄此处有展示代码27 行 · 919 B展开 ▼
python
def bei_momentum_signal(bei_time_series: pd.Series,
                         short_window: int = 5,
                         long_window: int = 20) -> float:
    """
    BEI 动量信号。

    正值表示通胀预期上升动能,建议做多通胀敏感资产;
    负值表示通胀预期下降动能。

    参数:
        bei_time_series: BEI 时间序列(如10年期)
        short_window: 短期窗口(天)
        long_window: 长期窗口(天)
    返回:
        信号值 [-1, 1]
    """
    short_ma = bei_time_series.rolling(short_window).mean()
    long_ma = bei_time_series.rolling(long_window).mean()

    # 短均线 - 长均线,标准化
    raw_signal = (short_ma.iloc[-1] - long_ma.iloc[-1]) / \
                 bei_time_series.rolling(long_window).std().iloc[-1]

    # 限制在 [-2, 2],然后映射到 [-1, 1]
    signal = np.clip(raw_signal / 2, -1, 1)

    return signal
点击展开可浏览运行结果
📘 本段代码定义了 1 个函数/类:函数 `bei_momentum_signal`(BEI 动量信号)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。

通胀预期是连接宏观经济和资产定价的关键枢纽。理解通胀的动态变化和期限结构不仅有助于债券定价,也是经济周期择时的核心输入变量——因为通胀的拐点通常标志着经济周期的转折。