summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pyisda/credit_index.pyx44
1 files changed, 24 insertions, 20 deletions
diff --git a/pyisda/credit_index.pyx b/pyisda/credit_index.pyx
index ea1a809..b442be2 100644
--- a/pyisda/credit_index.pyx
+++ b/pyisda/credit_index.pyx
@@ -658,23 +658,24 @@ cdef class CreditIndex(CurveList):
TDate maturity_c = pydate_to_TDate(maturity)
TContingentLeg* cl
size_t i
- double cl_pv, r = 0
+ double cl_pv, r = 0.0
TCurve* sc
double* recovery_rate
+ TDate defaulted
with nogil:
cl = JpmcdsCdsContingentLegMake(self._start_date,
maturity_c,
1.,
True)
- with parallel():
- cl_pv = 0.0
- for i in prange(self._curves.size()):
- sc = <TCurve*>self._curves[i].get()
- recovery_rate = <double*>(<char*>sc + self.offset_recovery_rates[i])
- # FIXME: do something better
- if isnan(deref(recovery_rate)):
- preinc(recovery_rate)
+ for i in prange(self._curves.size()):
+ sc = <TCurve*>self._curves[i].get()
+ recovery_rate = <double*>(<char*>sc + self.offset_recovery_rates[i])
+ defaulted = deref(<TDate*>recovery_rate + sc.fNumItems)
+ # FIXME: do something better
+ if isnan(deref(recovery_rate)):
+ preinc(recovery_rate)
+ if defaulted == -1:
JpmcdsContingentLegPV(cl,
self.base_date,
cash_settle_date_c,
@@ -698,7 +699,8 @@ cdef class CreditIndex(CurveList):
TCurve* sc
size_t i
int found
- double fl_pv, r
+ double fl_pv, r = 0.0
+ TDate defaulted
with nogil:
found = get_maturity_index(maturity_c, self._maturities)
@@ -719,18 +721,20 @@ cdef class CreditIndex(CurveList):
fl = self.fee_legs[found]
with parallel():
- fl_pv = 0
+ fl_pv = 0.0
for i in prange(self._curves.size()):
sc = <TCurve*>self._curves[i].get()
- JpmcdsFeeLegPV(fl,
- self.base_date,
- step_in_date_c,
- cash_settle_date_c,
- yc.get_TCurve(),
- sc,
- True,
- &fl_pv)
- r += self._weights[i] * fl_pv
+ defaulted = deref(<TDate*>(<char*>sc + self.offset_recovery_rates[i] + sc.fNumItems * sizeof(double)))
+ if defaulted == -1:
+ JpmcdsFeeLegPV(fl,
+ self.base_date,
+ step_in_date_c,
+ cash_settle_date_c,
+ yc.get_TCurve(),
+ sc,
+ True,
+ &fl_pv)
+ r += self._weights[i] * fl_pv
if found == -1:
JpmcdsFeeLegFree(fl)