aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics')
-rw-r--r--python/analytics/index.py7
-rw-r--r--python/analytics/option.py9
-rw-r--r--python/analytics/portfolio.py5
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):