金融工程学 quantlib 利率曲线基础

利率曲线(Yield Curve)

贴现率曲线是一条给定到期时间 T,告诉你当下市场对于未来现金流的折现因子的曲线。

QuantLib 中常用三类利率曲线:

  1. FlatForward(平坦利率曲线)
  2. ZeroCurve(零息利率曲线)
  3. 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 远期利率