diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/analytics/index.py | 7 | ||||
| -rw-r--r-- | python/analytics/option.py | 9 | ||||
| -rw-r--r-- | python/analytics/portfolio.py | 5 |
3 files changed, 12 insertions, 9 deletions
diff --git a/python/analytics/index.py b/python/analytics/index.py index 62b36508..396a1ad8 100644 --- a/python/analytics/index.py +++ b/python/analytics/index.py @@ -120,9 +120,14 @@ class CreditIndex(CreditDefaultSwap): @property def hy_equiv(self): - risk = self.notional * self.risky_annuity / analytics._ontr.risky_annuity + try: + ontr = analytics._ontr + except AttributeError: + return float("nan") + risk = self.notional * self.risky_annuity / ontr.risky_annuity if self.index_type != 'HY': risk *= analytics._beta[self.index_type] + return risk @property def ref(self): diff --git a/python/analytics/option.py b/python/analytics/option.py index 6bde2b26..81ff3bec 100644 --- a/python/analytics/option.py +++ b/python/analytics/option.py @@ -269,18 +269,15 @@ class BlackSwaption(ForwardIndex): self._update() notional_ratio = self.index.notional / self.notional dv01 = self.pv - old_pv - delta = self.index._direction * dv01 * notional_ratio / \ - (self.index.pv - old_index_pv) + delta = dv01 * notional_ratio / (self.index.pv - old_index_pv) self.index.spread = old_spread self._update() return delta @property def hy_equiv(self): - risk = self.delta * abs(self.index.hy_equiv/ \ - self.index.notional) * self.notional - risk *= -1 if self.option_type == 'payer' else 1 - return -risk if self.direction == 'Short' else risk + return self.delta * abs(self.index.hy_equiv/ + self.index.notional) * self.notional @property def T(self): diff --git a/python/analytics/portfolio.py b/python/analytics/portfolio.py index ef1d5578..89210058 100644 --- a/python/analytics/portfolio.py +++ b/python/analytics/portfolio.py @@ -26,7 +26,8 @@ def portf_repr(method): 'Vol': percent, 'Ref': thousands, 'Attach Rho': percent, - 'Detach Rho': percent}, + 'Detach Rho': percent, + 'HY Equiv': thousands}, 'index': False} if method == 'string': kwargs['line_width'] = 100 @@ -152,7 +153,7 @@ class Portfolio: """returns the equivalent protection notional makes sense only where there is a single index.""" - return sum([getattr(t, 'delta', -t._direction) * t.notional for t in self.trades]) + return sum([getattr(t, 'delta', t._direction) * t.notional for t in self.trades]) @property def gamma(self): |
