diff options
Diffstat (limited to 'python/analytics')
| -rw-r--r-- | python/analytics/option.py | 7 |
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]) |
