Я пытаюсь использовать Python QuantLib для оценки базовой облигации с плавающей ставкой, но получил отрицательное время ошибки (-9,94444).
Моя логика такая: сначала постройте кривую прогноза (которая основана просто на риске) бесплатная ставка 1,5%); затем я строю облигацию FRN с плавающей ставкой на основе эталонного индекса USDLibor. Затем я распечатываю денежные потоки FRN. Кажется, работает.
После этого я указываю кривую дисконтирования (безрисковая ставка 0,015 и кредитный спред 0,005) для ценообразования. Но возникает ошибка, когда я печатаю чистую приведенную стоимость, чистую цену и грязные цены. Можете ли вы помочь?
Мой код Python выглядит следующим образом:
import QuantLib as ql
from datetime import datetime, timedelta
from pandas import DataFrame
start = ql.Date(15,12,2019)
issue_date = ql.Date(15,12,2019)
maturity = ql.Date(15,12,2022)
settle_date = ql.Date(15,12,2019)
settlement_days = 0
calendar = ql.UnitedStates()
coupons = [0.06]
coupon_freq = ql.Period(ql.Semiannual)
face_value = 100
dateGeneration = ql.DateGeneration.Backward
businessConvention = ql.Following
schedule = ql.Schedule(issue_date, maturity, coupon_freq, calendar, businessConvention, businessConvention, dateGeneration,False)
day_count = ql.Thirty360()
#ql.ActualActual(ql.ActualActual.ISMA)
#construction of forecast curves with index specification
forecast_curve = ql.YieldTermStructureHandle(ql.FlatForward(start,0.015, day_count, ql.Compounded)) #let forecast term structure same as yield ts
index = ql.IborIndex('USD Libor', coupon_freq, settlement_days, ql.USDCurrency(), calendar, businessConvention, False, day_count, forecast_curve)
#index = ql.IborIndex('Euribor', coupon_freq, 2, ql.EURCurrency(), calendar, businessConvention, False, day_count, forecast_curve)
#after constructing discount and forecasting term structure with index specification, construct the FRN
margin = [0.01]
fixing_days = 2
FRN = ql.FloatingRateBond(settlement_days, face_value, schedule, index, day_count, spreads=margin)
dates = [c.date() for c in FRN.cashflows()]
cfs = [c.amount() for c in FRN.cashflows()]
print(DataFrame(zip(dates, cfs), columns=('date', 'amount'))) #works
#discount curve with credit spread
crv = ql.FlatForward(start,0.015, day_count, ql.Compounded)
yts = ql.YieldTermStructureHandle(crv)
spread_handle1 = ql.QuoteHandle(ql.SimpleQuote(0.0050))
ts_spreaded1 = ql.ZeroSpreadedTermStructure(yts, spread_handle1)
discount_ts_handle = ql.YieldTermStructureHandle(ts_spreaded1)
#ENGINE
FRN_engine = ql.DiscountingBondEngine(discount_ts_handle)
FRN.setPricingEngine(FRN_engine)
print("FRN NPV is", FRN.NPV()) #error: negative time (-9.94444) given
print("FRN clean price is", FRN.cleanPrice())
print("FRN dirty price is", FRN.dirtyPrice())
Подробнее здесь: https://stackoverflow.com/questions/686 ... ice-a-floa
Ошибка: отрицательное время (-9,94444), указанное, когда я использую Python QuantLib для определения цены облигации с пл ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение