债券定价基础:现金流贴现模型、到期收益率、久期与凸性、利率期限结构
债券定价这事儿,说白了就是算清楚「未来能拿多少钱,今天值多少」。我刚开始做固收那会儿,总觉得定价就是套公式,后来踩过几次坑才明白——模型是骨架,市场才是血肉。咱们一个一个拆开聊。
现金流贴现模型(DCF)
这是所有定价的起点。逻辑很简单:债券未来的每一笔利息和本金,都按一个合适的折现率折回今天,加总就是价格。
公式长这样:
P = Σ [CFt / (1 + r)^t]
其中:
- P = 债券价格
- CFt = 第t期的现金流(利息或本金)
- r = 折现率(通常用到期收益率)
- t = 期数
举个例子。一张3年期债券,面值100元,票面利率5%,每年付息一次。假设市场要求收益率是4%。
P = 5/(1+0.04)^1 + 5/(1+0.04)^2 + 105/(1+0.04)^3
= 4.81 + 4.62 + 93.35
= 102.78元
你看,票面利率5%高于市场要求的4%,所以债券溢价交易。反过来就是折价。嗯,这里要注意:折现率的选择直接决定定价结果。我见过有人直接用票面利率当折现率,那算出来永远是面值,毫无意义。
到期收益率(YTM)
到期收益率,就是让债券未来所有现金流折现后等于当前市场价格的那个折现率。说白了,它是你持有到期能获得的年化回报率。
但YTM有个大前提——你得把所有利息都按YTM再投资。现实中这几乎不可能。我做过回测,利率波动大的年份,实际回报和YTM能差50个基点以上。
计算YTM没有解析解,只能用数值方法。牛顿迭代法最常用:
def ytm_calculator(price, coupon, maturity, face_value=100, guess=0.05):
"""
用牛顿法算到期收益率
price: 当前市场价格
coupon: 年票息
maturity: 剩余期限(年)
"""
r = guess
for _ in range(100):
# 计算当前r下的理论价格
pv = sum([coupon / (1 + r)**t for t in range(1, maturity+1)])
pv += face_value / (1 + r)**maturity
# 计算导数
dpv_dr = sum([-t * coupon / (1 + r)**(t+1) for t in range(1, maturity+1)])
dpv_dr += -maturity * face_value / (1 + r)**(maturity+1)
# 更新r
r -= (pv - price) / dpv_dr
if abs(pv - price) < 1e-6:
break
return r
久期与凸性
久期衡量的是债券价格对利率变化的敏感度。麦考利久期是加权平均回收期,修正久期才是真正的价格弹性。
修正久期公式:
Modified Duration = Macaulay Duration / (1 + YTM / m)
其中m是每年付息次数。
价格变化近似:
ΔP/P ≈ -D_mod × Δy
但这是线性近似,利率变动大时误差就出来了。这时候需要凸性来修正。
凸性公式:
Convexity = [Σ (t×(t+1)×CFt / (1+y)^(t+2))] / P
加上凸性修正后:
ΔP/P ≈ -D_mod × Δy + 0.5 × Convexity × (Δy)^2
我做过一个测试:利率上升200个基点时,只用久期估算的价格误差是1.8%,加上凸性后误差降到0.3%。所以做组合对冲时,凸性不是锦上添花,是必需品。
| 利率变动 | 久期估算 | 久期+凸性 | 实际价格 |
|---|---|---|---|
| +100bp | -4.50% | -4.35% | -4.33% |
| +200bp | -9.00% | -8.40% | -8.37% |
| -100bp | +4.50% | +4.65% | +4.67% |
利率期限结构
利率期限结构,就是不同期限的收益率之间的关系。画出来就是收益率曲线。
三种经典理论:
- 纯预期理论: 长期利率等于未来短期利率的预期平均值。说白了,曲线陡峭意味着市场预期未来加息。
- 流动性偏好理论: 投资者要求期限溢价,因为长期债券风险更高。所以曲线通常向上倾斜。
- 市场分割理论: 不同期限的资金供需独立,各玩各的。现实中不太成立,因为套利者会抹平差异。
实际工作中,我主要用Nelson-Siegel模型来拟合曲线。它用三个参数就能描述曲线的水平、斜率和曲率:
y(τ) = β0 + β1 × (1 - e^(-τ/λ)) / (τ/λ) + β2 × [(1 - e^(-τ/λ)) / (τ/λ) - e^(-τ/λ)]
其中:
- β0:长期利率水平
- β1:曲线斜率(短端-长端)
- β2:曲率(中期弯曲程度)
- λ:衰减速度
我习惯每天收盘后跑一遍Nelson-Siegel拟合,看看参数变化。β1突然变大,说明市场在定价加息预期;β2剧烈波动,往往是流动性出了问题。
这四个模块是环环相扣的。DCF是底层逻辑,YTM是市场给出的折现率,久期和凸性告诉你风险敞口,期限结构则是整个定价体系的基准。做组合优化时,我习惯先把期限结构拟合好,再算每只债券的久期贡献,最后用凸性做二阶修正。这样出来的再平衡方案,才经得起市场波动的考验。