利率曲线(Yield Curve)
贴现率曲线是一条给定到期时间 T,告诉你当下市场对于未来现金流的折现因子的曲线。
QuantLib 中常用三类利率曲线:
- FlatForward(平坦利率曲线)
- ZeroCurve(零息利率曲线)
- PiecewiseYieldCurve(逐段曲线,真实金融机构使用)
FlatForward(平坦利率曲线)
这条曲线的利率是固定的,例如固定 4%。zero rate = 0.04
import QuantLib as ql
today = ql.Date(3, 12, 2025)
ql.Settings.instance().evaluationDate = today
day_count = ql.Actual360()
# 平坦利率 4%
flat_rate = ql.FlatForward(today, 0.04, day_count, ql.Compounded, ql.Annual)
curve = ql.YieldTermStructureHandle(flat_rate)
# 折现因子(1年)
print("1 yr discount factor:", curve.discount(today + 360))
# 零利率
zero_rate = curve.zeroRate(1.0, ql.Compounded, ql.Annual, True)
print("Zero rate (1yr):", zero_rate.rate())
ZeroCurve(零息利率曲线)
真实世界常有不同期限的零息利率:
例如:
| 期限 | 利率 |
|---|---|
| 6M | 3% |
| 1Y | 3.5% |
| 2Y | 4% |
| 3Y | 4.5% |
我们可以用 ZeroCurve 构建:
dates = [
ql.Date(3,12,2025), # 今天
ql.Date(3,6,2026), # 6M
ql.Date(3,12,2026), # 1Y
ql.Date(3,12,2027), # 2Y
ql.Date(3,12,2028), # 3Y
]
rates = [0.0, 0.03, 0.035, 0.04, 0.045] # 从 today 开始,第一点必须对应利率 0
zero_curve = ql.ZeroCurve(dates, rates, day_count)
curve = ql.YieldTermStructureHandle(zero_curve)
print("Discount 2 years:", curve.discount(today + ql.Period(2,ql.Years)))
print("Zero Rate 2 years:", curve.zeroRate(2.0,ql.Compounded, ql.Annual).rate())
zero_rates = []
times = []
for _ in np.arange(0,3.04,0.01):
times.append(_)
zero_rates.append(curve.zeroRate(_,ql.Compounded, ql.Annual).rate())
pt.plot([0,0.5,1,2,3],rates)
pt.plot(times,zero_rates)
pt.show()
PiecewiseYieldCurve
实际专业分析师、银行、券商都使用 逐段构建的利率曲线,用市场报价 bootstrap 曲线。
例如:
- O/N 隔夜利率
- 1W、1M、3M、6M、1Y 的存款利率
- Swap rate 利率
- Futures rates
我们这里示范一个简单的版本:
import QuantLib as ql
today = ql.Date(3, 12, 2025)
ql.Settings.instance().evaluationDate = today
day_count = ql.Actual365Fixed()
helpers = []
# 1Y swap rate 3.5%
rate1y = ql.SimpleQuote(0.035)
helper1 = ql.SwapRateHelper(
ql.QuoteHandle(rate1y),
ql.Period(1, ql.Years),
ql.TARGET(),
ql.Annual,
ql.ModifiedFollowing,
ql.Actual365Fixed(),
ql.Euribor6M()
)
helpers.append(helper1)
# 2Y swap rate 4.0%
rate2y = ql.SimpleQuote(0.04)
helper2 = ql.SwapRateHelper(
ql.QuoteHandle(rate2y),
ql.Period(2, ql.Years),
ql.TARGET(),
ql.Annual,
ql.ModifiedFollowing,
ql.Actual365Fixed(),
ql.Euribor6M()
)
helpers.append(helper2)
# Piecewise curve
curve = ql.PiecewiseLogCubicDiscount(today, helpers, day_count)
ts = ql.YieldTermStructureHandle(curve)
print("Zero rate 1Y:", ts.zeroRate(1.0, day_count, ql.Compounded, ql.Annual).rate())
print("Zero rate 2Y:", ts.zeroRate(2.0, day_count, ql.Compounded, ql.Annual).rate())
print("Discount factor 2Y:", ts.discount(today + 2*365))
| 功能 | 说明 |
|---|---|
| 构建利率曲线 FlatForward | 平坦利率,用于教学和快速估计 |
| 构建 ZeroCurve | 使用不同期限利率点 |
| 构建 PiecewiseYieldCurve | 最接近真实市场,使用 swap、deposit、future 等 bootstrap |
| discount factor | 折现因子 |
| zero rate | 零息利率 |
| forward rate | 远期利率 |