diff options
| -rw-r--r-- | pyisda/curve.pyx | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/pyisda/curve.pyx b/pyisda/curve.pyx index c2624c2..57ef1f0 100644 --- a/pyisda/curve.pyx +++ b/pyisda/curve.pyx @@ -541,6 +541,7 @@ cdef class SpreadCurve(Curve): cdef TStubMethod stub_type if JpmcdsStringToStubMethod(b"f/s", &stub_type) != 0: + free(end_dates_c) raise ValueError("can't convert stub") cdef int result @@ -564,6 +565,7 @@ cdef class SpreadCurve(Curve): free(end_dates_c) cdef list r = [] if result != SUCCESS: + free(par_spreads) raise ValueError("can't compute par spread") else: for i in range(n_dates): @@ -582,24 +584,22 @@ cdef class SpreadCurve(Curve): def fill_curve(SpreadCurve sc, TDate[:] end_dates): cdef size_t n_dates = end_dates.shape[0] - cdef double* rates = <double*>malloc(n_dates * sizeof(TDate)) - cdef size_t i cdef TDate base_date = sc._thisptr.get().fBaseDate cdef double t + cdef TCurve* curve = JpmcdsNewTCurve(sc._thisptr.get().fBaseDate, + n_dates, + 5000., + 2) + cdef TRatePt* it = curve.fArray + for i in range(n_dates): t = (end_dates[i] - base_date)/365. - rates[i] = -log(JpmcdsForwardZeroPrice(sc._thisptr.get(), base_date, - end_dates[i])) / t + it[i].fDate = end_dates[i] + it[i].fRate = -log(JpmcdsForwardZeroPrice(sc._thisptr.get(), base_date, + end_dates[i])) / t - cdef TCurve* curve = JpmcdsMakeTCurve(sc._thisptr.get().fBaseDate, - &end_dates[0], - rates, - n_dates, - 5000., - 2) cdef SpreadCurve sc_new = SpreadCurve.__new__(SpreadCurve) sc_new._thisptr = make_shared(curve) sc_new.ticker = sc.ticker - free(rates) return sc_new |
