diff options
Diffstat (limited to 'python/swaption.py')
| -rw-r--r-- | python/swaption.py | 60 |
1 files changed, 50 insertions, 10 deletions
diff --git a/python/swaption.py b/python/swaption.py index 88ae5543..0323eb5f 100644 --- a/python/swaption.py +++ b/python/swaption.py @@ -47,6 +47,7 @@ class Index(): self._yc = None self._risky_annuity = None self._spread = None + self.name = None @property def start_date(self): @@ -188,6 +189,9 @@ class Index(): return (pv_plus - pv_minus)/2 @property + def jump_to_default(self): + return self.notional * (1 - self.recovery) - self.clean_pv + @property def risky_annuity(self): return self._risky_annuity - self._accrued @@ -228,7 +232,10 @@ class Index(): 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) - instance.name = "{}{} {}".format(index.upper(), series, tenor.upper()) + instance.name = "MARKIT CDX.NA.{}.{} {:%m/%y} ".format( + index.upper(), + series, + maturity) if index.upper() in ["IG", "HY"]: instance.currency = "USD" else: @@ -242,18 +249,51 @@ class Index(): accrued_str = "Accrued ({} Days)".format(self.days_accrued) else: accrued_str = "Accrued ({} Day)".format(self.days_accrued) - s = ["Trade Date\t{}".format(self.trade_date), - "Trd Spread (bp)\t{}\tCoupon (bp)\t{}".format(self.spread, self.fixed_rate), + s = ["{:<20}\t{:>15}".format("CDS Index", colored(self.name, attrs = ['bold'])), + "", + "{:<20}\t{:>15}".format("Trade Date", ('{:%m/%d/%y}'. + format(self.trade_date))), + "{:<20}\t{:>15.2f}\t\t{:<20}\t{:>10,.2f}".format("Trd Sprd (bp)", + self.spread, + "Coupon (bp)", + self.fixed_rate), + "{:<20}\t{:>15.2f}\t\t{:<20}\t{:>10}".format("1st Accr Start", + self.spread, + "Payment Freq", + "Quarterly"), + "{:<20}\t{:>15}\t\t{:<20}\t{:>10.2f}".format("Maturity Date", + ('{:%m/%d/%y}'. + format(self.end_date)), + "Rec Rate", + self.recovery), + "{:<20}\t{:>15}\t\t{:<20}\t{:>10}".format("Bus Day Adj", + "Following", + "Day Count", + "ACT/360"), "", colored("Calculator", attrs = ['bold']), - "{:<20}\t{:>15}".format("Valuation Date", '{:%m/%d/%y}'.format(self.trade_date)), - "{:<20}\t{:>15}".format("Cash Settled On", '{:%m/%d/%y}'.format(self._value_date)), + "{:<20}\t{:>15}".format("Valuation Date", ('{:%m/%d/%y}'. + format(self.trade_date))), + "{:<20}\t{:>15}".format("Cash Settled On", ('{:%m/%d/%y}'. + format(self._value_date))), "", - "{:<20}\t{:>15.8f}\t\t{:<20}\t{:>10,.2f}".format("Price", self.price, "Spread DV01", self.DV01), - "{:<20}\t{:>15,.0f}\t\t{:<20}\t{:>10,.2f}".format("Principal", self.clean_pv, "IR DV01", self.IRDV01), - "{:<20}\t{:>15,.0f}\t\t{:<20}\t{:>10,.2f}".format(accrued_str, self.accrued, "Rec Risk (1%)", self.rec_risk), - "{:<20}\t{:>15,.0f}\t\t{:<20}\t{:>10,.0f}".format("Cash Amount", self.pv, "Def Exposure", - self.notional*(1-self.recovery)-self.clean_pv)] + "{:<20}\t{:>15.8f}\t\t{:<20}\t{:>10,.2f}".format("Price", + self.price, + "Spread DV01", + self.DV01), + "{:<20}\t{:>15,.0f}\t\t{:<20}\t{:>10,.2f}".format("Principal", + self.clean_pv, + "IR DV01", + self.IRDV01), + "{:<20}\t{:>15,.0f}\t\t{:<20}\t{:>10,.2f}".format(accrued_str, + self.accrued, + "Rec Risk (1%)", + self.rec_risk), + "{:<20}\t{:>15,.0f}\t\t{:<20}\t{:>10,.0f}".format("Cash Amount", + self.pv, + "Def Exposure", + self.jump_to_default) + ] return "\n".join(s) def year_frac(d1, d2, day_count_conv = "Actual/365"): |
