#include "cdsbootstrap.h" double cdsBootstrapPointFunction(double hazardRate, void *data) { cds_bootstrap_ctx *context = (cds_bootstrap_ctx*)data; 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) if (JpmcdsFeeLegPV(context->fl, cdsBaseDate, stepinDate, cashSettleDate, discountCurve, cdsCurve, 1, &pvF) != SUCCESS) /* Note: price is discounted to cdsBaseDate */ return pvC - context->spread * pvF; done: if (status != SUCCESS) printf("Something went wrong"); return status; }