summaryrefslogtreecommitdiffstats
path: root/c_layer/cdsbootstrap.c
blob: 6b0a4cd02d0643fe53e96aec2d7185b05ec06809 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#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;
}