aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics/tranche_basket.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics/tranche_basket.py')
-rw-r--r--python/analytics/tranche_basket.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/python/analytics/tranche_basket.py b/python/analytics/tranche_basket.py
new file mode 100644
index 00000000..67327e00
--- /dev/null
+++ b/python/analytics/tranche_basket.py
@@ -0,0 +1,36 @@
+from .basket_index import BasketIndex
+from .db import _engine
+from .tranche_functions import credit_schedule
+from index_data import get_singlenames_curves, get_tranche_quotes
+from pyisda.cdsone import upfront_charge
+from pandas.tseries.offsets import BDay
+
+import pandas as pd
+
+class TrancheBasket(BasketIndex):
+ def __init__(self, index_type: str, series: int, tenor: str, *args,
+ trade_date: pd.Timestamp=pd.Timestamp.today().normalize() - BDay()):
+ super().__init__(index_type, series, [tenor], *args, trade_date)
+ self.tranche_quotes = get_tranche_quotes(index_type, series, tenor, trade_date.date())
+ index_desc = self.index_desc.reset_index('maturity').set_index('tenor')
+ self.maturity = index_desc.loc[tenor].maturity
+ self.start_date, self.cs = credit_schedule(trade_date, tenor[:-1], 1, self.yc)
+ self.K_orig = [0] + [q['detach'] for q in self.tranche_quotes]
+ #self.K = adjust_attachments(self.K_orig, self
+
+ def _get_quotes(self):
+ refprice = self.tranche_quotes[0]['indexrefprice']
+ refspread = self.tranche_quotes[0]['indexrefspread']
+ if refprice is not None:
+ return {self.maturity: 1 - refprice / 100}
+ if refspread is not None:
+ return {self.maturity:
+ upfront_charge(self.trade_date, self.value_date, self.start_date,
+ self.step_in_date, self.start_date, self.maturity,
+ self.coupon(self.maturity), self.yc,
+ refspread * 1e-4, self.recovery)}
+ raise ValueError("ref is missing")
+
+ @property
+ def survival_matrix(self):
+ return super().survival_matrix(self.cs.index.values.astype('M8[D]').view('int') + 134774)