diff options
| -rw-r--r-- | pyisda/curve.pyx | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/pyisda/curve.pyx b/pyisda/curve.pyx index 55fdada..52ddab7 100644 --- a/pyisda/curve.pyx +++ b/pyisda/curve.pyx @@ -170,6 +170,31 @@ cdef class YieldCurve(Curve): cdef size_t i return [TDate_to_pydate(self._dates[i]) for i in range(self._ninstr)] + def expected_forward_curve(self, forward_date): + """ returns the expected forward curve """ + cdef TDate forward_date_c = pydate_to_TDate(forward_date) + cdef YieldCurve yc = YieldCurve.__new__(YieldCurve) + cdef size_t i = 0 + while self._dates[i] < forward_date_c: + i += 1 + yc._ninstr = self._ninstr - i + yc._dates = <TDate*>malloc(sizeof(TDate) * (self._ninstr-i)) + cdef double* rates = <double*>malloc(sizeof(double) * yc._ninstr) + cdef size_t k + cdef double df + cdef double df_forward_date = JpmcdsZeroPrice( + self._thisptr, forward_date_c) + for k in range(yc._ninstr): + yc._dates[k] = self._dates[i] + df = JpmcdsZeroPrice(self._thisptr, self._dates[i])/df_forward_date + JpmcdsDiscountToRateYearFrac( + df, <double>(self._dates[i] - forward_date_c)/365., + <double>1, &rates[k]) + i += 1 + yc._thisptr = JpmcdsMakeTCurve(forward_date_c, yc._dates, rates, yc._ninstr, + <double>1, self._thisptr.fDayCountConv) + return yc + cdef class SpreadCurve(Curve): """ Initialize a SpreadCurve from a list of spreads and maturity. |
