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.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/python/analytics/tranche_basket.py b/python/analytics/tranche_basket.py
index fafc2d70..795eab4d 100644
--- a/python/analytics/tranche_basket.py
+++ b/python/analytics/tranche_basket.py
@@ -21,7 +21,7 @@ class TrancheBasket(BasketIndex):
super().__init__(index_type, series, [tenor], value_date=value_date)
self.tenor = tenor
index_desc = self.index_desc.reset_index('maturity').set_index('tenor')
- self.maturity = index_desc.loc[tenor].maturity
+ self.maturity = index_desc.loc[tenor].maturity.date()
self._get_tranche_quotes(value_date)
self.K_orig = np.hstack((0., self.tranche_quotes.detach)) / 100
self.K = adjust_attachments(self.K_orig, self.cumloss, self.factor)
@@ -35,10 +35,12 @@ class TrancheBasket(BasketIndex):
1, self.yc, self.maturity)
if isinstance(value_date, datetime.datetime):
value_date = value_date.date()
- self.tranche_quotes = get_tranche_quotes(self.index_type, self.series,
- self.tenor, value_date)
- if self.tranche_quotes.empty:
- raise ValueError(f"no tranche quotes for day {value_date}")
+ df = get_tranche_quotes(self.index_type, self.series,
+ self.tenor, value_date)
+ if df.empty:
+ raise ValueError
+ else:
+ self.tranche_quotes = df
if self.index_type == "HY":
self.tranche_quotes['quotes'] = 1 - self.tranche_quotes.trancheupfrontmid / 100
else:
@@ -77,7 +79,13 @@ class TrancheBasket(BasketIndex):
@value_date.setter
def value_date(self, d: pd.Timestamp):
BasketIndex.value_date.__set__(self, d)
- self._get_tranche_quotes(d)
+ try:
+ self._get_tranche_quotes(d)
+ except ValueError as e:
+ self._accrued = np.array([cds_accrued(self.value_date, r)
+ for r in self.tranche_quotes.running])
+ raise ValueError(f"no tranche quotes availabe for date {d}") from e
+
def tranche_factors(self):
return np.diff(self.K) / np.diff(self.K_orig) * self.factor
@@ -105,6 +113,8 @@ class TrancheBasket(BasketIndex):
return 0., 0.
elif ((K == 1. and not complement) or (K == 0. and complement)):
return self.index_pv()[:-1]
+ elif np.isnan(rho):
+ raise ValueError("rho needs to be a real number between 0. and 1.")
else:
if shortened > 0:
default_prob = self.default_prob.values[:,:-shortened]