aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/analytics/__init__.py8
-rw-r--r--python/analytics/index.py11
-rw-r--r--python/analytics/tranche_basket.py12
-rw-r--r--python/risk/bonds.py4
4 files changed, 27 insertions, 8 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
diff --git a/python/risk/bonds.py b/python/risk/bonds.py
index 9ee98a20..99010740 100644
--- a/python/risk/bonds.py
+++ b/python/risk/bonds.py
@@ -138,7 +138,7 @@ def subprime_risk(pos_date, conn, engine, model_date=None):
# assume beta and ontr is initialized from analytics
hy_equiv=(
df_calc.delta_yield
- / analytics._ontr.risky_annuity
+ / analytics._ontr["HY"].risky_annuity
* analytics._beta["SUBPRIME"]
* 1e2
* df_calc.local_market_value
@@ -235,7 +235,7 @@ def crt_risk(date, dawn_conn, engine, model_version="hpi5_ir3_btm"):
df["curr_ntl"] = df.notional * df.factor
df["hy_equiv"] = (
df.duration_FW
- / analytics._ontr.risky_annuity
+ / analytics._ontr["HY"].risky_annuity
* analytics._beta["CRT"]
* df.curr_ntl
)