aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/analytics/tranche_basket.py22
1 files changed, 15 insertions, 7 deletions
diff --git a/python/analytics/tranche_basket.py b/python/analytics/tranche_basket.py
index 07af20a1..fce6cfe6 100644
--- a/python/analytics/tranche_basket.py
+++ b/python/analytics/tranche_basket.py
@@ -936,7 +936,11 @@ class TrancheBasket(BasketIndex):
def skew(self) -> Skew:
return Skew(self.expected_loss(), self._skew)
- def tranche_factors(self):
+ def tranche_factors(self, zero_recovery=False):
+ if zero_recovery:
+ K = adjust_attachments(self.K_orig, 1 - self.factor, self.factor)
+ else:
+ K = self.K
return np.diff(self.K) / np.diff(self.K_orig) * self.factor
def _get_quotes(self, spread=None):
@@ -1057,15 +1061,19 @@ class TrancheBasket(BasketIndex):
coupon leg is *dirty*.
bond price is *clean*."""
- cl = np.zeros(self.rho.size)
- pl = np.zeros(self.rho.size)
+ cl = np.zeros_like(self.rho)
+ pl = np.zeros_like(self.rho)
i = 0
- for rho, k in zip(self.rho, self.K):
+ if zero_recovery:
+ K = adjust_attachments(self.K_orig, 1 - self.factor, self.factor)
+ else:
+ K = self.K
+ for rho, k in zip(self.rho, K):
cl[i], pl[i] = self.tranche_legs(
k, rho, complement, shortened, zero_recovery
)
i += 1
- dK = np.diff(self.K)
+ dK = np.diff(K)
pl = np.diff(pl) / dK
cl = np.diff(cl) / dK * self.tranche_quotes.running.values
if complement:
@@ -1210,10 +1218,10 @@ class TrancheBasket(BasketIndex):
indexbp = np.empty(len(index_list))
for i, index in enumerate(index_list):
- indexbp[i] = index.index_pv(zero_recovery=zero_recovery).bond_price
+ indexbp[i] = index.index_pv(zero_recovery=False).bond_price
bp[i] = index.tranche_pvs(zero_recovery=zero_recovery).bond_price
- factor = self.tranche_factors() / self.factor
+ factor = self.tranche_factors(zero_recovery) / self.factor
deltas = (bp[1] - bp[2]) / (indexbp[1] - indexbp[2]) * factor
deltasplus = (bp[3] - bp[0]) / (indexbp[3] - indexbp[0]) * factor
gammas = (deltasplus - deltas) / (indexbp[1] - indexbp[0]) / 100