diff options
| -rw-r--r-- | python/swaption.py | 22 |
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"): |
