Skip to content

15.2 美联储政策量化

名词解释:美联储货币政策(Fed Monetary Policy)

美联储通过联邦基金利率(FFR)、公开市场操作、前瞻指引和资产负债表管理等工具调控货币供应和信贷条件。量化分析美联储政策意味着将政策声明、会议纪要、点阵图和利率期货等软硬信息转化为可量化的交易信号。

一、FOMC 声明和会议纪要的 NLP 分析

1.1 政策文本的信息含量

FOMC(联邦公开市场委员会)每年召开 8 次例会,会后发布政策声明,三周后发布详细的会议纪要。这些文本包含丰富的政策信号:

  • 鹰派(Hawkish)信号:暗示加息、缩减宽松、关注通胀上行风险
  • 鸽派(Dovish)信号:暗示降息、增加宽松、关注就业下行风险
  • 中性措辞变化:"patient"、"data-dependent"、"considerable time"等措辞细微变化

1.2 基于词典的情感分析

PYTHON85 行 · 2.8 KB
📄此处有展示代码85 行 · 2.8 KB展开 ▼
python
import re
import numpy as np
import pandas as pd
from collections import Counter

def build_fed_sentiment_lexicon() -> dict:
    """
    构建美联储政策文本情感词典。

    基于学术文献(如 Apel & Blix Grimaldi, 2014)构建的
    鹰派/鸽派措辞词典。
    """
    hawkish_terms = {
        'tighten': 1.5, 'inflationary': 1.5, 'overheating': 2.0,
        'upside risk': 2.0, 'price pressure': 1.5, 'above target': 1.5,
        'wage pressure': 1.0, 'capacity constraints': 1.0,
        'accommodation': -0.5,  # 减少宽松 = 鹰派
        'strong': 0.5, 'robust': 0.5, 'solid': 0.3,
        'tight labor market': 1.0, 'inflation expectations': 0.5
    }

    dovish_terms = {
        'ease': 1.5, 'slack': 1.5, 'below target': 1.5,
        'downside risk': 2.0, 'disinflation': 1.5, 'deflation': 2.5,
        'patient': 1.5, 'considerable time': 2.0, 'gradual': 1.0,
        'accommodative': 1.5, 'headwinds': 1.0, 'uncertainty': 1.0,
        'global slowdown': 1.5, 'financial conditions': 0.5,
        'moderate': 0.5, 'subdued': 1.0
    }

    return {'hawkish': hawkish_terms, 'dovish': dovish_terms}


def score_fomc_statement(text: str,
                          lexicon: dict = None) -> dict:
    """
    对FOMC声明文本进行鹰鸽打分。

    参数:
        text: FOMC 声明全文
        lexicon: 鹰鸽词典
    返回:
        包含 hawkish_score, dovish_score, net_score 的字典
    """
    if lexicon is None:
        lexicon = build_fed_sentiment_lexicon()

    text_lower = text.lower()

    hawkish_score = 0
    dovish_score = 0
    matched_terms = []

    # 搜索鹰派措辞
    for term, weight in lexicon['hawkish'].items():
        count = len(re.findall(re.escape(term), text_lower))
        if count > 0:
            hawkish_score += count * weight
            matched_terms.append({'term': term, 'direction': 'hawkish',
                                   'count': count, 'weight': weight})

    # 搜索鸽派措辞
    for term, weight in lexicon['dovish'].items():
        count = len(re.findall(re.escape(term), text_lower))
        if count > 0:
            dovish_score += count * weight
            matched_terms.append({'term': term, 'direction': 'dovish',
                                   'count': count, 'weight': weight})

    net_score = hawkish_score - dovish_score

    # 归一化(按文本长度)
    n_words = len(text_lower.split())
    normalized_score = net_score / (n_words / 100)  # 每100词的得分

    return {
        'hawkish_score': hawkish_score,
        'dovish_score': dovish_score,
        'net_score': net_score,
        'normalized_score': normalized_score,
        'sentiment': 'hawkish' if net_score > 0.2 else (
            'dovish' if net_score < -0.2 else 'neutral'
        ),
        'matched_terms': matched_terms
    }
点击展开可浏览运行结果
--- 结果 ---
--- build_fed_sentiment_lexicon() ---
dict {'hawkish': {'tighten': 1.5, 'inflationary': 1.5, 'overheating': 2.0, 'upside risk': 2.0, 'price pressure': 1.5, 'above target': 1.5, 'wage pressure': 1.0, 'capacity constraints': 1.0, 'accommodation': -0.5, 'strong': 0.5, 'robust': 0.5, 'solid': 0.3, 'tight labor market': 1.0, 'inflation expectatio

1.3 基于 BERT 的深度语义分析

PYTHON38 行 · 1.4 KB
📄此处有展示代码38 行 · 1.4 KB展开 ▼
python
def finbert_fed_sentiment(texts: list) -> np.ndarray:
    """
    使用 FinBERT 对 FOMC 文本进行深度情感分析。

    注意:需要安装 transformers 库和预训练模型。
    `pip install transformers torch`

    参数:
        texts: 文本列表(每段FOMC声明)
    返回:
        每段文本的情感得分(-1到1,正=鹰派,负=鸽派)
    """
    try:
        from transformers import AutoTokenizer, AutoModelForSequenceClassification
        import torch

        model_name = "ProsusAI/finbert"
        tokenizer = AutoTokenizer.from_pretrained(model_name)
        model = AutoModelForSequenceClassification.from_pretrained(model_name)

        scores = []
        for text in texts:
            inputs = tokenizer(text, return_tensors="pt",
                               truncation=True, max_length=512)
            with torch.no_grad():
                outputs = model(**inputs)
                probs = torch.softmax(outputs.logits, dim=1)[0]

            # FinBERT: [positive, negative, neutral]
            # 映射到鹰鸽:正面市场情绪 ≈ 鸽派(宽松利好市场)
            finbert_score = probs[0].item() - probs[1].item()
            scores.append(finbert_score)

        return np.array(scores)

    except ImportError:
        print("请安装 transformers 库: pip install transformers torch")
        return np.zeros(len(texts))
点击展开可浏览运行结果
📘 本段代码定义了 1 个函数/类:函数 `finbert_fed_sentiment`(使用 FinBERT 对 FOMC 文本进行深度情感分析)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。

二、利率期货隐含的加息概率

2.1 联邦基金期货的定价原理

联邦基金期货(Federal Funds Futures, FF)可用于提取市场隐含的加息/降息概率。

P(hike)=FFRfuturesFFRcurrentFFRtarget_after_hikeFFRcurrent

2.2 从期货价格提取概率

PYTHON45 行 · 1.7 KB
📄此处有展示代码45 行 · 1.7 KB展开 ▼
python
def implied_rate_probability(futures_price: float,
                              current_ffr: float,
                              hike_size_bps: int = 25,
                              days_to_meeting: int = None,
                              days_in_month: int = 30) -> dict:
    """
    从联邦基金期货价格提取隐含的加息概率。

    参数:
        futures_price: 期货合约价格(100 - 隐含利率)
        current_ffr: 当前联邦基金有效利率(%)
        hike_size_bps: 预期的加息幅度(基点)
        days_to_meeting: 距离FOMC会议的天数
        days_in_month: 合约月份的总天数
    返回:
        包含隐含利率、加息概率的字典
    """
    # 期货隐含利率
    implied_rate = 100 - futures_price

    # 如果会议在月内某天
    if days_to_meeting is not None and days_in_month > 0:
        # 会后天数
        days_after = days_in_month - days_to_meeting

        # 隐含利率 = (会前天数/总天数) * 当前利率
        #           + (会后天数/总天数) * (当前利率 + 加息幅度 * 概率)
        # 求解概率
        rate_if_hike = current_ffr + hike_size_bps / 100
        rate_if_no_hike = current_ffr

        prob_hike = (implied_rate - rate_if_no_hike) / \
                    (rate_if_hike - rate_if_no_hike + 1e-10)
        prob_hike = np.clip(prob_hike, 0, 1)
    else:
        prob_hike = (implied_rate - current_ffr) / (hike_size_bps / 100)
        prob_hike = np.clip(prob_hike, 0, 1)

    return {
        'futures_price': futures_price,
        'implied_rate_pct': implied_rate,
        'current_ffr_pct': current_ffr,
        'prob_hike': prob_hike,
        'prob_no_change': 1 - prob_hike
    }
点击展开可浏览运行结果
📘 本段代码定义了 1 个函数/类:函数 `implied_rate_probability`(从联邦基金期货价格提取隐含的加息概率)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。

三、泰勒规则(Taylor Rule)与影子利率

3.1 泰勒规则

泰勒规则(Taylor, 1993)描述了美联储应如何根据通胀和产出缺口设定利率:

it=r+πt+0.5(πtπ)+0.5(yty)

其中 r 是自然真实利率(约 2%),πt 是通胀率,π 是通胀目标(2%),yty 是产出缺口。

3.2 影子联邦基金利率

当名义利率接近零下限(ZLB)时,传统泰勒规则失效。影子利率(Shadow Rate)通过期限结构模型估计隐含的政策立场:

PYTHON36 行 · 1.2 KB
📄此处有展示代码36 行 · 1.2 KB展开 ▼
python
def taylor_rule_ffr(inflation: float,
                     inflation_target: float,
                     output_gap: float,
                     r_star: float = 2.0) -> float:
    """
    原始泰勒规则计算建议的联邦基金利率。

    参数:
        inflation: 当前通胀率(%)
        inflation_target: 通胀目标(%,通常为2)
        output_gap: 产出缺口(%)
        r_star: 自然真实利率(%)
    返回:
        泰勒规则建议的FFR(%)
    """
    ffr_recommended = r_star + inflation + \
        0.5 * (inflation - inflation_target) + \
        0.5 * output_gap

    return max(0, ffr_recommended)


def taylor_rule_residual(actual_ffr: float,
                          inflation: float,
                          inflation_target: float,
                          output_gap: float,
                          r_star: float = 2.0) -> float:
    """
    泰勒规则残差 = 实际FFR - 泰勒规则建议FFR。

    正值表示政策偏紧,负值表示政策偏松。
    """
    recommended = taylor_rule_ffr(inflation, inflation_target,
                                   output_gap, r_star)
    residual = actual_ffr - recommended
    return residual
点击展开可浏览运行结果
📘 本段代码定义了 2 个函数/类:函数 `taylor_rule_ffr`(原始泰勒规则计算建议的联邦基金利率)、函数 `taylor_rule_residual`(泰勒规则残差 = 实际FFR - 泰勒规则建议FFR)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。

四、美联储资产负债表变化的影响

4.1 资产负债表渠道

美联储资产负债表扩张(QE)通过以下渠道影响金融市场:

  1. 投资组合再平衡渠道:美联储购买长期国债和MBS,压低长期利率,推动投资者转向风险资产
  2. 信号渠道:大规模资产购买释放了"长期维持低利率"的信号
  3. 流动性渠道:增加银行体系准备金,改善市场流动性

4.2 资产负债表变量的量化

PYTHON45 行 · 1.6 KB
📄此处有展示代码45 行 · 1.6 KB展开 ▼
python
def fed_balance_sheet_impact(fed_assets_change_pct: float,
                              equity_returns: np.ndarray,
                              bond_yield_change: np.ndarray,
                              window: int = 60) -> dict:
    """
    量化美联储资产负债表变化对资产价格的影响。

    参数:
        fed_assets_change_pct: 美联储总资产的月度变化率
        equity_returns: 同期权益市场收益率
        bond_yield_change: 同期国债收益率变动
        window: 滚动窗口大小
    返回:
        影响分析结果
    """
    # 相关性分析
    eq_corr = np.corrcoef(fed_assets_change_pct[-window:],
                           equity_returns[-window:])[0, 1]
    bond_corr = np.corrcoef(fed_assets_change_pct[-window:],
                              bond_yield_change[-window:])[0, 1]

    # 回归:权益收益 = α + β * ΔFedAssets + ε
    X = np.column_stack([np.ones(len(fed_assets_change_pct)),
                          fed_assets_change_pct])
    y = equity_returns

    beta = np.linalg.lstsq(X, y, rcond=None)[0]
    eq_beta = beta[1]

    # 回归:债券收益变动 = α + β * ΔFedAssets + ε
    beta_bond = np.linalg.lstsq(
        X, bond_yield_change, rcond=None
    )[0]
    bond_beta = beta_bond[1]

    return {
        'equity_correlation': eq_corr,
        'bond_yield_correlation': bond_corr,
        'equity_beta_to_fed_bs': eq_beta,
        'bond_beta_to_fed_bs': bond_beta,
        'interpretation': (
            'QE推升权益、压低债券收益率' if eq_beta > 0 and bond_beta < 0
            else '关联不显著或方向异常'
        )
    }
点击展开可浏览运行结果
📘 本段代码定义了 1 个函数/类:函数 `fed_balance_sheet_impact`(量化美联储资产负债表变化对资产价格的影响)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。

美联储政策量化是宏观量化投资的核心输入之一。通过对政策文本、利率期货和宏观经济规则的联合分析,投资者可以构建货币政策冲击因子,将其纳入多因子模型中。下一个关键宏观变量——通胀预期——同样需要多角度、多工具的量化建模。