summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillaume Horel <guillaume.horel@serenitascapital.com>2016-08-08 14:48:43 -0400
committerGuillaume Horel <guillaume.horel@serenitascapital.com>2016-08-08 14:48:43 -0400
commit508c1718153fea5c9e8d96bd44b7fd14c190a9fd (patch)
tree80ccc99f4d8b9868f72b51e24e20bf9494d7d4aa
parent6775225558707dd04fc3734dcfa830cb2ff1230a (diff)
downloadpyisda-508c1718153fea5c9e8d96bd44b7fd14c190a9fd.tar.gz
add expected_forward_curve method
-rw-r--r--pyisda/curve.pyx25
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.