summaryrefslogtreecommitdiffstats
path: root/cdsone.pyx
diff options
context:
space:
mode:
Diffstat (limited to 'cdsone.pyx')
-rw-r--r--cdsone.pyx72
1 files changed, 72 insertions, 0 deletions
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")