aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics')
-rw-r--r--python/analytics/__init__.py3
-rw-r--r--python/analytics/index.py2
-rw-r--r--python/analytics/scenarios.py3
-rw-r--r--python/analytics/tranche_basket.py5
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