python - QuantLib:如何计算债券的修正久期?
问题描述
我在这个网站 http://gouthamanbalaraman.com/blog/quantlib-bond-modeling.html上按照 GB 的说明进行操作
并且代码如下 - 定义了一个固定利率债券,创建了一个具有期限结构的债券引擎
import matplotlib
matplotlib.use('macosx')
import matplotlib.pyplot as plt
import QuantLib as ql
import pandas as pd
todaysDate = ql.Date(15, 1, 2015)
ql.Settings.instance().evaluationDate = todaysDate
spotDates = [ql.Date(15, 1, 2015), ql.Date(15, 7, 2015), ql.Date(15, 1, 2016)]
spotRates = [0.0, 0.005, 0.007]
dayCount = ql.Thirty360()
calendar = ql.UnitedStates()
interpolation = ql.Linear()
compounding = ql.Compounded
compoundingFrequency = ql.Annual
spotCurve = ql.ZeroCurve(spotDates, spotRates, dayCount, calendar, interpolation,compounding, compoundingFrequency)
spotCurveHandle = ql.YieldTermStructureHandle(spotCurve)
# define the fixed rate bond.
issueDate = ql.Date(15, 1, 2015)
maturityDate = ql.Date(15, 1, 2016)
tenor = ql.Period(ql.Semiannual)
calendar = ql.UnitedStates()
businessConvention = ql.Unadjusted
dateGeneration = ql.DateGeneration.Backward
monthEnd = False
schedule = ql.Schedule (issueDate, maturityDate, tenor, calendar, businessConvention, businessConvention, dateGeneration, monthEnd)
# coupons
dayCount = ql.Thirty360()
couponRate = .06
coupons = [couponRate]
settlementDays = 0
faceValue = 100
fixedRateBond = ql.FixedRateBond(settlementDays, faceValue, schedule, coupons, dayCount)
# create a bond engine with the term structure as input;
# set the bond to use this bond engine
bondEngine = ql.DiscountingBondEngine(spotCurveHandle)
fixedRateBond.setPricingEngine(bondEngine)
print(fixedRateBond.NPV())
#calculating yields
targetPrice = fixedRateBond.cleanPrice()
day_count = dayCount
compounding = ql.Compounded
frequency = 2
ytm = fixedRateBond.bondYield(targetPrice, day_count, compounding, frequency)
print(ytm)
现在我如何获得mod。债券的久期?我知道要使用的功能是ql.BondFunctions.duration(bond,ytm,ql.Duration.Modified)
,但这对我不起作用。
解决方案
duration 方法的输入速率必须是 InterestRate 对象而不是简单的浮点数,否则您必须通过约定。第一个参数是在你的情况下的债券fixedRateBond
。
试试这个:
rate = ql.InterestRate(ytm, ql.ActualActual(), ql.Compounded, ql.Annual)
ql.BondFunctions.duration(fixedRateBond,rate,ql.Duration.Modified)
或这个:
ql.BondFunctions.duration(fixedRateBond,ytm,ql.ActualActual(), ql.Compounded, ql.Annual, ql.Duration.Modified)
推荐阅读
- python - *args 和 **kwargs 的默认参数
- jenkins - 无法使用 cron 运行同一 Jenkins 作业的多个实例
- jquery - 媒体屏幕语法在我的 CSS 中不起作用
- c# - System.ArgumentException:数据源不能为空
- sql - 将单列日期列表转换为 SQL Server 中的多个日期范围
- c++ - 这个工厂函数有什么问题?
- oracle - 如何在 Oracle 过程中创建临时表/视图?
- sql - Laravel 查询生成器:这个命令是否可以免除 SQL 注入?
- c - 使用 C11 GCC 使数据读/写原子化
? - sql - 如果语句包含没有 INTO 子句的 OUTPUT 子句,则 DML 语句不能有任何启用的触发器