summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pyisda/credit_index.pyx23
1 files changed, 12 insertions, 11 deletions
diff --git a/pyisda/credit_index.pyx b/pyisda/credit_index.pyx
index 1474dd5..e8db882 100644
--- a/pyisda/credit_index.pyx
+++ b/pyisda/credit_index.pyx
@@ -154,7 +154,6 @@ cdef class CreditIndex(CurveList):
TDate step_in_date_c = pydate_to_TDate(step_in_date)
TDate value_date_c = pydate_to_TDate(value_date)
np.npy_intp[2] n = [self.curves.size(), self.maturities.size()]
- double accrued
size_t i = 0, j = 0
np.ndarray[np.float64_t,ndim=2] cl_pv = np.PyArray_EMPTY(2, n, np.NPY_DOUBLE, 0)
np.ndarray[np.float64_t,ndim=2] fl_pv = np.PyArray_EMPTY(2, n, np.NPY_DOUBLE, 0)
@@ -194,13 +193,17 @@ cdef class CreditIndex(CurveList):
i += 1
return pd.concat({'duration':
- pd.DataFrame(fl_pv - accrued,
+ pd.DataFrame(fl_pv,
columns=d.view('M8[D]'),
index=tickers),
'protection_pv':
pd.DataFrame(cl_pv,
columns=d.view('M8[D]'),
index=tickers)})
+ def accrued(self):
+ cdef double accrued
+ FeeLegAI(self.fee_legs[0], self.base_date, &accrued)
+ return accrued
@cython.boundscheck(False)
def pv(self, step_in_date, value_date, maturity, YieldCurve yc not None,
@@ -212,7 +215,6 @@ cdef class CreditIndex(CurveList):
TDate maturity_c = pydate_to_TDate(maturity)
unsigned long mask = 0
vector[double] h
- double accrued
pair[TContingentLeg,TFeeLeg] legs = get_legs(maturity_c,
self.start_date,
self.contingent_legs,
@@ -224,13 +226,12 @@ cdef class CreditIndex(CurveList):
if mask == 0:
raise ValueError("maturity is not correct")
h = vector[double](self.T.size())
- FeeLegAI(self.fee_legs[0], self.base_date, &accrued)
r = pv(self.curves, self.base_date, step_in_date_c, value_date_c,
yc._thisptr.get(), legs, recovery_rate, fixed_rate,
self.weights, epsilon, h, self.T, mask)
- return r - fixed_rate * accrued
+ return r
def theta(self, step_in_date, value_date, maturity, YieldCurve yc not None,
double recovery_rate, double fixed_rate):
@@ -250,6 +251,11 @@ cdef class CreditIndex(CurveList):
recovery_rate, fixed_rate, self.weights,
0., h, self.T, 0)
maturity_c = pydate_to_TDate(maturity - relativedelta(years=1))
+ legs = get_legs(maturity_c,
+ self.start_date,
+ self.contingent_legs,
+ self.fee_legs,
+ self.maturities)
return pv(self.curves, self.base_date, step_in_date_c, value_date_c,
yc._thisptr.get(), legs, recovery_rate, fixed_rate,
self.weights, 0., h, self.T, 0) - \
@@ -262,11 +268,6 @@ cdef class CreditIndex(CurveList):
TDate step_in_date_c = pydate_to_TDate(step_in_date)
TDate value_date_c = pydate_to_TDate(value_date)
TDate maturity_c = pydate_to_TDate(maturity)
- double accrued
-
- FeeLegAI(self.fee_legs[0], self.base_date, &accrued)
-
- cdef:
TFeeLeg* fl
size_t i
@@ -293,7 +294,7 @@ cdef class CreditIndex(CurveList):
&fl_pv)
r += self.weights[i] * fl_pv
i += 1
- return r - accrued
+ return r
@property
def maturities(self):