diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/analytics/tranche_basket.py | 13 |
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): |
