diff options
| -rw-r--r-- | python/analytics/index.py | 9 | ||||
| -rw-r--r-- | python/analytics/option.py | 21 |
2 files changed, 29 insertions, 1 deletions
diff --git a/python/analytics/index.py b/python/analytics/index.py index aa93b5ee..c4a28a7f 100644 --- a/python/analytics/index.py +++ b/python/analytics/index.py @@ -372,6 +372,15 @@ class Index(object): else: return None + def shock(self, params, *, spread_shocks, **kwargs): + r = [] + orig_spread = self.spread + for s in spread_shocks: + self.spread = orig_spread * ( 1 + s ) + r.append([getattr(self, p) for p in params]) + self.spread = orig_spread + return pd.DataFrame(r, index=spread_shocks) + @classmethod def from_name(cls, index=None, series=None, tenor=None, value_date=datetime.date.today(), notional=10_000_000, redcode=None, maturity=None): diff --git a/python/analytics/option.py b/python/analytics/option.py index 97475a61..bdc9b6c6 100644 --- a/python/analytics/option.py +++ b/python/analytics/option.py @@ -148,7 +148,7 @@ class BlackSwaption(ForwardIndex): self._strike = g(self.index, self.index.fixed_rate, self.exercise_date, self._G) else: - self._G = g(self.index, K, self.exercise_date) + self._G = g(self.index, self._strike, self.exercise_date) @property def strike(self): @@ -347,6 +347,25 @@ class BlackSwaption(ForwardIndex): return g(self.index, self.index.fixed_rate, self.exercise_date, pv=self._G - pv) + def shock(self, params, *, spread_shock, vol_surface, vol_shock, + vol_time_roll, **kwargs): + orig_spread, orig_sigma = self.spread, self.sigma + if vol_time_roll: + t = self.T + r = [] + for s in spread_shock: + self.spread = orig_spread * (1 + s) + curr_vol = vol_surface.ev(t, mon) + for vs in vol_shock: + self.sigma = curr_vol * ( 1 + vs ) + r.append([getattr(self, p) for p in params]) + self.spread = orig_spread + self.sigma = orig_sigma + return pd.DataFrame.from_records( + r, + columns=params, + index=pd.MultiIndex.from_product(spread_shock, vol_shock)) + def __repr__(self): s = ["{:<20}{}".format(self.index.name, self.option_type), "", |
