summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pyisda/curve.pyx22
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