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.py16
1 files changed, 12 insertions, 4 deletions
diff --git a/python/analytics/tranche_basket.py b/python/analytics/tranche_basket.py
index 7742b5d5..c0145ecc 100644
--- a/python/analytics/tranche_basket.py
+++ b/python/analytics/tranche_basket.py
@@ -833,7 +833,7 @@ class TrancheBasket(BasketIndex):
)
return pd.DataFrame(1 - sm, index=tickers, columns=self.cs.index)
- def tranche_legs(self, K, rho, complement=False, shortened=0):
+ def tranche_legs(self, K, rho, complement=False, shortened=0, zero_recovery=False):
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):
@@ -847,10 +847,14 @@ class TrancheBasket(BasketIndex):
else:
default_prob = self.default_prob.values
cs = self.cs
+ if zero_recovery:
+ recovery_rates = np.zeros(self.weights.size)
+ else:
+ recovery_rates = self.recovery_rates
L, R = BCloss_recov_dist(
default_prob,
self.weights,
- self.recovery_rates,
+ recovery_rates,
rho,
self._Z,
self._w,
@@ -895,7 +899,9 @@ class TrancheBasket(BasketIndex):
r = r - orig_upfs
return pd.DataFrame(r, index=tickers, columns=self._row_names)
- def tranche_pvs(self, protection=False, complement=False, shortened=0):
+ def tranche_pvs(
+ self, protection=False, complement=False, shortened=0, zero_recovery=False
+ ):
""" computes coupon leg, protection leg and bond price.
coupon leg is *dirty*.
@@ -904,7 +910,9 @@ class TrancheBasket(BasketIndex):
pl = np.zeros(self.rho.size)
i = 0
for rho, k in zip(self.rho, self.K):
- cl[i], pl[i] = self.tranche_legs(k, rho, complement, shortened)
+ cl[i], pl[i] = self.tranche_legs(
+ k, rho, complement, shortened, zero_recovery
+ )
i += 1
dK = np.diff(self.K)
pl = np.diff(pl) / dK