{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from analytics import Swaption, BlackSwaption, BlackSwaptionVolSurface, Index, Portfolio\n", "from analytics.scenarios import run_swaption_scenarios, run_index_scenarios, run_portfolio_scenarios\n", "import datetime\n", "\n", "from exploration.swaption_calendar_spread import plot_trade_scenarios\n", "#import swaption_calendar_spread as spread" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Delta Chart: Red = Long Risk, Blue = Short Risk" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Ad hoc\n", "option_delta = Index.from_name('IG', 29, '5yr', trade_date=datetime.date(2018, 1, 3))\n", "option_delta.spread = 50\n", "option1 = BlackSwaption(option_delta, datetime.date(2018, 2, 21), 55, option_type=\"payer\")\n", "option2 = BlackSwaption(option_delta, datetime.date(2018, 2, 21), 67.5, option_type=\"payer\")\n", "option3 = BlackSwaption(option_delta, datetime.date(2018, 2, 21), 80, option_type=\"payer\")\n", "option1.sigma = .38\n", "option2.sigma = .61\n", "option3.sigma = .69\n", "option1.notional = 100_000_000\n", "option2.notional = 200_000_000\n", "option3.notional = 1\n", "option1.direction = 'Long'\n", "option2.direction = 'Short'\n", "option3.direction = 'Long'\n", "#option_delta.notional = 1\n", "option_delta.notional = option1.notional * option1.delta + option2.notional * option2.delta + option3.notional * option3.delta\n", "option_delta.direction = 'Seller' if option_delta.notional > 0 else 'Buyer'\n", "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)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "portf" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "portf.trade_date = datetime.date(2018,2,1)\n", "portf.ref = 52\n", "#portf.swaptions[0].sigma = .25\n", "#portf.swaptions[1].sigma = .31\n", "#portf.swaptions[2].sigma = .46\n", "portf.swaptions[0].sigma = .38\n", "portf.swaptions[1].sigma = .61\n", "#portf.swaptions[2].sigma = .69\n", "portf" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df.spread = df.spread.round(2)\n", "df1= df.set_index('spread', append=True)\n", "df1.xs(('2018-01-16', '66.0'))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Dec Jan 2017 Trade\n", "option_delta = Index.from_tradeid(864)\n", "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": [ "#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": [ "#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": [ "#June July 2017 Calendar Trade\n", "option_delta_pf = Index.from_tradeid(874)\n", "option_delta2_pf = Index.from_tradeid(879)\n", "\n", "option1_pf = BlackSwaption.from_tradeid(7, option_delta_pf)\n", "option2_pf = BlackSwaption.from_tradeid(9, option_delta_pf)\n", "option_delta_pf.notional = 50_335_169\n", "\n", "portf = Portfolio([option1_pf, option2_pf, option_delta_pf])\n", "portf.trade_date = datetime.date(2017, 5, 17)\n", "portf.mark()\n", "plot_trade_scenarios(portf)" ] }, { "cell_type": "code", "execution_count": null, "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)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Ad hoc\n", "option_delta = Index.from_name('IG', 29, '5yr')\n", "option_delta.spread = 49.5\n", "option1 = BlackSwaption(option_delta, datetime.date(2018, 2, 21), 55, option_type=\"payer\")\n", "option2 = BlackSwaption(option_delta, datetime.date(2018, 2, 21), 67.5, option_type=\"payer\")\n", "option3 = BlackSwaption(option_delta, datetime.date(2018, 1, 21), 52.5, option_type=\"payer\")\n", "option4 = BlackSwaption(option_delta, datetime.date(2018, 1, 21), 60, option_type=\"payer\")\n", "option1.sigma = .38\n", "option2.sigma = .61\n", "option3.sigma = .371\n", "option4.sigma = .581\n", "option1.notional = 100_000_000\n", "option2.notional = 200_000_000\n", "option3.notional = 100_000_000\n", "option4.notional = 100_000_000\n", "option1.direction = 'Long'\n", "option2.direction = 'Short'\n", "option3.direction = 'Short'\n", "option4.direction = 'Long'\n", "#option_delta.notional = 1\n", "option_delta.notional = option1.notional * option1.delta + option2.notional * option2.delta \n", "option_delta.direction = 'Seller' if option_delta.notional > 0 else 'Buyer'\n", "option_delta.notional = abs(option_delta.notional)\n", "portf = Portfolio([option1, option2, option3, option4, 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)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "portf" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "portf.pv" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "portf.trade_date = datetime.date(2018,1,16)\n", "portf.ref = 47\n", "portf.pnl" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.4" } }, "nbformat": 4, "nbformat_minor": 2 }