diff options
Diffstat (limited to 'python/analytics')
| -rw-r--r-- | python/analytics/__init__.py | 3 | ||||
| -rw-r--r-- | python/analytics/index.py | 2 | ||||
| -rw-r--r-- | python/analytics/scenarios.py | 3 | ||||
| -rw-r--r-- | python/analytics/tranche_basket.py | 5 |
4 files changed, 9 insertions, 4 deletions
diff --git a/python/analytics/__init__.py b/python/analytics/__init__.py index b16c4b71..7fce2295 100644 --- a/python/analytics/__init__.py +++ b/python/analytics/__init__.py @@ -6,9 +6,10 @@ from .basket_index import MarkitBasketIndex from .tranche_basket import DualCorrTranche, TrancheBasket from .ir_swaption import IRSwaption +import datetime def init_ontr(): global _ontr, _beta _ontr = CreditIndex('HY', 31, '5yr') _ontr.mark() - _beta = {'HY': 1, 'IG': .3} + _beta = {'HY': 1, 'IG': .3, 'EU': .22} diff --git a/python/analytics/index.py b/python/analytics/index.py index b6e6d86d..1e6ef140 100644 --- a/python/analytics/index.py +++ b/python/analytics/index.py @@ -116,7 +116,7 @@ class CreditIndex(CreditDefaultSwap): @property def hy_equiv(self): - risk = self.notional * self.risky_annuity / analytics._ontr.risky_annuity + risk = abs(self.notional) * self.risky_annuity / analytics._ontr.risky_annuity if self.index_type != 'HY': risk *= analytics._beta[self.index_type] return -risk if self.direction == 'Buyer' else risk diff --git a/python/analytics/scenarios.py b/python/analytics/scenarios.py index 037f5d9b..ba70cdc1 100644 --- a/python/analytics/scenarios.py +++ b/python/analytics/scenarios.py @@ -28,6 +28,9 @@ def run_swaption_scenarios(swaption, date_range, spread_shock, vol_shock, spreads = swaption.index.spread * (1 + spread_shock) T = swaption.T + if isinstance(vol_surface, dict): + vol_surface = vol_surface[(swaption.index.index_type, swaption.index.series)] + r = [] for date in date_range: swaption.index.value_date = min(swaption.exercise_date, date.date()) diff --git a/python/analytics/tranche_basket.py b/python/analytics/tranche_basket.py index 1af4d4eb..6808220d 100644 --- a/python/analytics/tranche_basket.py +++ b/python/analytics/tranche_basket.py @@ -241,7 +241,7 @@ class DualCorrTranche(): return "\n".join(s) def shock(self, params=['pnl'], *, spread_shock, corr_shock, **kwargs): - orig_rho = self.rho + orig_rho = deepcopy(self.rho) r = [] actual_params = [p for p in params if hasattr(self, p)] orig_curves = self._index.curves @@ -249,7 +249,8 @@ class DualCorrTranche(): self._index.tweak_portfolio(ss, self.maturity, False) for corrs in corr_shock: #also need to map skew - self.rho = orig_rho * (1 + corrs) + for n, rho in enumerate(orig_rho): + self.rho[n] = rho + corrs if rho else rho r.append([getattr(self, p) for p in actual_params]) self._index.curves = orig_curves self.rho = orig_rho |
