簡體   English   中英

QuantLib : 如何計算債券的修正久期?

[英]QuantLib : How do I calculate the Modified Duration of a bond?

我按照 GB 在這個網站上的說明http://gouthamanbalaraman.com/blog/quantlib-bond-modeling.html

代碼如下 - 定義了固定利率債券,創建了具有期限結構的債券引擎

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)

現在我如何獲得模組。 債券的期限? 我知道要使用的函數是ql.BondFunctions.duration(bond,ytm,ql.Duration.Modified)但這對我不起作用。

持續時間方法的輸入利率必須是一個 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM