저는 Python에서 Quantlib (v1.2) SWIG 래퍼를 사용하여 매우 기본적인 변동 금리 본드의 가격을 책정하려고합니다. 설명서에 포함 된 예제를 수정했습니다.Python을 사용하여 quantlib의 가격 책정
내 채권은 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()
고맙습니다. 맞춤 색인을 만들었고 정확한 결과는 100.0입니다! 사용자 정의 색인은 다음과 같습니다 :'index = IborIndex ('USD Libor', 기간 (3 개월), settlement_days, USDCurrency(), NullCalendar(), 조정되지 않음, False, Thirty360(), index_term_structure)' – ducky