Login  Register

Re: Fail to replicate ISDA Fair Value CDS Model

Posted by Luigi Ballabio on May 29, 2017; 1:16pm
URL: http://quantlib.414.s1.nabble.com/Fail-to-replicate-ISDA-Fair-Value-CDS-Model-tp18310p18313.html

May you post the code as an attachment? For some reason, its lines got all mashed together, which made it unreadable.

Luigi


On Fri, May 26, 2017 at 12:19 AM wwd1015 <[hidden email]> wrote:
Hi, I'm really new to quantlib so please pardon me for any stupid questions. I have built Quantlib using the SWIG bindings for Python and tried to use it to replicate the ISDA Fair Value CDS pricing engine (i.e. using real yield curve and spread curve and assuming piecewise constant harzard rate). I modified Luigi's sample code on GitHub and created the sample code below. It seems that the hazard curve generated from the code is very different from the Bloomberg result (see screenshot below). Any ideas why this happens? Thanks in advance... Alan from QuantLib import * calendar = TARGET() # Set evaluation date todaysDate = Date(23, 5, 2017); todaysDate = calendar.adjust(todaysDate) # business day adjustment Settings.instance().evaluationDate = todaysDate # CDS parameters recovery_rate = 0.4 quoted_spreads = [0.001192, 0.002158, 0.003165, 0.004384, 0.005732, 0.007000, 0.009490, 0.011103] tenors = [Period(6, Months), Period(1, Years), Period(2, Years), Period(3, Years), Period(4, Years), Period(5, Years), Period(7, Years), Period(10, Years)] maturities = [calendar.adjust(todaysDate + x, Following) for x in tenors] spotRates = [0.010294, 0.010989, 0.011920, 0.014193, 0.017265, 0.015215, 0.016575, 0.017645, 0.018625, 0.019415, 0.020185, 0.020830, 0.021310, 0.021855, 0.022705, 0.023460, 0.024160, 0.024335, 0.024440] 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(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 instruments instruments = [ SpreadCdsHelper(QuoteHandle(SimpleQuote(s)), tenor, 0, calendar, Quarterly, Following, DateGeneration.TwentiethIMM, Actual360(), recovery_rate, risk_free_rate) for s, tenor in zip(quoted_spreads, tenors)] hazard_curve = PiecewiseFlatHazardRate(todaysDate, instruments, Actual360()) print("Calibrated hazard rate values: ") for x in hazard_curve.nodes(): print("hazard rate on %s is %.7f" % x) # reprice instruments nominal = 1000000.0 probability = DefaultProbabilityTermStructureHandle(hazard_curve) # create a cds for every maturity all_cds = [] for maturity, s in zip(maturities, quoted_spreads): schedule = Schedule(todaysDate, maturity, Period(Quarterly), calendar, Following, Following, DateGeneration.TwentiethIMM, False) cds = CreditDefaultSwap(Protection.Seller, nominal, s, schedule, Following, Actual360()) engine = MidPointCdsEngine(probability, recovery_rate, risk_free_rate) cds.setPricingEngine(engine) all_cds.append(cds) print("Repricing of quoted CDSs employed for calibration: ") for i in range(len(tenors)): print("%s fair spread: %.7g" % (tenors[i], all_cds[i].fairSpread())) print(" NPV: %g" % all_cds[i].NPV()) print(" default leg: %.7g" % all_cds[i].defaultLegNPV()) print(" coupon leg: %.7g" % all_cds[i].couponLegNPV())

View this message in context: Fail to replicate ISDA Fair Value CDS Model
Sent from the quantlib-users mailing list archive at Nabble.com.
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users