债券定价:现金流贴现模型与到期收益率

聊债券定价之前,我先问个问题:一张债券到底值多少钱?

你可能会说,不就是面值100块吗?嗯,如果真是这样,债券交易员就该失业了。实际上,债券的价格每天都在变,而且波动还挺大。我刚开始做固收那会儿,看着报价屏上跳动的数字,第一反应是——这玩意儿跟股票似的啊。

后来我明白了。债券定价的核心逻辑,说白了就四个字:未来收钱,现在算账

2.1 现金流贴现模型:最朴素的定价逻辑

现金流贴现模型,英文叫DCF(Discounted Cash Flow)。名字挺唬人,其实道理很简单。

你想想看,如果有人说「一年后我给你105块」,你现在愿意出多少钱买这个承诺?

假设市场利率是5%。那你现在出100块,存银行一年后也是105块。所以这个承诺的合理价格就是100块。这就是贴现——把未来的钱,用利率折回今天。

核心公式:

债券价格 = Σ [CFt / (1 + r)t]

其中:CFt 是第t期的现金流,r是贴现率,t是期数

拿一个最简单的例子。一张3年期债券,面值100块,票面利率5%,每年付息一次。

它的现金流长这样:

年份 现金流 贴现因子 (假设r=4%) 现值
第1年 5元 1/(1.04) = 0.9615 4.81
第2年 5元 1/(1.04)² = 0.9246 4.62
第3年 105元 1/(1.04)³ = 0.8890 93.34
合计 102.77

你看,这张票面100块的债券,在利率4%的环境下,值102.77块。为什么比面值高?因为它的票面利率5%比市场利率4%高,所以它溢价交易

我的经验:刚入行时我总搞不清「贴现率」到底用哪个。后来我养成一个习惯——贴现率就用你放弃的「次优选择」的收益率。比如国债的贴现率,就用同期限的国债收益率。信用债呢?得在国债基础上加个信用利差。

2.2 到期收益率:债券的「内部收益率」

到期收益率,英文YTM(Yield to Maturity)。这玩意儿是债券世界里最重要的指标之一。

怎么理解?到期收益率就是你买入债券并持有到期的年化回报率。它考虑了所有利息收入、本金偿还,以及买入价和面值的差额。

公式其实跟DCF一样,只是把「价格」和「收益率」的位置互换了一下:

市场价格 = Σ [CFt / (1 + YTM)t]

解这个方程,求出来的YTM就是到期收益率。

注意,这个方程没有解析解,只能用试错法或者数值方法求解。我当年在Excel里用IRR函数算YTM,觉得这玩意儿真方便。后来做量化了,用Python写个牛顿法求解,几毫秒就搞定。

# Python示例:用牛顿法求YTM
def ytm_calculator(price, coupon, face, periods, guess=0.05):
    """
    计算到期收益率
    price: 当前市场价格
    coupon: 每期票息
    face: 面值
    periods: 剩余期数
    """
    def bond_price(rate):
        pv_coupons = sum([coupon / (1 + rate)**t for t in range(1, periods+1)])
        pv_face = face / (1 + rate)**periods
        return pv_coupons + pv_face
    
    # 牛顿迭代
    rate = guess
    for _ in range(100):
        f = bond_price(rate) - price
        # 导数近似
        df = (bond_price(rate + 1e-6) - bond_price(rate - 1e-6)) / (2e-6)
        rate = rate - f / df
        if abs(f) < 1e-8:
            break
    return rate

# 算一下上面那个例子
ytm = ytm_calculator(price=102.77, coupon=5, face=100, periods=3)
print(f"到期收益率: {ytm*100:.2f}%")
# 输出: 到期收益率: 4.00%

避坑指南:我曾经犯过一个低级错误——用票面利率代替到期收益率做比较。两张债券,一张票面5%卖102块,另一张票面3%卖98块,哪个更划算?光看票面利率是5%高,但算完YTM可能发现3%那张的实际回报更高。记住:永远用YTM做横向比较

2.3 债券定价的核心关系:价格与收益率

这里有个非常重要的关系,我建议你刻在脑子里:

债券价格和收益率是反向关系。

为什么会这样?你想想看,债券的现金流是固定的(票息和本金)。如果市场利率上升,意味着你的贴现率变高了,那未来现金流的现值自然就变小了。价格就得往下走。

反过来,利率下降,债券价格就上涨。

这个关系不是线性的。我画个图给你看:

债券价格与收益率关系曲线 收益率(%) 0 2 4 6 8 债券价格 80 90 100 110 当前价格 凸性(Convexity) 价格与收益率呈反向凸性关系

这张图里,曲线是向下凸的。这意味着:收益率下降带来的价格上涨,比收益率上升带来的价格下跌,幅度更大。这就是债券的「凸性」特征。做交易的人特别喜欢利用这一点——利率下行时赚得更多,上行时亏得更少。

2.4 实战中的几个关键点

理论讲完了,说点实际的。我在做组合管理时,有几个经验想分享给你:

  1. 久期是定价的「一阶导数」。久期告诉你,收益率变动1%,价格大概变动多少。比如久期是5,那收益率上升1%,价格大约跌5%。
  2. 凸性是「二阶导数」。它修正了久期的线性近似误差。收益率变动大的时候,凸性的影响不可忽略。
  3. 零息债券定价最简单。没有中间现金流,就是面值除以(1+r)^t。我经常用零息债的收益率曲线来反推市场对未来利率的预期。
  4. 含权债券要小心。可赎回债券、可回售债券,定价时得考虑发行人或持有人的选择权。这个后面章节会细讲。

一个小技巧:如果你手头没有专业的债券定价系统,用Excel的PRICE函数就能算。语法是:PRICE(settlement, maturity, rate, yld, redemption, frequency, basis)。我当年做信用债分析时,经常用这个函数快速估算。

2.5 一个完整的定价案例

咱们来走一遍完整的流程。假设有这么一只债券:

  • 面值:100元
  • 票面利率:3.5%
  • 剩余期限:5年
  • 每年付息一次
  • 当前市场收益率:4.2%

第一步,列出所有现金流:

年份现金流
13.5
23.5
33.5
43.5
5103.5

第二步,用4.2%贴现:

价格 = 3.5/1.042 + 3.5/1.042² + 3.5/1.042³ + 3.5/1.042⁴ + 103.5/1.042⁵

算出来大约是 96.87元

你看,票面利率3.5%低于市场收益率4.2%,所以债券折价交易,价格低于面值。这很合理——你买这张债,每年少拿0.7%的利息,那买入时就得便宜点,用资本利得补回来。

核心结论:

  • 票面利率 > 市场收益率 → 溢价交易(价格 > 面值)
  • 票面利率 = 市场收益率 → 平价交易(价格 = 面值)
  • 票面利率 < 市场收益率 → 折价交易(价格 < 面值)

嗯,到这里,债券定价的核心逻辑你应该已经清楚了。现金流贴现模型是骨架,到期收益率是灵魂。搞懂这两样,后面那些更复杂的定价模型——比如利率期限结构、含权债定价——你上手会快很多。

记住一句话:债券定价,本质上就是「把未来的钱,用合适的利率折回今天」。就这么简单,也这么深刻。