{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# better formatting for large floats\n", "import pandas as pd\n", "pd.options.display.float_format = \"{:,.2f}\".format" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from risk.swaptions import get_swaption_portfolio\n", "import datetime\n", "from utils.db import dbconn\n", "from analytics import init_ontr\n", "import analytics\n", "conn = dbconn('dawndb')\n", "conn.autocommit = True\n", "value_date = datetime.date.today()\n", "init_ontr(value_date)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Portfolio 2020-01-22\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ProductIndexNotionalRefStrikeDirectionTypeExpiryVolPVDeltaGammaThetaVegaHY Equiv
ids
SWPTN91SwaptionIG33 5yr200,000,000.0045.1345.0Longreceiver2020-02-1940.74%150,061.67-37.06%66.00%-3,327.794,576.20-21,825,100.50
SWPTN92SwaptionIG33 5yr200,000,000.0045.1365.0Shortpayer2020-02-1975.62%-20,633.56-6.40%-13.42%1,809.79-1,399.72-3,765,995.13
SWPTN97SwaptionIG33 5yr200,000,000.0045.1342.5Longreceiver2020-03-1838.45%96,216.26-21.68%43.36%-1,761.485,166.44-12,768,492.88
SWPTN107SwaptionIG33 5yr200,000,000.0045.1342.5Longreceiver2020-03-1838.45%96,216.26-21.68%43.36%-1,761.485,166.44-12,768,492.88
SWPTN108SwaptionIG33 5yr200,000,000.0045.1355.0Shortpayer2020-03-1854.75%-123,985.48-26.66%-32.67%2,590.27-5,340.77-15,699,000.27
SWPTN98SwaptionIG33 5yr200,000,000.0045.1357.5Shortpayer2020-03-1857.96%-101,557.29-21.92%-27.94%2,453.43-4,793.54-12,910,454.18
SWPTN93SwaptionIG33 5yr300,000,000.0045.1362.5Shortpayer2020-03-1863.80%-107,301.85-15.41%-20.60%3,231.38-5,769.27-13,613,875.38
SWPTN103SwaptionIG33 5yr200,000,000.0045.1342.5Longreceiver2020-04-1539.95%130,102.18-22.89%35.40%-1,518.806,419.89-13,477,124.52
SWPTN101SwaptionIG33 5yr100,000,000.0045.1342.5Longreceiver2020-04-1539.95%65,051.09-22.89%35.40%-759.403,209.94-6,738,562.26
SWPTN99SwaptionIG33 5yr200,000,000.0045.1242.5Longreceiver2020-04-1539.96%130,399.30-22.93%35.43%-1,520.206,424.14-13,500,437.56
SWPTN102SwaptionIG33 5yr100,000,000.0045.1257.5Shortpayer2020-04-1555.99%-86,043.53-28.92%-27.46%1,137.31-3,432.55-8,516,333.11
SWPTN104SwaptionIG33 5yr200,000,000.0045.1257.5Shortpayer2020-04-1555.99%-172,087.07-28.92%-27.46%2,274.63-6,865.09-17,032,666.22
SWPTN100SwaptionIG33 5yr200,000,000.0045.1260.0Shortpayer2020-04-1558.42%-147,765.75-24.99%-24.50%2,198.93-6,373.46-14,714,847.97
SWPTN105SwaptionIG33 5yr200,000,000.0045.1242.5Longreceiver2020-05-2041.20%161,429.07-23.06%29.16%-1,309.027,595.96-13,577,001.50
SWPTN106SwaptionIG33 5yr200,000,000.0045.1260.0Shortpayer2020-05-2056.55%-229,470.13-31.54%-23.91%2,020.49-8,542.41-18,570,543.35
" ], "text/plain": [ "Portfolio 2020-01-22\n", "\n", " Product Index Notional Ref Strike Direction Type Expiry Vol \\\n", "ids \n", "SWPTN91 Swaption IG33 5yr 200,000,000.00 45.13 45.0 Long receiver 2020-02-19 40.74% \n", "SWPTN92 Swaption IG33 5yr 200,000,000.00 45.13 65.0 Short payer 2020-02-19 75.62% \n", "SWPTN97 Swaption IG33 5yr 200,000,000.00 45.13 42.5 Long receiver 2020-03-18 38.45% \n", "SWPTN107 Swaption IG33 5yr 200,000,000.00 45.13 42.5 Long receiver 2020-03-18 38.45% \n", "SWPTN108 Swaption IG33 5yr 200,000,000.00 45.13 55.0 Short payer 2020-03-18 54.75% \n", "SWPTN98 Swaption IG33 5yr 200,000,000.00 45.13 57.5 Short payer 2020-03-18 57.96% \n", "SWPTN93 Swaption IG33 5yr 300,000,000.00 45.13 62.5 Short payer 2020-03-18 63.80% \n", "SWPTN103 Swaption IG33 5yr 200,000,000.00 45.13 42.5 Long receiver 2020-04-15 39.95% \n", "SWPTN101 Swaption IG33 5yr 100,000,000.00 45.13 42.5 Long receiver 2020-04-15 39.95% \n", "SWPTN99 Swaption IG33 5yr 200,000,000.00 45.12 42.5 Long receiver 2020-04-15 39.96% \n", "SWPTN102 Swaption IG33 5yr 100,000,000.00 45.12 57.5 Short payer 2020-04-15 55.99% \n", "SWPTN104 Swaption IG33 5yr 200,000,000.00 45.12 57.5 Short payer 2020-04-15 55.99% \n", "SWPTN100 Swaption IG33 5yr 200,000,000.00 45.12 60.0 Short payer 2020-04-15 58.42% \n", "SWPTN105 Swaption IG33 5yr 200,000,000.00 45.12 42.5 Long receiver 2020-05-20 41.20% \n", "SWPTN106 Swaption IG33 5yr 200,000,000.00 45.12 60.0 Short payer 2020-05-20 56.55% \n", "\n", " PV Delta Gamma Theta Vega HY Equiv \n", "ids \n", "SWPTN91 150,061.67 -37.06% 66.00% -3,327.79 4,576.20 -21,825,100.50 \n", "SWPTN92 -20,633.56 -6.40% -13.42% 1,809.79 -1,399.72 -3,765,995.13 \n", "SWPTN97 96,216.26 -21.68% 43.36% -1,761.48 5,166.44 -12,768,492.88 \n", "SWPTN107 96,216.26 -21.68% 43.36% -1,761.48 5,166.44 -12,768,492.88 \n", "SWPTN108 -123,985.48 -26.66% -32.67% 2,590.27 -5,340.77 -15,699,000.27 \n", "SWPTN98 -101,557.29 -21.92% -27.94% 2,453.43 -4,793.54 -12,910,454.18 \n", "SWPTN93 -107,301.85 -15.41% -20.60% 3,231.38 -5,769.27 -13,613,875.38 \n", "SWPTN103 130,102.18 -22.89% 35.40% -1,518.80 6,419.89 -13,477,124.52 \n", "SWPTN101 65,051.09 -22.89% 35.40% -759.40 3,209.94 -6,738,562.26 \n", "SWPTN99 130,399.30 -22.93% 35.43% -1,520.20 6,424.14 -13,500,437.56 \n", "SWPTN102 -86,043.53 -28.92% -27.46% 1,137.31 -3,432.55 -8,516,333.11 \n", "SWPTN104 -172,087.07 -28.92% -27.46% 2,274.63 -6,865.09 -17,032,666.22 \n", "SWPTN100 -147,765.75 -24.99% -24.50% 2,198.93 -6,373.46 -14,714,847.97 \n", "SWPTN105 161,429.07 -23.06% 29.16% -1,309.02 7,595.96 -13,577,001.50 \n", "SWPTN106 -229,470.13 -31.54% -23.91% 2,020.49 -8,542.41 -18,570,543.35 " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "portf = get_swaption_portfolio(value_date, conn, source_list=[\"GS\"])\n", "portf" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "df = portf._todf()\n", "positions = df.set_index(\"Index\")[[\"Delta\", \"Notional\"]].prod(axis=1).groupby(level=\"Index\").sum()\n", "positions.name = 'current_delta'\n", "gamma = df.set_index(\"Index\")[[\"Gamma\", \"Notional\"]].prod(axis=1).groupby(level=\"Index\").sum()\n", "gamma.name = 'gamma'" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "hedges = pd.read_sql_query(\"SELECT security_desc, notional FROM list_cds_positions_by_strat(%s) \"\n", " \"WHERE folder in ('IGOPTDEL', 'HYOPTDEL')\",\n", " conn, params=(value_date,))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
current hedgecurrent_deltagammanet_delta
Index
IG33 5yr681,400,000.00-677,507,134.07151,731,367.463,892,865.93
\n", "
" ], "text/plain": [ " current hedge current_delta gamma net_delta\n", "Index \n", "IG33 5yr 681,400,000.00 -677,507,134.07 151,731,367.46 3,892,865.93" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def f(s):\n", " l = s.split(\" \")\n", " return f\"{l[1]}{l[3][1:]} {l[4].lower()}r\"\n", "\n", "hedges[\"Index\"] = hedges[\"security_desc\"].apply(f)\n", "hedges = hedges.rename(columns={\"notional\": \"current hedge\"})\n", "hedges = hedges.set_index(\"Index\")[\"current hedge\"]\n", "hedges = hedges.reindex(positions.index, fill_value=0.)\n", "risk = pd.concat([hedges, positions, gamma], axis=1)\n", "risk['net_delta'] = risk[\"current hedge\"] + risk.current_delta\n", "risk" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5758.050875686662" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "portf.theta" ] }, { "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.8.1" } }, "nbformat": 4, "nbformat_minor": 4 }