QuantLib 中债券的核心是 现金流 (CashFlow),债券是现金流的集合。 固定利率债券每期支付固定利息,到期支付本金。
示例代码:
import QuantLib as ql
# 1. 设置评估日
today = ql.Date(3, 12, 2025)
ql.Settings.instance().evaluationDate = today
# 2. 债券参数
issue_date = ql.Date(3, 12, 2020)
maturity_date = ql.Date(3, 12, 2030)
tenor = ql.Period(ql.Annual) # 每年付息
calendar = ql.TARGET()
business_convention = ql.Following
day_count = ql.Actual360()
coupon_rate = [0.05] # 年利率 5%
face_value = 100
# 3. 生成付息日期
schedule = ql.Schedule(issue_date, maturity_date, tenor, calendar,
business_convention, business_convention,
ql.DateGeneration.Backward, False)
# 4. 创建固定利率债券
bond = ql.FixedRateBond(0, face_value, schedule, coupon_rate, day_count)
# 5. 使用贴现曲线定价
flat_rate = ql.FlatForward(today, 0.04, day_count, ql.Compounded, ql.Annual)
discount_curve = ql.YieldTermStructureHandle(flat_rate)
bond_engine = ql.DiscountingBondEngine(discount_curve)
bond.setPricingEngine(bond_engine)
# 6. 计算价格和收益率
clean_price = bond.cleanPrice()
dirty_price = bond.dirtyPrice()
print("Clean Price:", clean_price)
print("Dirty Price:", dirty_price)
| 代码/类 | 作用 |
|---|---|
ql.Schedule |
生成债券付息日期表 |
FixedRateBond |
固定利率债券类 |
FlatForward |
构建平坦利率曲线 |
DiscountingBondEngine |
贴现引擎,用于债券定价 |
cleanPrice |
不含应计利息的债券价格 |
dirtyPrice |
含应计利息的债券价格 |
yieldRate |
计算到期收益率 (YTM) |
注意:债券价格可以分为 clean price + accrued interest = dirty price。
计算现金流现值
我们也可以单独打印每笔现金流的现值:
print("cashflows:", [ _.amount() for _ in bond.cashflows()] )
example
创建一个 5 年期、每半年付息的债券,年利率 3%,本金 100,计算价格和 YTM
import QuantLib as ql
# 1. 设置评估日
today = ql.Date(4, 12, 2025)
ql.Settings.instance().evaluationDate = today # 设置评估日
# 2. 债券参数
issue_date = ql.Date(3, 12, 2020) # 发行日期
maturity_date = ql.Date(3, 12, 2030) # 到期日期
tenor = ql.Period(ql.Semiannual) # 每半年付息
calendar = ql.TARGET() # 日历
business_convention = ql.Following # 业务约定
day_count = ql.Actual360() # 日期计数
coupon_rate = [0.03] # 年利率 3%
face_value = 1000 # 面值
# 3. 生成付息日期
schedule = ql.Schedule(issue_date, maturity_date, tenor, calendar,
business_convention, business_convention,
ql.DateGeneration.Backward, False) # 生成付息日期
# 4. 创建固定利率债券
bond = ql.FixedRateBond(0, face_value, schedule, coupon_rate, day_count) # 创建固定利率债券
# 5. 使用贴现曲线定价
flat_rate = ql.FlatForward(today, 0.04, day_count, ql.Compounded, ql.Semiannual) # 创建贴现曲线(复利频率应与付息频率匹配)
discount_curve = ql.YieldTermStructureHandle(flat_rate) # 创建贴现曲线
bond_engine = ql.DiscountingBondEngine(discount_curve) # 创建贴现引擎
bond.setPricingEngine(bond_engine)
# 6. 计算价格和收益率
clean_price = bond.cleanPrice() # 计算不含应计利息的价格
dirty_price = bond.dirtyPrice() # 计算含应计利息的价格
print("Clean Price:", clean_price*face_value/100) # 显示百分比价格
print("Dirty Price:", dirty_price*face_value/100)
print("cashflows:", [ _.amount() for _ in bond.cashflows()] )