diff options
| author | Guillaume Horel <guillaume.horel@gmail.com> | 2023-05-31 15:15:27 -0400 |
|---|---|---|
| committer | Guillaume Horel <guillaume.horel@gmail.com> | 2023-05-31 15:15:27 -0400 |
| commit | 8c8a4092458029b4c619eb0603ee21c639702a2b (patch) | |
| tree | 7bde1bd760da28782c26672b2903e362d299f292 | |
| parent | 45a65c94c783fef388349a124541559fa2d9a804 (diff) | |
| download | pyisda-8c8a4092458029b4c619eb0603ee21c639702a2b.tar.gz | |
handle case of Annual basis
| -rw-r--r-- | pyisda/curve.pyx | 22 |
1 files 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 <Basis>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 <Basis>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(<char*>forward_curve, char_free) return yc |
