diff options
| author | Guillaume Horel <guillaume.horel@serenitascapital.com> | 2016-11-10 14:21:34 -0500 |
|---|---|---|
| committer | Guillaume Horel <guillaume.horel@serenitascapital.com> | 2016-11-10 14:21:34 -0500 |
| commit | 8134b12f3d051e468a20df1a8e90408dedc3d112 (patch) | |
| tree | 914139595dd6c822023fb23da42ce1df6f34a0df /c_layer | |
| parent | f39919c51ec7e4dab767156db0ed1fd457787672 (diff) | |
| download | pyisda-8134b12f3d051e468a20df1a8e90408dedc3d112.tar.gz | |
add fater version
Diffstat (limited to 'c_layer')
| -rw-r--r-- | c_layer/cdsbootstrap.c | 50 | ||||
| -rw-r--r-- | c_layer/cdsbootstrap.h | 26 |
2 files changed, 76 insertions, 0 deletions
diff --git a/c_layer/cdsbootstrap.c b/c_layer/cdsbootstrap.c new file mode 100644 index 0000000..f3ae975 --- /dev/null +++ b/c_layer/cdsbootstrap.c @@ -0,0 +1,50 @@ +#include "cdsbootstrap.h" + +int cdsBootstrapPointFunction +(double hazardRate, + void *data, + double *pv) +{ + int status = FAILURE; + + 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) + 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) + printf("Something went wrong"); + return status; +} diff --git a/c_layer/cdsbootstrap.h b/c_layer/cdsbootstrap.h new file mode 100644 index 0000000..2e19189 --- /dev/null +++ b/c_layer/cdsbootstrap.h @@ -0,0 +1,26 @@ +#include "isda/ldate.h" +#include "isda/cxzerocurve.h" +#include "isda/feeleg.h" +#include "isda/contingentleg.h" +#include "stdio.h" + + +#define SUCCESS 0 +#define FAILURE -1 + +typedef struct +{ + TDate stepinDate; + TDate cashSettleDate; + TCurve *discountCurve; + TCurve *cdsCurve; + double recoveryRate; + double spread; + TContingentLeg *cl; + TFeeLeg *fl; +} cds_bootstrap_ctx; + + +int cdsBootstrapPointFunction(double hazardRate, + void *data, + double *pv); |
