diff options
| -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 |
