2、债券定价原理:现金流贴现模型、到期收益率、即期利率与远期利率、全价与净价

债券定价这事儿,说白了就是回答一个问题:「未来的一笔钱,今天值多少?」

我刚开始做固收的时候,觉得这还不简单?把未来的现金流折现回来不就完了。后来真上了实盘,才发现坑多得很。比如同一个债券,银行间市场和交易所报出来的价格能差好几毛,为什么?因为大家用的「折现率」不一样。

这一章,咱们就把定价的底裤扒干净。从最基础的现金流贴现模型讲起,再到到期收益率、即期利率、远期利率,最后把全价和净价这对「双胞胎」掰扯清楚。


2.1 现金流贴现模型(DCF)—— 一切定价的起点

债券的本质是什么?是一张借条。发行人承诺在未来某个时间点,给你一笔钱(本金),中间可能还给你一些利息(票息)。

那这张借条今天值多少钱?很简单:把未来所有的现金流,用合适的利率折回今天,加总。

核心公式:

P = Σ [ CF_t / (1 + r)^t ]

其中:

  • P = 债券价格
  • CF_t = 第 t 期的现金流(票息或本金)
  • r = 折现率(市场要求的回报率)
  • t = 期数

举个例子。一张1年期零息债券,面值100元,市场利率5%。那它今天的价格就是:

P = 100 / (1 + 0.05)^1 = 95.24 元

嗯,简单吧?但现实中的债券大多是付息债券,比如一张3年期、票面利率4%、每年付息的债券。它的现金流是这样的:

  • 第1年末:4元
  • 第2年末:4元
  • 第3年末:104元(4元票息 + 100元本金)

如果市场利率还是5%,那价格就是:

P = 4/(1.05) + 4/(1.05^2) + 104/(1.05^3) = 97.28 元

💡 我的经验: 我在做组合估值时,经常遇到一个问题——折现率 r 到底取多少?很多人直接拿国债收益率往上套,结果算出来的价格和成交价差一大截。后来我养成了一个习惯:用同期限、同评级的信用债收益率曲线来折现,这样算出来的理论价格才贴近市场。


2.2 到期收益率(YTM)—— 债券的「内部收益率」

到期收益率,英文叫 Yield to Maturity,简称 YTM。它是什么?它是让债券未来所有现金流的现值,等于当前市场价格的那个折现率。

说白了,YTM 就是假设你买入债券并持有到期,能获得的年化回报率。注意,这里有个大前提:假设所有票息都能以 YTM 进行再投资。这个假设在现实中基本不成立,但没办法,行业惯例就是这样。

YTM 的计算公式(迭代求解):

P = Σ [ CF_t / (1 + YTM)^t ]

这个方程没有解析解,只能用数值方法(比如牛顿法)迭代求解。

举个例子。假设一张债券当前价格是95元,面值100元,票面利率5%,还有2年到期,每年付息。那它的 YTM 是多少?

95 = 5/(1+YTM) + 105/(1+YTM)^2
解这个方程,得到 YTM ≈ 7.8%

⚠️ 避坑指南: 我曾经在做一个信用债组合的 YTM 计算时,发现系统算出来的 YTM 比市场报价低很多。排查了半天,发现是计息基准搞错了。国内银行间市场用「实际天数/365」,交易所市场用「实际天数/360」,差一天可能就差几个 BP。所以,算 YTM 之前,先确认计息基准


2.3 即期利率与远期利率 —— 利率的「时间切片」

YTM 是一个「平均」概念,它假设所有期限的折现率都一样。但现实中,不同期限的资金成本是不一样的。这就引出了即期利率和远期利率。

2.3.1 即期利率(Spot Rate)

即期利率,就是从现在开始,到未来某个时点的零息利率。比如,1年期即期利率是3%,2年期即期利率是3.5%。

为什么要有即期利率?因为用 YTM 折现所有现金流,其实隐含了一个假设:所有期限的折现率都一样。但市场不是这样的。用即期利率来折现,才能得到更精确的定价。

用即期利率定价:

P = Σ [ CF_t / (1 + S_t)^t ]

其中 S_t 是 t 年期的即期利率。

还是刚才那个例子,3年期债券,票息4%。假设即期利率曲线是:

期限 即期利率
1年 4.0%
2年 4.5%
3年 5.0%

那价格就是:

P = 4/(1.04) + 4/(1.045^2) + 104/(1.05^3) = 97.05 元

