From 8c8a4092458029b4c619eb0603ee21c639702a2b Mon Sep 17 00:00:00 2001 From: Guillaume Horel Date: Wed, 31 May 2023 15:15:27 -0400 Subject: handle case of Annual basis --- pyisda/curve.pyx | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/pyisda/curve.pyx b/pyisda/curve.pyx index c0b571a..ccd83f7 100644 --- a/pyisda/curve.pyx +++ b/pyisda/curve.pyx @@ -593,12 +593,22 @@ cdef class YieldCurve(Curve): arr = forward_curve.fArray r0 = JpmcdsZeroRate(curve, forward_date_c) t0 = forward_date_c - curve.fBaseDate - while i < n: - arr.fDate = curve.fArray[i].fDate - t1 = arr.fDate - curve.fBaseDate - arr.fRate = (t1 * curve.fArray[i].fRate - t0 * r0) / (t1 - t0) - i += 1 - preinc(arr) + if curve.fBasis == Basis.ANNUAL_BASIS: + while i < n: + arr.fDate = curve.fArray[i].fDate + t1 = arr.fDate - curve.fBaseDate + arr.fRate = (t1 * log1p(curve.fArray[i].fRate) - t0 * r0) / (t1 - t0) + i += 1 + preinc(arr) + elif curve.fBasis == Basis.CONTINUOUS: + while i < n: + arr.fDate = curve.fArray[i].fDate + t1 = arr.fDate - curve.fBaseDate + arr.fRate = (t1 * curve.fArray[i].fRate - t0 * r0) / (t1 - t0) + i += 1 + preinc(arr) + else: + raise ValueError("expected forward curve not implemented") yc.buf.reset(forward_curve, char_free) return yc -- cgit v1.2.3-70-g09d2