diff options
| author | Guillaume Horel <guillaume.horel@gmail.com> | 2018-04-30 14:17:27 -0400 |
|---|---|---|
| committer | Guillaume Horel <guillaume.horel@gmail.com> | 2018-04-30 15:06:13 -0400 |
| commit | 3b8db71b97930ee8f9459f32212107d14c3f4a8a (patch) | |
| tree | 8214c171526b3647ebc61491582918711b689140 | |
| parent | fc8d3158b47c2fecab439795f0338a50fa602cce (diff) | |
| download | pyisda-3b8db71b97930ee8f9459f32212107d14c3f4a8a.tar.gz | |
allow theta to take a date
| -rw-r--r-- | pyisda/credit_index.pyx | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/pyisda/credit_index.pyx b/pyisda/credit_index.pyx index afe441d..d642acf 100644 --- a/pyisda/credit_index.pyx +++ b/pyisda/credit_index.pyx @@ -387,18 +387,28 @@ cdef class CreditIndex(CurveList): return r def theta(self, step_in_date, cash_settle_date, maturity, YieldCurve yc not None, - double recovery_rate, double fixed_rate, double old_pv=nan("")): + double recovery_rate, double fixed_rate, double old_pv=nan(""), + theta_date=None): + """ computes the theta (carry net of roll down) + if theta_date is None, this is 1 year theta, otherwise theta to that date""" cdef: TDate step_in_date_c = pydate_to_TDate(step_in_date) TDate cash_settle_date_c = pydate_to_TDate(cash_settle_date) TDate maturity_c = pydate_to_TDate(maturity) - TDate temp + TDate theta_date_c, temp vector[double] h pair[TContingentLeg_ptr,TFeeLeg_ptr] legs TDateInterval ivl int i - JpmcdsMakeDateInterval(-1, "Y", &ivl) - JpmcdsDtFwdAny(maturity_c, &ivl, &temp) + double carry + if theta_date is None: + JpmcdsMakeDateInterval(-1, "Y", &ivl) + JpmcdsDtFwdAny(maturity_c, &ivl, &temp) + carry = fixed_rate * 365 / 360 + else: + theta_date_c = pydate_to_TDate(theta_date) + temp = maturity_c - (theta_date_c - step_in_date_c) + carry = fixed_rate * (theta_date_c - step_in_date_c) / 360 if temp < step_in_date_c: return nan("") @@ -426,9 +436,10 @@ cdef class CreditIndex(CurveList): legs.first = self.contingent_legs[i] legs.second = self.fee_legs[i] - cdef r = old_pv - pv(self._curves, self.base_date, step_in_date_c, cash_settle_date_c, - yc._thisptr.get(), legs, recovery_rate, fixed_rate, - self._weights, 0., h, self.T, 0) + fixed_rate + cdef r = old_pv - pv(self._curves, self.base_date, step_in_date_c, + cash_settle_date_c, + yc._thisptr.get(), legs, recovery_rate, fixed_rate, + self._weights, 0., h, self.T, 0) + carry if i == -1: free(legs.first) JpmcdsFeeLegFree(legs.second) |
