债券定价:现金流贴现模型与到期收益率
聊债券定价之前,我先问个问题:一张债券到底值多少钱?
你可能会说,不就是面值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 债券定价的核心关系:价格与收益率
这里有个非常重要的关系,我建议你刻在脑子里:
债券价格和收益率是反向关系。
为什么会这样?你想想看,债券的现金流是固定的(票息和本金)。如果市场利率上升,意味着你的贴现率变高了,那未来现金流的现值自然就变小了。价格就得往下走。
反过来,利率下降,债券价格就上涨。
这个关系不是线性的。我画个图给你看:
这张图里,曲线是向下凸的。这意味着:收益率下降带来的价格上涨,比收益率上升带来的价格下跌,幅度更大。这就是债券的「凸性」特征。做交易的人特别喜欢利用这一点——利率下行时赚得更多,上行时亏得更少。
2.4 实战中的几个关键点
理论讲完了,说点实际的。我在做组合管理时,有几个经验想分享给你:
- 久期是定价的「一阶导数」。久期告诉你,收益率变动1%,价格大概变动多少。比如久期是5,那收益率上升1%,价格大约跌5%。
- 凸性是「二阶导数」。它修正了久期的线性近似误差。收益率变动大的时候,凸性的影响不可忽略。
- 零息债券定价最简单。没有中间现金流,就是面值除以(1+r)^t。我经常用零息债的收益率曲线来反推市场对未来利率的预期。
- 含权债券要小心。可赎回债券、可回售债券,定价时得考虑发行人或持有人的选择权。这个后面章节会细讲。
一个小技巧:如果你手头没有专业的债券定价系统,用Excel的PRICE函数就能算。语法是:PRICE(settlement, maturity, rate, yld, redemption, frequency, basis)。我当年做信用债分析时,经常用这个函数快速估算。
2.5 一个完整的定价案例
咱们来走一遍完整的流程。假设有这么一只债券:
- 面值:100元
- 票面利率:3.5%
- 剩余期限:5年
- 每年付息一次
- 当前市场收益率:4.2%
第一步,列出所有现金流:
| 年份 | 现金流 |
|---|---|
| 1 | 3.5 |
| 2 | 3.5 |
| 3 | 3.5 |
| 4 | 3.5 |
| 5 | 103.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%的利息,那买入时就得便宜点,用资本利得补回来。
核心结论:
- 票面利率 > 市场收益率 → 溢价交易(价格 > 面值)
- 票面利率 = 市场收益率 → 平价交易(价格 = 面值)
- 票面利率 < 市场收益率 → 折价交易(价格 < 面值)
嗯,到这里,债券定价的核心逻辑你应该已经清楚了。现金流贴现模型是骨架,到期收益率是灵魂。搞懂这两样,后面那些更复杂的定价模型——比如利率期限结构、含权债定价——你上手会快很多。
记住一句话:债券定价,本质上就是「把未来的钱,用合适的利率折回今天」。就这么简单,也这么深刻。