diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/analytics/tranche_basket.py | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/python/analytics/tranche_basket.py b/python/analytics/tranche_basket.py index 8765b1c0..9ce787f2 100644 --- a/python/analytics/tranche_basket.py +++ b/python/analytics/tranche_basket.py @@ -838,7 +838,7 @@ class TrancheBasket(BasketIndex): if (K == 0.0 and not complement) or (K == 1.0 and complement): return 0.0, 0.0 elif (K == 1.0 and not complement) or (K == 0.0 and complement): - return self.index_pv()[:-1] + return self.index_pv(zero_recovery=zero_recovery)[:-1] elif np.isnan(rho): raise ValueError("rho needs to be a real number between 0. and 1.") else: @@ -935,7 +935,7 @@ class TrancheBasket(BasketIndex): bp = 1 + pl + cl - self._accrued return self._Legs(cl, pl, bp) - def index_pv(self, discounted=True, shortened=0): + def index_pv(self, discounted=True, shortened=0, zero_recovery=True): if shortened > 0: DP = self.default_prob.values[:, -shortened] df = self.cs.df.values[:-shortened] @@ -944,7 +944,10 @@ class TrancheBasket(BasketIndex): DP = self.default_prob.values df = self.cs.df.values coupons = self.cs.coupons - ELvec = self.weights * (1 - self.recovery_rates) @ DP + if zero_recovery: + ELvec = self.weights @ DP + else: + ELvec = self.weights * (1 - self.recovery_rates) @ DP size = 1 - self.weights @ DP sizeadj = 0.5 * (np.hstack((1.0, size[:-1])) + size) if not discounted: |