你看,和用 YTM 算出来的 97.28 元不一样。哪个更准?用即期利率算的更准,因为它反映了不同期限的资金成本差异。

2.3.2 远期利率(Forward Rate)

远期利率,是未来某个时间点开始的利率。比如,「1年后的1年期利率」就是一个远期利率。

远期利率和即期利率之间有一个确定的关系:无套利原则。如果你投资1年,再投资1年,和直接投资2年,收益应该是一样的。否则就有套利空间。

远期利率计算公式:

(1 + S_2)^2 = (1 + S_1) * (1 + f_{1,1})

其中 f_{1,1} 就是「1年后的1年期远期利率」。

举个例子。1年期即期利率4%,2年期即期利率4.5%。那1年后的1年期远期利率是多少?

(1 + 0.045)^2 = (1 + 0.04) * (1 + f)
解得 f ≈ 5.0%

💡 实战应用: 我在做利率互换定价时,经常需要从即期利率曲线推导远期利率。有个小技巧:用 Excel 的 RATE 函数或者 Python 的 numpy.irr 可以快速迭代。但要注意,远期利率是「隐含」的,不是市场直接报价的。市场报价的是 FRA(远期利率协议),那个是直接可交易的。


2.4 全价与净价 —— 交易中的「明暗两条线」

你打开交易软件,看到一只债券报价 98.50 元。你以为这就是你要付的钱?不一定。

债券交易中,价格分两种:

  • 净价(Clean Price):债券的「裸价」,不含应计利息。
  • 全价(Dirty Price):你实际要支付的价格,等于净价 + 应计利息。

为什么要有这种区分?因为债券是持续计息的。如果你在两次付息日之间买入债券,你实际上要补偿卖方已经持有期间产生的利息。这个利息就是「应计利息」。

核心关系:

全价 = 净价 + 应计利息

举个例子。一张债券,面值100元,票面利率5%,每年付息一次。上次付息日是2024年1月1日,下次付息日是2025年1月1日。今天是2024年7月1日,刚好过了半年。

应计利息 = 100 * 5% * (182/365) ≈ 2.49 元

如果净价是 98.50 元,那全价就是:

全价 = 98.50 + 2.49 = 100.99 元

也就是说,你实际要付 100.99 元,而不是 98.50 元。

⚠️ 避坑指南: 我曾经在做一个跨市场套利策略时,发现银行间和交易所的同一只债券价格差很大。后来发现,银行间市场报价是净价,交易所报价是全价。如果不做转换,直接比较,就会得出错误的套利信号。所以,做跨市场分析前,先确认报价类型


2.5 知识体系总览

这一章的内容比较多,我画了一张图帮你理清逻辑。你想想看,债券定价的核心就是「现金流折现」,而折现率的选择决定了定价的精度。

债券定价原理知识体系 现金流贴现模型(DCF) 到期收益率(YTM) 即期利率(Spot Rate) 全价与净价 远期利率(Forward Rate) 核心:折现率的选择决定定价精度 YTM是平均概念,即期利率是精确概念,远期利率是未来概念 全价 = 净价 + 应计利息

2.6 本章小结

这一章我们聊了债券定价的四个核心概念:

  • 现金流贴现模型:一切定价的基础,把未来现金流折回今天。
  • 到期收益率:持有到期的年化回报率,但隐含再投资假设。
  • 即期利率与远期利率:即期利率是「现在到未来」的利率,远期利率是「未来到未来」的利率,两者通过无套利原则联系。
  • 全价与净价:全价是你实际要付的钱,净价是市场报价,差一个应计利息。

我个人觉得,这一章最难理解的是即期利率和远期利率的关系。很多初学者会问:「为什么不能直接用 YTM 定价?」我的回答是:YTM 是一个加权平均,它抹平了不同期限的资金成本差异。而即期利率曲线能更精细地反映市场对未来的预期。

嗯,如果你能把这一章的内容吃透,后面讲久期、凸性、风险归因的时候,你会觉得轻松很多。毕竟,定价是所有风险分析的基础


📌 实战小贴士: 如果你用 Python 做债券定价,推荐用 numpy_financial 库,里面有现成的 IRR 函数可以算 YTM。但要注意,算出来的结果一定要和交易平台的报价做交叉验证。我见过太多因为计息基准不一致导致的定价偏差了。

专注资料整理