#include "cdsbootstrap.h" int cdsBootstrapPointFunction (double hazardRate, void *data, double *pv) { int status = FAILURE; cds_bootstrap_ctx *context = (cds_bootstrap_ctx*)data; const TCurve *discountCurve = context->discountCurve; TCurve *cdsCurve = context->cdsCurve; TDate cdsBaseDate = cdsCurve->fBaseDate; TDate stepinDate = context->stepinDate; TDate cashSettleDate = context->cashSettleDate; double pvC; /* PV of contingent leg */ double pvF; /* PV of fee leg */ cdsCurve->fArray[0].fRate = hazardRate; if (JpmcdsContingentLegPV (context->cl, cdsBaseDate, cashSettleDate, stepinDate, discountCurve, cdsCurve, context->recoveryRate, &pvC) != SUCCESS) goto done; if (JpmcdsFeeLegPV(context->fl, cdsBaseDate, stepinDate, cashSettleDate, discountCurve, cdsCurve, 1, &pvF) != SUCCESS) goto done; /* Note: price is discounted to cdsBaseDate */ *pv = pvC - context->spread * pvF; status = SUCCESS; done: if (status != SUCCESS) fprintf(stderr, "Something went wrong: %f\n", hazardRate); return status; }