aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/analytics/tranche_basket.py13
1 files changed, 7 insertions, 6 deletions
diff --git a/python/analytics/tranche_basket.py b/python/analytics/tranche_basket.py
index d4e2b993..a2d1d67f 100644
--- a/python/analytics/tranche_basket.py
+++ b/python/analytics/tranche_basket.py
@@ -475,7 +475,7 @@ class TrancheBasket(BasketIndex):
curves = self.curves
orig_factor, orig_cumloss = self.factor, self.cumloss
el_orig = self.expected_loss()
- orig_tranche_pvs = self.tranche_factors() * self.tranche_pvs(protection=True).bond_price
+ orig_upfs = self.tranche_factors() * self.tranche_pvs(protection=True).bond_price
r = []
tickers = []
rho_orig = self.rho
@@ -487,17 +487,18 @@ class TrancheBasket(BasketIndex):
self.K = adjust_attachments(self.K_orig, self.cumloss, self.factor)
Korig_eq = np.clip(el_orig / self.expected_loss() * self.K[1:-1], None, .999)
self.rho = np.hstack([np.nan, expit(self._skew(logit(Korig_eq))), np.nan])
- bp = self.tranche_pvs(protection=True).bond_price * self.tranche_factors()
- bp[0] += L / self.K_orig[1]
- r.append(bp)
+ upfs = self.tranche_factors() * self.tranche_pvs(protection=True).bond_price
+ #we allocate the loss to the different tranches
+ loss = np.diff([0, *(min(k, L) for k in self.K[1:])])
+ upfs += loss / np.diff(self.K_orig) * orig_factor
+ r.append(upfs)
tickers.append(curve.ticker)
- breakpoint()
self._factor, self._cumloss = orig_factor, orig_cumloss
self.K = adjust_attachments(self.K_orig, self.cumloss, self.factor)
self.curves = curves
self.rho = rho_orig
r = np.vstack(r)
- r = r - orig_tranche_pvs
+ r = r - orig_upfs
return pd.DataFrame(r, index=tickers, columns=self._row_names)
def tranche_pvs(self, protection=False, complement=False, shortened=0):