Soy nuevo en QuantLib, y lo estoy utilizando para valorar CDS. El siguiente es mi código de python:
from QuantLib import *
calendar = TARGET()
# Set evaluation date
todaysDate = Date(4, 2, 2019)
todaysDate = calendar.adjust(todaysDate) # business day adjustment
Settings.instance().evaluationDate = todaysDate
# build zero curve
spotRates = [0.02514, 0.026285, 0.027326299999999998,
0.0279, 0.029616299999999998, 0.026526,
0.026028, 0.0258695, 0.025958000000000002,
0.0261375, 0.026355, 0.0266255,
0.026898, 0.0271745, 0.02741,
0.027666, 0.028107000000000004, 0.028412000000000003,
0.028447, 0.0284165]
spotPeriod = [Period(1, Months), Period(2, Months),
Period(3, Months), Period(6, Months),
Period(1, Years), Period(2, Years),
Period(3, Years), Period(4, Years),
Period(5, Years), Period(6, Years),
Period(7, Years), Period(8, Years),
Period(9, Years), Period(10, Years),
Period(11, Years), Period(12, Years),
Period(15, Years), Period(20, Years),
Period(25, Years), Period(30, Years)]
spotDates = [todaysDate + x for x in spotPeriod]
risk_free_rate = YieldTermStructureHandle(
ZeroCurve(spotDates, spotRates, Actual360())
)
# CDS parameters
recovery_rate = 0.4
hazard_rate = 0.02
maturity = Date(20, 12, 2023)
hazard_curve = FlatHazardRate(todaysDate, QuoteHandle(SimpleQuote(hazard_rate)), Actual360())
# reprice instruments
nominal = 1000000.0
probability = DefaultProbabilityTermStructureHandle(hazard_curve)
schedule = Schedule(todaysDate, maturity, Period(Quarterly),
calendar, Following, Following,
DateGeneration.TwentiethIMM, False)
cds = CreditDefaultSwap(Protection.Seller, nominal, quoted_spread,
schedule, Following, Actual360())
engine = MidPointCdsEngine(probability, recovery_rate, risk_free_rate)
cds.setPricingEngine(engine)
print(" NPV: %g" % cds.NPV())
Tengo el siguiente error en la última línea de código:
RuntimeError: negative time (-0.0166667) given
Supongo que tengo que hacer algunos ajustes de fecha cuando construya la curva de rendimiento. Porque si intento utilizar la curva de rendimiento FlatForward, no hay ningún error.
Pero estoy confundido sobre las ideas de la fecha de evaluación y la fecha de liquidación, así como las fechas al contado cuando se construye la curva de rendimiento. Me pregunto por qué tengo este error negativo aquí? Los días de liquidación deberían ser 3 días.
Gracias.