1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
from cdsone cimport (JpmcdsCdsoneUpfrontCharge,
JpmcdsCdsoneSpread, JpmcdsStringToStubMethod)
from curve cimport ZeroCurve
from date cimport JpmcdsStringToDateInterval, pydate_to_TDate, 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")
|