aboutsummaryrefslogtreecommitdiffstats
path: root/python/exploration/swaption_calendar_spread.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/exploration/swaption_calendar_spread.py')
-rw-r--r--python/exploration/swaption_calendar_spread.py37
1 files changed, 29 insertions, 8 deletions
diff --git a/python/exploration/swaption_calendar_spread.py b/python/exploration/swaption_calendar_spread.py
index 5a798e5b..4424e1f9 100644
--- a/python/exploration/swaption_calendar_spread.py
+++ b/python/exploration/swaption_calendar_spread.py
@@ -1,7 +1,7 @@
import sys
#don't do this at home
sys.path.append("..")
-from analytics import Swaption, Index, VolatilitySurface
+from analytics import BlackSwaption, Swaption, Index, VolatilitySurface
from analytics.scenarios import run_swaption_scenarios
from pandas.tseries.offsets import BDay
import datetime
@@ -11,6 +11,7 @@ from scipy.interpolate import SmoothBivariateSpline
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
+from copy import deepcopy
import numpy as np
import matplotlib
@@ -104,13 +105,31 @@ def plot_color_map(df):
fig.savefig("/home/serenitas/edwin/PythonGraphs/payer_swap_" + str(val_date.date()) + ".png")
+def calc_delta_pnl(index, date_range, spread_shock):
+ r = []
+ index_obj = deepcopy(index)
+ startingpv = -index_obj.clean_pv
+ spread_start = index_obj.spread
+
+ for date in date_range:
+ index_obj.trade_date = date.date()
+ for ss in spread_shock:
+ index_obj.spread = spread_start * (1 + ss)
+ index_obj._update()
+ scen_pv = -index_obj.clean_pv + index_obj.notional * (date.date()-trade_date).days/360* index_obj.fixed_rate/10000 - startingpv
+ r.append([date, index_obj.spread, scen_pv])
+
+ df = pd.DataFrame.from_records(r, columns=['date', 'spread_shock', 'pv'])
+
+ return df.set_index('date')
trade_date = datetime.date(2017, 2, 23)
ig27 = Index.from_name("IG", 27, '5yr', trade_date=trade_date)
ig27.ref = 62
-payer1 = Swaption(ig27, datetime.date(2017, 4, 19), 65)
-payer2 = Swaption(ig27, datetime.date(2017, 5, 17), 72)
+ig27.notional = 13000000
+payer1 = BlackSwaption(ig27, datetime.date(2017, 4, 19), 65)
+payer2 = BlackSwaption(ig27, datetime.date(2017, 5, 17), 72)
payer1.notional = 100e6
payer2.notional = 100e6
date_range = pd.bdate_range(trade_date, pd.Timestamp('2017-04-19') - BDay(), freq = '5B')
@@ -120,16 +139,18 @@ vs = VolatilitySurface("IG", 27, trade_date=trade_date)
vol_surface = vs[vs.list()[-1]]
df1 = run_swaption_scenarios(payer1, date_range, spread_shock, vol_shock, vol_surface)
- #params=['pv_black', 'delta'])
+ #params=['pv', 'delta'])
df2 = run_swaption_scenarios(payer2, date_range, spread_shock, vol_shock, vol_surface)
+df3 = calc_delta_pnl(ig27, date_range, spread_shock)
+
#plot it
week = -1
df = df1
-df = df.assign(pv=df1.pv_black-df2.pv_black)
+df = df.assign(pv=df1.pv-df2.pv)
spread_plot_range = np.arange((1-0.2)*ig27.ref, (1+0.3)*ig27.ref, 0.001*ig27.ref)
-plot_df(df.loc[date_range[week]], spread_plot_range,
- np.arange(-0.15, 0.3, 0.001))
-plot_color_map(df.loc[date_range[week]])
+#plot_df(df.loc[date_range[week]], spread_plot_range,
+# np.arange(-0.15, 0.3, 0.001))
+#plot_color_map(df.loc[date_range[week]])