You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QuantLib教程:如何用3M期货构建收益率曲线(支持三次样条)

用3M Euribor期货构建三次样条收益率曲线的Python实现

以下是基于你已有日期向量(对应3M Euribor期货的远期起息日)和期货价格向量的实现步骤,核心是先将期货价格转换为隐含远期利率,再用三次样条拟合生成连续收益率曲线:

1. 依赖库导入

需要用到数据处理和插值工具:

import pandas as pd
import numpy as np
from scipy.interpolate import CubicSpline
from datetime import date
from dateutil.relativedelta import relativedelta

2. 数据预处理

假设你已有的dates是期货对应的远期起息日(3M Euribor期货通常对应季度交割日:3/6/9/12月的第三个周三),futures_prices是对应期货的报价:

2.1 转换隐含远期利率

3M Euribor期货的隐含3个月远期利率计算公式为:

# 转换为小数形式的收益率(如期货价格99.5对应0.5%的年化利率)
forward_rates = (100 - np.array(futures_prices)) / 100

2.2 计算远期期限(年化)

以估值日为基准,计算每个远期利率对应的到期日(起息日+3个月),再转换为年化期限(采用Euribor的Actual/360日计数惯例):

# 定义估值日,可替换为你实际的计算日期
valuation_date = date.today()

# 计算每个期货的远期到期日(起息日+3个月)
maturity_dates = [d + relativedelta(months=3) for d in dates]

# 转换为年化期限(天/360)
tenors = np.array([(maturity - valuation_date).days / 360 for maturity in maturity_dates])

2.3 数据校验

确保期限和收益率按时间顺序排列(样条插值要求x值单调递增):

# 按期限排序
sorted_indices = np.argsort(tenors)
sorted_tenors = tenors[sorted_indices]
sorted_rates = forward_rates[sorted_indices]

3. 三次样条拟合收益率曲线

使用自然三次样条(边界二阶导数为0,符合收益率曲线两端平缓的特性)进行拟合:

# 初始化三次样条模型,bc_type='natural'表示自然样条
cs = CubicSpline(sorted_tenors, sorted_rates, bc_type='natural')

4. 生成连续收益率曲线

你可以生成任意期限的收益率,比如从0到最长期限的连续序列:

# 生成需要插值的期限点(例如0到5年,步长0.1年)
target_tenors = np.linspace(0, sorted_tenors[-1], 50)

# 插值得到对应收益率
interpolated_rates = cs(target_tenors)

# 转换为DataFrame方便查看
yield_curve = pd.DataFrame({
    'Tenor (Years)': target_tenors,
    'Yield (%)': interpolated_rates * 100
})

关键注意事项

  • 日计数惯例:Euribor采用Actual/360,所以计算年化期限时用天数除以360,而非365
  • 边界条件:如果你的曲线需要更贴合短端或长端的市场特性,可调整bc_type参数(如bc_type='clamped'指定两端一阶导数)
  • 数据质量:确保期货价格无异常值,日期序列无重复或乱序情况

内容的提问来源于stack exchange,提问作者Afonso Batista

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:17:12