diff options
| -rw-r--r-- | curve.pxd | 13 | ||||
| -rw-r--r-- | curve.pyx | 23 |
2 files changed, 35 insertions, 1 deletions
@@ -77,10 +77,23 @@ cdef extern from "isda/cds.h": cdef extern from "isda/tcurve.h": void JpmcdsFreeTCurve(TCurve* curve) + TCurve* JpmcdsMakeTCurve(TDate baseDate, + TDate *dates, + double *rates, + int numPts, + double basis, + long dayCountConv); cdef extern from "isda/cxzerocurve.h": double JpmcdsZeroPrice(TCurve* curve, TDate date) +cdef enum Basis: + CONTINUOUS = 5000 + DISCOUNT_RATE = 512 + SIMPLE_BASIS = 0 + ANNUAL_BASIS = 1 + DISCOUNT_FACTOR = -2 + cdef class Curve: cdef TCurve* _thisptr @@ -1,12 +1,17 @@ from libc.stdlib cimport malloc, free -from curve cimport JpmcdsBuildIRZeroCurve, JpmcdsZeroPrice +from curve cimport (JpmcdsBuildIRZeroCurve, JpmcdsZeroPrice, JpmcdsMakeTCurve, + Basis, CONTINUOUS) from date cimport (JpmcdsStringToDateInterval, pydate_to_TDate, dcc, JpmcdsDateIntervalToFreq, JpmcdsDateFwdThenAdjust, TDate_to_pydate, JpmcdsDateFromBusDaysOffset) from date import dcc_tostring from cdsone cimport JpmcdsStringToStubMethod, TStubMethod + cdef int SUCCESS = 0 +cdef extern from "limits.h": + long LONG_MAX + cpdef public enum BadDay: FOLLOW = <long>'F' PREVIOUS = <long>'P' @@ -135,3 +140,19 @@ cdef class SpreadCurve(Curve): &stub_type, <long>'M', b'NONE') + + @classmethod + def from_flat_hazard(cls, base_date, double rate, Basis basis = CONTINUOUS, + str day_count_conv = 'Actual/365F'): + cdef TDate base_date_c = pydate_to_TDate(base_date) + cdef SpreadCurve sc = cls.__new__(cls) + cdef TDate max_date = LONG_MAX + cdef TDate* dates = <TDate*>malloc(sizeof(TDate)) + + cdef double* rates = <double*>malloc(sizeof(double)) + dates[0] = max_date + rates[0] = rate + + sc._thisptr = JpmcdsMakeTCurve(base_date_c, dates, rates, 1, + <double>basis, dcc(day_count_conv)) + return sc |
