[英]Pricing an Amortizing Floating Rate Bond using QuantLib and Python
[英]Pricing a Floating Bond in quantlib using Python
我試圖使用Quantlib(v1.2)SWIG包裝器在python中為一個非常基本的浮動利率債券定價。 我修改了文檔中包含的示例。
我的債券有4年的到期期限。 libor設定為10%,債券的差價為0.我的問題是,如果我以10%的比率打折,為什么債券的PV不是100? 我的值為99.54。
謝謝!
from QuantLib import *
frequency_enum, settle_date = 4, Date(5, 1, 2010)
maturity_date = Date(5, 1, 2014)
face_amount = 100.0
settlement_days = 0
fixing_days = 0
calendar = NullCalendar()
settle_date = calendar.adjust(settle_date)
todays_date = calendar.advance(settle_date, -fixing_days, Days)
Settings.instance().evaluationDate = todays_date
rate = 10.0 / 100.0
flat_forward = FlatForward(settle_date,
rate,
Thirty360(),
Compounded,
frequency_enum)
discounting_term_structure = RelinkableYieldTermStructureHandle(flat_forward)
index_term_structure = RelinkableYieldTermStructureHandle(flat_forward)
index = USDLibor(Period(3, Months), index_term_structure)
schedule = Schedule(settle_date,
maturity_date, Period(frequency_enum),
NullCalendar(),
Unadjusted, Unadjusted,
DateGeneration.Forward, False)
floating_bond = FloatingRateBond(settlement_days,
face_amount,
schedule,
index,
Thirty360(),
Unadjusted,
fixing_days,
[], # Gearings
[0], # Spreads
[], # Caps
[], # Floors
False, # Fixing in arrears
face_amount,
settle_date)
bond_engine = DiscountingBondEngine(discounting_term_structure)
floating_bond.setPricingEngine(bond_engine)
# coupon pricers
pricer = BlackIborCouponPricer()
volatility = 0.0
vol = ConstantOptionletVolatility(settlement_days,
calendar,
Unadjusted,
volatility,
Thirty360())
pricer.setCapletVolatility(OptionletVolatilityStructureHandle(vol))
setCouponPricer(floating_bond.cashflows(), pricer)
print floating_bond.NPV(), floating_bond.cleanPrice(), floating_bond.dirtyPrice()
優惠券價格使用USDLibor日計數器(即實際/ 360)固定,該計數器與您提供的付款日計數器(30/360)不符。 你可以通過檢查優惠券來看到它:
cfs = floating_bond.cashflows()
coupons = [ as_coupon(c) for c in cfs[:-1] ] # the last one is the redemption
print [ (c.rate(), c.accrualPeriod()) for c in coupons ]
所有優惠券的T = 0.25,但費率低於10%。
要獲得您想要的價格,您必須匹配費率和應計期限。 一種方法是通過Actual360()作為債券日計數器,在我的機器上給出100.002的價格(我沒有進一步調查,但差異可能是由於LIBOR定價的結束日期,這是使用美元日歷,可能與優惠券的結尾完全不符)。 另一種方法是使用內部30/360天計數器創建自定義LIBOR索引; 我自己沒有嘗試過,但你可以通過創建IborIndex類的適當實例來實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.