第三章 收益率曲线:债券市场的温度计

收益率曲线这东西,说白了就是债券市场的「体温计」。我刚开始做债券量化时,总觉得它就是个简单的利率走势图。后来踩过几次坑才明白——这条曲线背后,藏着市场对未来的所有预期。

3.1 收益率曲线的定义与形状

收益率曲线是什么?很简单。你把不同期限的国债收益率画在坐标轴上,横轴是期限(1年、2年、5年、10年...),纵轴是收益率,连成一条线——这就是收益率曲线。

曲线的形状会变,而且每种形状都有它的「潜台词」。

正常曲线(Normal)

正常曲线是向上倾斜的。短期收益率低,长期收益率高。为什么?因为借钱时间越长,不确定性越大,你自然要求更高的回报。我在做利率债交易时,大部分时间看到的都是这种形状。

平坦曲线(Flat)

平坦曲线意味着短期和长期收益率差不多。这种情况通常出现在货币政策转向的节点。我记得2019年有一段时间,市场就在纠结美联储到底加不加息,曲线一度压得非常平。

倒挂曲线(Inverted)

倒挂最吓人——短期收益率比长期还高。这往往是经济衰退的前兆。为什么?因为市场预期未来利率会大幅下降,所以长期债券反而更抢手,收益率被压低了。

关键点:倒挂不等于马上衰退,但历史上10年期-2年期利差倒挂后,平均12-18个月会出现衰退。我自己的策略里,一旦看到倒挂,就会开始减仓风险资产。

3.2 即期利率与远期利率

这两个概念容易搞混,我当年也花了不少时间才理清楚。

即期利率:你现在买入一个债券,持有到期的年化收益率。比如你买一个2年期国债,年化3%,这就是即期利率。

远期利率:你约定在未来某个时间点开始借钱,借一段时间的利率。比如「1年后的1年期利率」,这就是远期利率。

它们之间的关系,可以用一个公式表达:

(1 + S₂)² = (1 + S₁) × (1 + F₁,₁)

其中S₁是1年期即期利率,S₂是2年期即期利率,F₁,₁是1年后的1年期远期利率。

我的习惯:做量化策略时,我很少直接用即期利率。远期利率更能反映市场预期,用它来做期限利差交易,信号更干净。

3.3 收益率曲线的构建方法

市场上能看到的收益率,都是零散的。比如你可能只有1年、2年、3年、5年、10年的数据。但你的模型需要一条连续的曲线,怎么办?

这就需要用模型来「插值」。常用的方法有好几种,但我最常用的是Nelson-Siegel模型。

Nelson-Siegel模型

这个模型用四个参数,就能拟合出一条平滑的收益率曲线。公式长这样:

y(τ) = β₀ + β₁ × (1 - e^(-τ/λ)) / (τ/λ) + β₂ × [(1 - e^(-τ/λ)) / (τ/λ) - e^(-τ/λ)]

看着复杂?其实每个参数都有明确的含义:

  • β₀:长期利率水平,决定了曲线的「高度」
  • β₁:短期利率偏离,决定了曲线的「斜率」
  • β₂:中期曲度,决定了曲线的「弯曲程度」
  • λ:衰减因子,决定了曲线弯曲的位置

我一般在Python里这样实现:

import numpy as np
from scipy.optimize import minimize

def nelson_siegel(tau, beta0, beta1, beta2, lam):
    """Nelson-Siegel收益率曲线模型"""
    tau = np.array(tau)
    factor1 = (1 - np.exp(-tau/lam)) / (tau/lam)
    factor2 = factor1 - np.exp(-tau/lam)
    return beta0 + beta1 * factor1 + beta2 * factor2

def fit_nelson_siegel(maturities, yields):
    """拟合Nelson-Siegel参数"""
    def objective(params):
        beta0, beta1, beta2, lam = params
        fitted = nelson_siegel(maturities, beta0, beta1, beta2, lam)
        return np.sum((fitted - yields) ** 2)
    
    # 初始参数设置
    init_params = [np.mean(yields), -0.5, 0.5, 2.0]
    result = minimize(objective, init_params, method='L-BFGS-B')
    return result.x
避坑指南:我曾经在拟合时遇到过参数不稳定的问题。后来发现,λ的初始值很关键。如果设得太小,曲线会在短端剧烈波动;设得太大,又拟合不出中期曲度。我一般先用1年、3年、5年三个点做个粗略估计,再代入优化。

3.4 知识体系总览

下面这张图,是我自己整理的知识结构。每次做策略前,我都会过一遍这个框架:

收益率曲线知识体系 收益率曲线定义 三种形状 正常(向上倾斜) 平坦 倒挂(向下倾斜) 核心概念 即期利率(Spot Rate) 远期利率(Forward Rate) 构建方法:Nelson-Siegel模型 β₀(水平) | β₁(斜率) | β₂(曲度) | λ(衰减) 量化策略应用:期限利差交易

3.5 实战中的几点体会

说了这么多理论,最后分享几个实战中的体会:

  1. 数据质量第一:我见过太多人拿着有问题的收益率数据跑模型,结果全白费。建议先用国债期货的隐含收益率做交叉验证。
  2. 参数稳定性:Nelson-Siegel的参数会随时间变化。我一般每周重新拟合一次,而不是每天。太频繁反而引入噪音。
  3. 不要迷信模型:模型只是工具。2013年「钱荒」那段时间,Nelson-Siegel怎么拟合都不对——因为市场已经失效了。这时候要相信常识,而不是模型。
一个小技巧:如果你用Nelson-Siegel做交易信号,重点关注β₁(斜率)的变化。斜率突然变陡或变平,往往意味着市场在定价某种预期。我自己的策略里,β₁的周度变化超过0.5个标准差时,就会触发调仓信号。

收益率曲线这东西,越研究越有意思。它不只是数学公式,更是市场情绪的「心电图」。下次看到曲线形状变了,别急着跑模型——先问问自己:市场在告诉我什么?