aboutsummaryrefslogtreecommitdiffstats
path: root/python/swaption.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/swaption.py')
-rw-r--r--python/swaption.py60
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"):