aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/analytics/index.py11
-rw-r--r--python/analytics/option.py18
2 files changed, 14 insertions, 15 deletions
diff --git a/python/analytics/index.py b/python/analytics/index.py
index c4a28a7f..fad1ba30 100644
--- a/python/analytics/index.py
+++ b/python/analytics/index.py
@@ -352,7 +352,7 @@ class Index(object):
else:
run = _engine.execute("""SELECT * FROM index_quotes
WHERE index=%s AND series=%s AND tenor=%s AND date=%s""",
- (self.index_type, self.series, self.tenor, self.value_date))
+ (self.index_type, self.series, self.tenor, self.value_date))
rec = run.fetchone()
self.spread = rec.closespread
@@ -372,14 +372,15 @@ class Index(object):
else:
return None
- def shock(self, params, *, spread_shocks, **kwargs):
+ def shock(self, params, *, spread_shock, **kwargs):
r = []
orig_spread = self.spread
- for s in spread_shocks:
- self.spread = orig_spread * ( 1 + s )
+ for ss in spread_shock:
+ self.spread = orig_spread * (1 + ss)
r.append([getattr(self, p) for p in params])
self.spread = orig_spread
- return pd.DataFrame(r, index=spread_shocks)
+ ind = pd.Index(spread_shock, name='spread_shock', fastpath=True)
+ return pd.DataFrame(r, index=ind, columns=params)
@classmethod
def from_name(cls, index=None, series=None, tenor=None, value_date=datetime.date.today(),
diff --git a/python/analytics/option.py b/python/analytics/option.py
index bdc9b6c6..08614ab9 100644
--- a/python/analytics/option.py
+++ b/python/analytics/option.py
@@ -347,24 +347,22 @@ 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
+ def shock(self, params, *, spread_shock, vol_surface, vol_shock, **kwargs):
+ orig_spread, orig_sigma = self.index.spread, self.sigma
r = []
- for s in spread_shock:
- self.spread = orig_spread * (1 + s)
- curr_vol = vol_surface.ev(t, mon)
+ for ss in spread_shock:
+ self.index.spread = orig_spread * (1 + ss)
+ curr_vol = vol_surface.ev(self.T, self.moneyness)
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.index.spread = orig_spread
self.sigma = orig_sigma
return pd.DataFrame.from_records(
r,
columns=params,
- index=pd.MultiIndex.from_product(spread_shock, vol_shock))
+ index=pd.MultiIndex.from_product([spread_shock, vol_shock],
+ names=['spread_shock', 'vol_shock']))
def __repr__(self):
s = ["{:<20}{}".format(self.index.name, self.option_type),