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 知识体系总览
这一章的内容比较多,我画了一张图帮你理清逻辑。你想想看,债券定价的核心就是「现金流折现」,而折现率的选择决定了定价的精度。
2.6 本章小结
这一章我们聊了债券定价的四个核心概念:
- 现金流贴现模型:一切定价的基础,把未来现金流折回今天。
- 到期收益率:持有到期的年化回报率,但隐含再投资假设。
- 即期利率与远期利率:即期利率是「现在到未来」的利率,远期利率是「未来到未来」的利率,两者通过无套利原则联系。
- 全价与净价:全价是你实际要付的钱,净价是市场报价,差一个应计利息。
我个人觉得,这一章最难理解的是即期利率和远期利率的关系。很多初学者会问:「为什么不能直接用 YTM 定价?」我的回答是:YTM 是一个加权平均,它抹平了不同期限的资金成本差异。而即期利率曲线能更精细地反映市场对未来的预期。
嗯,如果你能把这一章的内容吃透,后面讲久期、凸性、风险归因的时候,你会觉得轻松很多。毕竟,定价是所有风险分析的基础。
📌 实战小贴士: 如果你用 Python 做债券定价,推荐用 numpy_financial 库,里面有现成的 IRR 函数可以算 YTM。但要注意,算出来的结果一定要和交易平台的报价做交叉验证。我见过太多因为计息基准不一致导致的定价偏差了。