aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics')
-rw-r--r--python/analytics/scenarios.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/python/analytics/scenarios.py b/python/analytics/scenarios.py
index f1763100..9564556b 100644
--- a/python/analytics/scenarios.py
+++ b/python/analytics/scenarios.py
@@ -19,12 +19,12 @@ def run_swaption_scenarios(swaption, date_range, spread_shock, vol_shock,
"""
r = []
swaption = deepcopy(swaption)
- spread = swaption.ref * (1 + spread_shock)
+ spreads = swaption.ref * (1 + spread_shock)
for date in date_range:
swaption.index.trade_date = date.date()
T = swaption.T
- for s in spread:
+ for s in spreads:
swaption.ref = s
curr_vol = float(vol_surface(T, swaption.moneyness))
for vs in vol_shock:
@@ -32,3 +32,21 @@ def run_swaption_scenarios(swaption, date_range, spread_shock, vol_shock,
r.append([date, s, vs] + [getattr(swaption, p) for p in params])
df = pd.DataFrame.from_records(r, columns=['date', 'spread_shock', 'vol_shock'] + params)
return df.set_index('date')
+
+
+def run_index_scenarios(index, date_range, spread_shock):
+ r = []
+ index = deepcopy(index)
+ starting_pv = index.clean_pv
+ starting_date = index.trade_date
+ spreads = index.spread * (1 + spread_shock)
+
+ for date in date_range:
+ index.trade_date = date.date()
+ for s in spread:
+ index.spread = s
+ scen_pv = index.clean_pv +
+ index.notional * (date.date()-starting_date).days /360 * index.fixed_rate * 1e-4 - starting_pv
+ r.append([date, s, scen_pv])
+ df = pd.DataFrame.from_records(r, columns=['date', 'spread', 'pnl'])
+ return df.set_index('date')