From 622991036fed90d515ca04a52085c001e2fdd76e Mon Sep 17 00:00:00 2001 From: Guillaume Horel Date: Thu, 13 Oct 2022 21:13:52 -0400 Subject: add bump method for yieldcurve --- pyisda/curve.pyx | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/pyisda/curve.pyx b/pyisda/curve.pyx index 38ec250..e805e86 100644 --- a/pyisda/curve.pyx +++ b/pyisda/curve.pyx @@ -488,6 +488,32 @@ cdef class YieldCurve(Curve): basis, dcc(day_count_conv)), JpmcdsFreeTCurve) return yc + def bump(self, epsilon): + cdef: + YieldCurve yc = YieldCurve.__new__(YieldCurve) + const TCurve* curve = get_TCurve(self) + TCurve* new_curve = malloc(sizeof(TCurve)) + TRatePt *ptr1, *ptr2 + int N = curve.fNumItems + int i + + new_curve.fNumItems = N + new_curve.fBaseDate = curve.fBaseDate + new_curve.fBasis = curve.fBasis + new_curve.fArray = malloc(N * sizeof(TRatePt)) + new_curve.fDayCountConv = curve.fDayCountConv + ptr1 = curve.fArray + ptr2 = new_curve.fArray + for i in range(N): + ptr2.fDate = ptr1.fDate + ptr2.fRate = ptr1.fRate + epsilon + preinc(ptr1) + preinc(ptr2) + + yc.dates = vector[TDate](self.dates) + yc._thisptr.reset(new_curve, JpmcdsFreeTCurve) + return yc + def discount_factor(self, d2, d1=None): """ computes the discount factor at a given date. -- cgit v1.2.3-70-g09d2