summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pyisda/credit_index.pxd1
-rw-r--r--pyisda/credit_index.pyx17
-rw-r--r--pyisda/legs.pyx5
3 files changed, 13 insertions, 10 deletions
diff --git a/pyisda/credit_index.pxd b/pyisda/credit_index.pxd
index 7722a9b..42a9e85 100644
--- a/pyisda/credit_index.pxd
+++ b/pyisda/credit_index.pxd
@@ -19,3 +19,4 @@ cdef class CreditIndex(CurveList):
cdef vector[TDate] _maturities
cdef TContingentLeg** contingent_legs
cdef TFeeLeg** fee_legs
+ cdef char* calendar
diff --git a/pyisda/credit_index.pyx b/pyisda/credit_index.pyx
index 2d63306..b7ab396 100644
--- a/pyisda/credit_index.pyx
+++ b/pyisda/credit_index.pyx
@@ -229,7 +229,7 @@ cdef class CurveList:
@cython.auto_pickle(False)
cdef class CreditIndex(CurveList):
- def __init__(self, start_date, maturities, list curves, value_date=None):
+ def __init__(self, start_date, maturities, list curves, value_date=None, str calendar="NONE"):
super().__init__(curves, value_date)
self._start_date = pydate_to_TDate(start_date)
for d in maturities:
@@ -239,10 +239,11 @@ cdef class CreditIndex(CurveList):
sizeof(TContingentLeg))
self.fee_legs = <TFeeLeg**> malloc(self._maturities.size() *
sizeof(TFeeLeg))
+ self.calendar = calendar
cdef size_t i
cdef pair[TContingentLeg_ptr, TFeeLeg_ptr] r
for i in range(self._maturities.size()):
- r = get_legs(self._maturities[i], self._start_date)
+ r = get_legs(self._maturities[i], self._start_date, self.calendar)
self.contingent_legs[i] = r.first
self.fee_legs[i] = r.second
@@ -399,7 +400,7 @@ cdef class CreditIndex(CurveList):
int i = get_maturity_index(maturity_c, self._maturities)
if i == -1:
- legs = get_legs(maturity_c, self._start_date)
+ legs = get_legs(maturity_c, self._start_date, self.calendar)
else:
legs.first = self.contingent_legs[i]
legs.second = self.fee_legs[i]
@@ -445,7 +446,7 @@ cdef class CreditIndex(CurveList):
i = get_maturity_index(maturity_c, self._maturities)
if i == -1:
legs = get_legs(maturity_c,
- self._start_date)
+ self._start_date, self.calendar)
else:
legs.first = self.contingent_legs[i]
legs.second = self.fee_legs[i]
@@ -460,7 +461,7 @@ cdef class CreditIndex(CurveList):
i = get_maturity_index(maturity_c, self._maturities)
if i == -1:
legs = get_legs(maturity_c,
- self._start_date)
+ self._start_date, self.calendar)
else:
legs.first = self.contingent_legs[i]
legs.second = self.fee_legs[i]
@@ -578,7 +579,7 @@ cdef class CreditIndex(CurveList):
self._maturities[i] = pydate_to_TDate(val[i])
free(self.contingent_legs[i])
JpmcdsFeeLegFree(self.fee_legs[i])
- r = get_legs(self._maturities[i], self._start_date)
+ r = get_legs(self._maturities[i], self._start_date, self.calendar)
self.contingent_legs[i] = r.first
self.fee_legs[i] = r.second
@@ -826,7 +827,7 @@ cdef inline int get_maturity_index(TDate maturity, const vector[TDate]& maturiti
return i
cdef pair[TContingentLeg_ptr, TFeeLeg_ptr] get_legs(TDate maturity,
- TDate start_date) nogil:
+ TDate start_date, char* cal) nogil:
cdef:
pair[TContingentLeg_ptr, TFeeLeg_ptr] r
TStubMethod stub_type
@@ -844,7 +845,7 @@ cdef pair[TContingentLeg_ptr, TFeeLeg_ptr] get_legs(TDate maturity,
1.0,
ACT_360, # ACT_360
MODIFIED, # MODIFIED
- b'NONE',
+ cal,
True)
return r
diff --git a/pyisda/legs.pyx b/pyisda/legs.pyx
index 06b9680..a04486c 100644
--- a/pyisda/legs.pyx
+++ b/pyisda/legs.pyx
@@ -97,10 +97,11 @@ cdef class FeeLeg:
if True, protection starts at beginning of day. Default to True.
stub : string, one of 'f/s', 'b/s', 'f/l', 'b/l', optional
Default 'f/s'
+ cal : string, default NONE
"""
def __cinit__(self, start_date, end_date, bint pay_accrued_on_default,
double notional, double coupon_rate, str payment_dcc='ACT/360',
- bint protect_start=True, str stub="f/s"):
+ bint protect_start=True, str stub="f/s", str cal="NONE"):
cdef TStubMethod stub_type
@@ -116,7 +117,7 @@ cdef class FeeLeg:
coupon_rate,
dcc(payment_dcc),
MODIFIED,
- b'NONE',
+ cal,
protect_start)
if self._thisptr is NULL:
raise ValueError