diff options
Diffstat (limited to 'python/notebooks/Option Trades.ipynb')
| -rw-r--r-- | python/notebooks/Option Trades.ipynb | 77 |
1 files changed, 38 insertions, 39 deletions
diff --git a/python/notebooks/Option Trades.ipynb b/python/notebooks/Option Trades.ipynb index ff4c6525..53ceb04c 100644 --- a/python/notebooks/Option Trades.ipynb +++ b/python/notebooks/Option Trades.ipynb @@ -13,9 +13,8 @@ "from graphics import plot_time_color_map, plot_color_map\n", "from analytics import Swaption, BlackSwaption, BlackSwaptionVolSurface, Index, Portfolio\n", "from analytics.scenarios import run_swaption_scenarios, run_index_scenarios, run_portfolio_scenarios\n", - "\n", - "#from exploration.swaption_calendar_spread import plot_trade_scenarios\n", - "#import swaption_calendar_spread as spread" + "from scipy.interpolate import SmoothBivariateSpline\n", + "from db import dbengine" ] }, { @@ -85,7 +84,7 @@ "option_delta.notional = abs(option_delta.notional)\n", "portf = Portfolio([option1, option2, option3, option_delta])\n", "#Plot Scenarios Inputs: Portfolio, spread shock tightening%, spread shock widening%, snapshot period)\n", - "plot_trade_scenarios(portf, -.15, .8, -4, vol_time_roll=False)" + "portf" ] }, { @@ -94,7 +93,7 @@ "metadata": {}, "outputs": [], "source": [ - "portf" + "plot_trade_scenarios(portf, -.15, .8, -4, vol_time_roll=False)" ] }, { @@ -108,43 +107,22 @@ "option1 = BlackSwaption.from_tradeid(3, option_delta)\n", "option2 = BlackSwaption.from_tradeid(4, option_delta)\n", "portf = Portfolio([option1, option2, option_delta])\n", - "plot_trade_scenarios(portf)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ + "#plot_trade_scenarios(portf)\n", + "\n", "#Feb 2017: Sell May Buy April Calendar Trade\n", "option_delta = Index.from_tradeid(870)\n", "option1 = BlackSwaption.from_tradeid(5, option_delta)\n", "option2 = BlackSwaption.from_tradeid(6, option_delta)\n", "portf = Portfolio([option1, option2, option_delta])\n", - "plot_trade_scenarios(portf)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ + "#plot_trade_scenarios(portf)\n", + "\n", "#April 2017: Sell May Buy June Calendar Trade\n", "option_delta = Index.from_tradeid(874)\n", "option1 = BlackSwaption.from_tradeid(7, option_delta)\n", "option2 = BlackSwaption.from_tradeid(8, option_delta)\n", "portf = Portfolio([option1, option2, option_delta])\n", - "plot_trade_scenarios(portf)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ + "#plot_trade_scenarios(portf)\n", + "\n", "#June July 2017 Calendar Trade\n", "option_delta_pf = Index.from_tradeid(874)\n", "option_delta2_pf = Index.from_tradeid(879)\n", @@ -156,7 +134,14 @@ "portf = Portfolio([option1_pf, option2_pf, option_delta_pf])\n", "portf.value_date = datetime.date(2017, 5, 17)\n", "portf.mark()\n", - "plot_trade_scenarios(portf)" + "#plot_trade_scenarios(portf)\n", + "\n", + "#July 2017: Buy Sept HY payer spread\n", + "option_delta = Index.from_tradeid(891)\n", + "option1 = BlackSwaption.from_tradeid(10, option_delta)\n", + "option2 = BlackSwaption.from_tradeid(11, option_delta)\n", + "portf = Portfolio([option1, option2, option_delta])\n", + "#plot_trade_scenarios(portf)" ] }, { @@ -165,12 +150,26 @@ "metadata": {}, "outputs": [], "source": [ - "#July 2017: Buy Sept HY payer spread\n", - "option_delta = Index.from_tradeid(891)\n", - "option1 = BlackSwaption.from_tradeid(10, option_delta)\n", - "option2 = BlackSwaption.from_tradeid(11, option_delta)\n", - "portf = Portfolio([option1, option2, option_delta])\n", - "plot_trade_scenarios(portf)" + "#Look at steepness of volatility - 90 days, .75 vs .25 payer deltas\n", + "sql_str = \"select b.quotedate, b.ref, b.ref_id, b.expiry, a.delta_pay, a.vol from \" \\\n", + " \"swaption_quotes a join swaption_ref_quotes b on a.ref_id = b.ref_id and index = 'IG'\"\n", + "df = pd.read_sql_query(sql_str, dbengine('serenitasdb'), \n", + " index_col=['quotedate'], parse_dates={'quotedate': {'utc': True}})\n", + "df['days_expiry'] = (df.expiry - df.index.date).dt.days\n", + "r_1 = []\n", + "for i, g in df.groupby(pd.Grouper(freq='D', level='quotedate')):\n", + " r = []\n", + " for i_1, g_1 in g.groupby(['days_expiry', 'delta_pay']):\n", + " r.append([i_1[0], i_1[1], g_1['vol'].mean()])\n", + " if len(r) > 0:\n", + " temp = np.dstack(r)\n", + " f = SmoothBivariateSpline(temp[0][0], temp[0][1], temp[0][2])\n", + " r = (f(90, .75) - f(90, .25))[0][0]\n", + " r_1.append([i, r])\n", + " else:\n", + " pass\n", + "df_1 = pd.DataFrame(r_1, columns=['date', 'steepness'])\n", + "df_1.set_index('date').plot()" ] }, { |
