aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics/option.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics/option.py')
-rw-r--r--python/analytics/option.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/python/analytics/option.py b/python/analytics/option.py
index 065de803..eecb9997 100644
--- a/python/analytics/option.py
+++ b/python/analytics/option.py
@@ -332,13 +332,18 @@ class BlackSwaption(ForwardIndex):
pv=self._G - pv)
def shock(self, params, *, spread_shock, vol_surface, vol_shock, **kwargs):
+ """scenarios based on spread and vol shocks, vol surface labeled in the dict"""
orig_spread, orig_sigma = self.index.spread, self.sigma
r = []
actual_params = [p for p in params if hasattr(self, p)]
+ vol_surface = vol_surface[self.index.index_type + self.index.series]
for ss in spread_shock:
self.index.spread = orig_spread * (1 + ss)
# TODO: Vol floored at 20% for now.
- curr_vol = max(.2, vol_surface.ev(self.T, math.log(self.moneyness)))
+ if isinstance(vol_surface, SmoothBivariateSpline):
+ curr_vol = max(.2, vol_surface.ev(self.T, math.log(self.moneyness)))
+ else:
+ curr_vol = max(.2, vol_surface(self.T, math.log(self.moneyness)))
for vs in vol_shock:
self.sigma = curr_vol * (1 + vs)
r.append([getattr(self, p) for p in actual_params])