diff options
Diffstat (limited to 'python/analytics')
| -rw-r--r-- | python/analytics/__init__.py | 8 | ||||
| -rw-r--r-- | python/analytics/index.py | 11 | ||||
| -rw-r--r-- | python/analytics/tranche_basket.py | 12 |
3 files changed, 25 insertions, 6 deletions
diff --git a/python/analytics/__init__.py b/python/analytics/__init__.py index 301b6f2a..7df8df50 100644 --- a/python/analytics/__init__.py +++ b/python/analytics/__init__.py @@ -42,8 +42,12 @@ def on_the_run(index: str, value_date: datetime.date = datetime.date.today()) -> def init_ontr(value_date: datetime.date = datetime.date.today()) -> None: global _ontr, _beta - _ontr = CreditIndex("HY", on_the_run("HY", value_date), "5yr", value_date) - _ontr.mark() + _ontr = { + k: CreditIndex(k, on_the_run(k, value_date), "5yr", value_date) + for k in ("HY", "IG", "EU", "XO") + } + for k, index in _ontr.items(): + index.mark() r = dawn_engine.execute( "SELECT DISTINCT ON (asset_class) " "asset_class, beta FROM beta " diff --git a/python/analytics/index.py b/python/analytics/index.py index 7f30c431..ab32fa89 100644 --- a/python/analytics/index.py +++ b/python/analytics/index.py @@ -178,10 +178,17 @@ class CreditIndex(CreditDefaultSwap): @property def hy_equiv(self): try: - ontr = analytics._ontr + ontr = analytics._ontr[self.index_type] except AttributeError: return float("nan") - risk = self.notional * self.risky_annuity / ontr.risky_annuity + # hy_equiv is on current notional of the on the run + risk = ( + self.notional + * self.risky_annuity + / ontr.risky_annuity + * self.factor + * self._fx + ) if self.index_type != "HY": risk *= analytics._beta[self.index_type] return risk diff --git a/python/analytics/tranche_basket.py b/python/analytics/tranche_basket.py index 63daddff..5f19451b 100644 --- a/python/analytics/tranche_basket.py +++ b/python/analytics/tranche_basket.py @@ -719,14 +719,22 @@ class DualCorrTranche: @property def hy_equiv(self): + # hy_equiv is on current notional. + if self.index_type == "BS": + ontr = analytics._ontr["HY"] + else: + ontr = analytics._ontr[self.index_type] risk = ( self.notional * self.delta * float(self._index.duration()) - / analytics._ontr.risky_annuity + * self._index.factor + / ontr.risky_annuity ) - if self.index_type not in ["HY", "BS"]: + if self.index_type not in ("HY", "BS"): risk *= analytics._beta[self.index_type] + if self.index_type == "BS": + risk *= self._index.spread(self._index.maturities[0]) / ontr.spread return risk @property |
