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