aboutsummaryrefslogtreecommitdiffstats
path: root/python/swaption.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/swaption.py')
-rw-r--r--python/swaption.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/python/swaption.py b/python/swaption.py
index c713e617..49be1339 100644
--- a/python/swaption.py
+++ b/python/swaption.py
@@ -21,6 +21,16 @@ serenitasdb = dbconn('serenitasdb')
class Index():
""" minimal class to represent a credit index """
def __init__(self, start_date, end_date, recovery, fixed_rate):
+ """
+ start_date : :class:`datetime.date`
+ index start_date (Could be issue date, or last imm date)
+ end_date : :class:`datetime.date`
+ index last date
+ recovery :
+ recovery rate (between 0 and 1)
+ fixed_rate :
+ fixed coupon (in bps)
+ """
self.fixed_rate = fixed_rate
self.notional = 1
self._start_date = start_date
@@ -65,7 +75,7 @@ class Index():
dl_pv = self._default_leg.pv(
trade_date, step_in_date, value_date, yc, sc, self.recovery)
- return self.notional*(dl_pv - clean_forward_annuity * self.fixed_rate), clean_forward_annuity
+ return self.notional*(dl_pv - clean_forward_annuity * self.fixed_rate*1e-4), clean_forward_annuity
@property
def spread(self):
@@ -89,16 +99,16 @@ class Index():
@property
def pv(self):
- return self.notional * (self._dl_pv - self._risky_annuity * self.fixed_rate)
+ return self.notional * (self._dl_pv - self._risky_annuity * self.fixed_rate*1e-4)
@property
def clean_pv(self):
- accrued = self.notional * self._accrued * self.fixed_rate
+ accrued = self.notional * self._accrued * self.fixed_rate*1e-4
return self.pv + accrued
@property
def risky_annuity(self):
- return self._risky_annuity
+ return self._risky_annuity - self._accrued
@property
def trade_date(self):
@@ -128,7 +138,7 @@ class Index():
else:
recovery = 0.4 if index.lower() == "ig" else 0.3
start_date = prev_immdate(pd.Timestamp(trade_date)).date()
- instance = cls(start_date, maturity, recovery, coupon*1e-4)
+ instance = cls(start_date, maturity, recovery, coupon)
instance.trade_date = trade_date
return instance
@@ -136,7 +146,7 @@ class Index():
return """Notional: {}
Maturity Date: {}
Coupon (bp): {}
-Rec Rate: {}""".format(self.notional, self.end_date, self.fixed_rate*10000,
+Rec Rate: {}""".format(self.notional, self.end_date, self.fixed_rate,
self.recovery)
def year_frac(d1, d2, day_count_conv = "Actual/365"):