From 508c1718153fea5c9e8d96bd44b7fd14c190a9fd Mon Sep 17 00:00:00 2001 From: Guillaume Horel Date: Mon, 8 Aug 2016 14:48:43 -0400 Subject: add expected_forward_curve method --- pyisda/curve.pyx | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) 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 = malloc(sizeof(TDate) * (self._ninstr-i)) + cdef double* rates = 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, (self._dates[i] - forward_date_c)/365., + 1, &rates[k]) + i += 1 + yc._thisptr = JpmcdsMakeTCurve(forward_date_c, yc._dates, rates, yc._ninstr, + 1, self._thisptr.fDayCountConv) + return yc + cdef class SpreadCurve(Curve): """ Initialize a SpreadCurve from a list of spreads and maturity. -- cgit v1.2.3-70-g09d2