From c34e1e0988738fe697dba5ea628203eea17c24a0 Mon Sep 17 00:00:00 2001 From: Guillaume Horel Date: Wed, 29 Jun 2016 15:44:42 -0400 Subject: add cdsone functions --- cdsone.pyx | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 cdsone.pyx (limited to 'cdsone.pyx') diff --git a/cdsone.pyx b/cdsone.pyx new file mode 100644 index 0000000..cb567f6 --- /dev/null +++ b/cdsone.pyx @@ -0,0 +1,72 @@ +from pyisda.cdsone cimport (JpmcdsCdsoneUpfrontCharge, + JpmcdsCdsoneSpread, JpmcdsStringToStubMethod) +from pyisda.zerocurve cimport ZeroCurve +from pyisda.date cimport JpmcdsStringToDateInterval, pydate_to_TDate +from pyisda.yearfrac cimport dcc + +cdef int SUCCESS = 0 + +def upfront_charge(date, value_date, benchmark_start_date, stepin_date, + start_date, end_date, double coupon_rate, + ZeroCurve zc, + double spread, + double recovery_rate, + TBoolean pay_accrued_at_start = True, + TBoolean pay_accrued_on_default = True): + + cdef: + TDate today = pydate_to_TDate(date) + TDate value_date_c = pydate_to_TDate(value_date) + TDate benchmark_start_date_c = pydate_to_TDate(benchmark_start_date) + TDate stepin_date_c = pydate_to_TDate(stepin_date) + TDate start_date_c = pydate_to_TDate(start_date) + TDate end_date_c = pydate_to_TDate(end_date) + double result + TStubMethod stub + TDateInterval ivl + char* routine = "upfront_charge" + + if JpmcdsStringToStubMethod(b"f/s", &stub) != SUCCESS: + raise ValueError("can't convert stub") + if JpmcdsStringToDateInterval(b"3M", routine, &ivl) != SUCCESS: + raise ValueError("can't convert to date interval") + if JpmcdsCdsoneUpfrontCharge(today, value_date_c, benchmark_start_date_c, stepin_date_c, + start_date_c, end_date_c, coupon_rate, pay_accrued_on_default, + &ivl, &stub, + dcc("ACT/360"), b'F', b"None", zc._thisptr, spread, recovery_rate, + pay_accrued_at_start, &result) == SUCCESS: + return result + else: + raise ValueError("computation failed") + +def spread_from_upfront(date, value_date, benchmark_start_date, stepin_date, + start_date, end_date, double coupon_rate, + ZeroCurve zc, + double upfront, + double recovery_rate, + TBoolean pay_accrued_at_start = True, + TBoolean pay_accrued_on_default = True): + cdef: + TDate today = pydate_to_TDate(date) + TDate value_date_c = pydate_to_TDate(value_date) + TDate benchmark_start_date_c = pydate_to_TDate(benchmark_start_date) + TDate stepin_date_c = pydate_to_TDate(stepin_date) + TDate start_date_c = pydate_to_TDate(start_date) + TDate end_date_c = pydate_to_TDate(end_date) + double result + TStubMethod stub + TDateInterval ivl + char* routine = "upfront_charge" + + if JpmcdsStringToStubMethod(b"f/s", &stub) != SUCCESS: + raise ValueError("can't convert stub") + if JpmcdsStringToDateInterval(b"3M", routine, &ivl) != SUCCESS: + raise ValueError("can't convert to date interval") + if JpmcdsCdsoneSpread(today, value_date_c, benchmark_start_date_c, stepin_date_c, + start_date_c, end_date_c, coupon_rate, pay_accrued_on_default, + &ivl, &stub, + dcc("ACT/360"), b'F', b"None", zc._thisptr, upfront, recovery_rate, + pay_accrued_at_start, &result) == SUCCESS: + return result + else: + raise ValueError("computation failed") -- cgit v1.2.3-70-g09d2