summaryrefslogtreecommitdiffstats
path: root/cdsone.pyx
diff options
context:
space:
mode:
authorGuillaume Horel <guillaume.horel@serenitascapital.com>2016-06-29 15:44:42 -0400
committerGuillaume Horel <guillaume.horel@serenitascapital.com>2016-06-29 15:44:42 -0400
commitc34e1e0988738fe697dba5ea628203eea17c24a0 (patch)
tree5684f0b8eb8737ecc2bb97b20c5477f07eac7d96 /cdsone.pyx
parentf6ee33b57d5f9dc82b06c9f9ccbf8528fc3b783f (diff)
downloadpyisda-c34e1e0988738fe697dba5ea628203eea17c24a0.tar.gz
add cdsone functions
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")