aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/notebooks/Curve Trades.ipynb151
-rw-r--r--python/notebooks/Interest Statement.ipynb109
-rw-r--r--python/notebooks/Realized Vol.ipynb165
-rw-r--r--python/notebooks/swaption_risk.ipynb499
4 files changed, 37 insertions, 887 deletions
diff --git a/python/notebooks/Curve Trades.ipynb b/python/notebooks/Curve Trades.ipynb
index d8d1b7ce..4165bd98 100644
--- a/python/notebooks/Curve Trades.ipynb
+++ b/python/notebooks/Curve Trades.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -21,24 +21,9 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "48e324f064aa450f9ca82dd064a3082f",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "Dropdown(description='Index:', options=('IG', 'EU'), value='IG')"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"w = widgets.Dropdown(\n",
" options=['IG', 'EU'],\n",
@@ -51,7 +36,7 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -61,34 +46,9 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "260c86a418564dbe92079d66f6da64d5",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "text/plain": [
- "<matplotlib.axes._subplots.AxesSubplot at 0x7f6018e50e50>"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"#On the run spread differences\n",
"spreads_diff = curve_spread_diff(index, 6)\n",
@@ -97,104 +57,9 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "1f6848430d7c4cdca60133d2b6edf190",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<style scoped>\n",
- " .dataframe tbody tr th:only-of-type {\n",
- " vertical-align: middle;\n",
- " }\n",
- "\n",
- " .dataframe tbody tr th {\n",
- " vertical-align: top;\n",
- " }\n",
- "\n",
- " .dataframe thead th {\n",
- " text-align: right;\n",
- " }\n",
- "</style>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>3-5</th>\n",
- " <th>5-7</th>\n",
- " <th>7-10</th>\n",
- " <th>5-10</th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>min</th>\n",
- " <td>21.219659</td>\n",
- " <td>20.056528</td>\n",
- " <td>16.047530</td>\n",
- " <td>40.126583</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>max</th>\n",
- " <td>34.068608</td>\n",
- " <td>27.193659</td>\n",
- " <td>24.195653</td>\n",
- " <td>48.782836</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>mean</th>\n",
- " <td>29.106575</td>\n",
- " <td>24.588519</td>\n",
- " <td>20.883679</td>\n",
- " <td>45.472198</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>current</th>\n",
- " <td>21.603603</td>\n",
- " <td>21.392519</td>\n",
- " <td>23.498862</td>\n",
- " <td>44.891380</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>zscore</th>\n",
- " <td>-2.698133</td>\n",
- " <td>-2.206748</td>\n",
- " <td>1.378322</td>\n",
- " <td>-0.287849</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "</div>"
- ],
- "text/plain": [
- " 3-5 5-7 7-10 5-10\n",
- "min 21.219659 20.056528 16.047530 40.126583\n",
- "max 34.068608 27.193659 24.195653 48.782836\n",
- "mean 29.106575 24.588519 20.883679 45.472198\n",
- "current 21.603603 21.392519 23.498862 44.891380\n",
- "zscore -2.698133 -2.206748 1.378322 -0.287849"
- ]
- },
- "execution_count": 14,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"#Table of Spread Differences, and Z-score of current spread differences\n",
"spreads_diff_table(spreads_diff)"
diff --git a/python/notebooks/Interest Statement.ipynb b/python/notebooks/Interest Statement.ipynb
index 69518dff..1db3978a 100644
--- a/python/notebooks/Interest Statement.ipynb
+++ b/python/notebooks/Interest Statement.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -23,7 +23,7 @@
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -60,24 +60,9 @@
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "a0d5bf2d610b480f918704e73e02309a",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "VBox(children=(HBox(children=(Dropdown(description='Broker:', index=3, options=('BAML_FCM', 'BAML_ISDA', 'BNP'…"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"from ipywidgets import widgets, Layout\n",
"import datetime\n",
@@ -113,43 +98,9 @@
},
{
"cell_type": "code",
- "execution_count": 23,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "date\n",
- "2019-12-02 -8,800,000.00\n",
- "2019-12-03 -8,800,000.00\n",
- "2019-12-04 -8,800,000.00\n",
- "2019-12-05 -8,800,000.00\n",
- "2019-12-06 -8,800,000.00\n",
- "2019-12-09 -8,800,000.00\n",
- "2019-12-10 -8,800,000.00\n",
- "2019-12-11 -9,070,000.00\n",
- "2019-12-12 -9,070,000.00\n",
- "2019-12-13 -9,070,000.00\n",
- "2019-12-16 -9,070,000.00\n",
- "2019-12-17 -9,070,000.00\n",
- "2019-12-18 -9,070,000.00\n",
- "2019-12-19 -9,070,000.00\n",
- "2019-12-20 -9,070,000.00\n",
- "2019-12-23 -9,070,000.00\n",
- "2019-12-26 -9,070,000.00\n",
- "2019-12-27 -9,070,000.00\n",
- "2019-12-30 -9,070,000.00\n",
- "2020-01-01 -9,070,000.00\n",
- "2020-01-02 -9,070,000.00\n",
- "2020-01-03 -9,070,000.00\n",
- "Name: amount, dtype: float64"
- ]
- },
- "execution_count": 23,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"df_gs=df_balances[df_balances.broker == \"MS\"]\n",
"df_gs.groupby(df_gs.index)['amount'].sum()[\"2019-12-01\":]"
@@ -157,7 +108,7 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -186,51 +137,9 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "2019-12-01 -1,217.99\n",
- "2019-12-02 -1,217.99\n",
- "2019-12-03 -1,210.18\n",
- "2019-12-04 -1,210.18\n",
- "2019-12-05 -1,210.18\n",
- "2019-12-06 -1,440.10\n",
- "2019-12-07 -1,440.10\n",
- "2019-12-08 -1,440.10\n",
- "2019-12-09 -1,440.10\n",
- "2019-12-10 -1,440.10\n",
- "2019-12-11 -1,440.10\n",
- "2019-12-12 -1,474.54\n",
- "2019-12-13 -1,474.54\n",
- "2019-12-14 -1,474.54\n",
- "2019-12-15 -1,474.54\n",
- "2019-12-16 -1,484.06\n",
- "2019-12-17 -1,484.06\n",
- "2019-12-18 -1,474.54\n",
- "2019-12-19 -1,474.54\n",
- "2019-12-20 -1,474.54\n",
- "2019-12-21 -1,474.54\n",
- "2019-12-22 -1,474.54\n",
- "2019-12-23 -1,474.54\n",
- "2019-12-24 -1,474.54\n",
- "2019-12-25 -1,474.54\n",
- "2019-12-26 -1,474.54\n",
- "2019-12-27 -1,474.54\n",
- "2019-12-28 -1,474.54\n",
- "2019-12-29 -1,474.54\n",
- "2019-12-30 -1,474.54\n",
- "2019-12-31 -1,474.54\n",
- "Freq: D, dtype: float64"
- ]
- },
- "execution_count": 12,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"f(df_balances, df_rates, \"GS\", \"2019-12-01\", \"2019-12-31\").sum(axis=1)"
]
diff --git a/python/notebooks/Realized Vol.ipynb b/python/notebooks/Realized Vol.ipynb
index 464b14d6..cfa46012 100644
--- a/python/notebooks/Realized Vol.ipynb
+++ b/python/notebooks/Realized Vol.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -18,24 +18,9 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "b7808ffade83485bba8f589bedb10f68",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "Dropdown(description='Index:', options=('IG', 'HY'), value='IG')"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"w = widgets.Dropdown(\n",
" options=['IG', 'HY'],\n",
@@ -48,7 +33,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -59,157 +44,27 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "4dfbcdf09a294dc781ad1a5b4c382c96",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "text/plain": [
- "<matplotlib.axes._subplots.AxesSubplot at 0x7fe3eb2ad390>"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"onTR.plot()"
]
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "<table class=\"simpletable\">\n",
- "<caption>Constant Mean - GARCH Model Results</caption>\n",
- "<tr>\n",
- " <th>Dep. Variable:</th> <td>spread_return</td> <th> R-squared: </th> <td> -0.001</td> \n",
- "</tr>\n",
- "<tr>\n",
- " <th>Mean Model:</th> <td>Constant Mean</td> <th> Adj. R-squared: </th> <td> -0.001</td> \n",
- "</tr>\n",
- "<tr>\n",
- " <th>Vol Model:</th> <td>GARCH</td> <th> Log-Likelihood: </th> <td> 94.1921</td>\n",
- "</tr>\n",
- "<tr>\n",
- " <th>Distribution:</th> <td>Normal</td> <th> AIC: </th> <td> -180.384</td>\n",
- "</tr>\n",
- "<tr>\n",
- " <th>Method:</th> <td>Maximum Likelihood</td> <th> BIC: </th> <td> -161.947</td>\n",
- "</tr>\n",
- "<tr>\n",
- " <th></th> <td></td> <th> No. Observations: </th> <td>742</td> \n",
- "</tr>\n",
- "<tr>\n",
- " <th>Date:</th> <td>Wed, Sep 11 2019</td> <th> Df Residuals: </th> <td>738</td> \n",
- "</tr>\n",
- "<tr>\n",
- " <th>Time:</th> <td>10:44:17</td> <th> Df Model: </th> <td>4</td> \n",
- "</tr>\n",
- "</table>\n",
- "<table class=\"simpletable\">\n",
- "<caption>Mean Model</caption>\n",
- "<tr>\n",
- " <td></td> <th>coef</th> <th>std err</th> <th>t</th> <th>P>|t|</th> <th>95.0% Conf. Int.</th> \n",
- "</tr>\n",
- "<tr>\n",
- " <th>mu</th> <td> -0.0178</td> <td>7.408e-03</td> <td> -2.400</td> <td>1.641e-02</td> <td>[-3.230e-02,-3.258e-03]</td>\n",
- "</tr>\n",
- "</table>\n",
- "<table class=\"simpletable\">\n",
- "<caption>Volatility Model</caption>\n",
- "<tr>\n",
- " <td></td> <th>coef</th> <th>std err</th> <th>t</th> <th>P>|t|</th> <th>95.0% Conf. Int.</th> \n",
- "</tr>\n",
- "<tr>\n",
- " <th>omega</th> <td>3.6040e-03</td> <td>1.414e-03</td> <td> 2.548</td> <td>1.082e-02</td> <td>[8.322e-04,6.376e-03]</td>\n",
- "</tr>\n",
- "<tr>\n",
- " <th>alpha[1]</th> <td> 0.1348</td> <td>4.345e-02</td> <td> 3.103</td> <td>1.914e-03</td> <td>[4.968e-02, 0.220]</td> \n",
- "</tr>\n",
- "<tr>\n",
- " <th>beta[1]</th> <td> 0.7960</td> <td>5.441e-02</td> <td> 14.631</td> <td>1.774e-48</td> <td>[ 0.689, 0.903]</td> \n",
- "</tr>\n",
- "</table><br/><br/>Covariance estimator: robust"
- ],
- "text/plain": [
- "<class 'statsmodels.iolib.summary.Summary'>\n",
- "\"\"\"\n",
- " Constant Mean - GARCH Model Results \n",
- "==============================================================================\n",
- "Dep. Variable: spread_return R-squared: -0.001\n",
- "Mean Model: Constant Mean Adj. R-squared: -0.001\n",
- "Vol Model: GARCH Log-Likelihood: 94.1921\n",
- "Distribution: Normal AIC: -180.384\n",
- "Method: Maximum Likelihood BIC: -161.947\n",
- " No. Observations: 742\n",
- "Date: Wed, Sep 11 2019 Df Residuals: 738\n",
- "Time: 10:44:17 Df Model: 4\n",
- " Mean Model \n",
- "==============================================================================\n",
- " coef std err t P>|t| 95.0% Conf. Int.\n",
- "------------------------------------------------------------------------------\n",
- "mu -0.0178 7.408e-03 -2.400 1.641e-02 [-3.230e-02,-3.258e-03]\n",
- " Volatility Model \n",
- "============================================================================\n",
- " coef std err t P>|t| 95.0% Conf. Int.\n",
- "----------------------------------------------------------------------------\n",
- "omega 3.6040e-03 1.414e-03 2.548 1.082e-02 [8.322e-04,6.376e-03]\n",
- "alpha[1] 0.1348 4.345e-02 3.103 1.914e-03 [4.968e-02, 0.220]\n",
- "beta[1] 0.7960 5.441e-02 14.631 1.774e-48 [ 0.689, 0.903]\n",
- "============================================================================\n",
- "\n",
- "Covariance estimator: robust\n",
- "\"\"\""
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"model.summary()"
]
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "ename": "NameError",
- "evalue": "name 'df' is not defined",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m-----------------------------------------------------------\u001b[0m",
- "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
- "\u001b[0;32m<ipython-input-6-bc681e92175e>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m#compute lo and hi percentiles of atm volatility daily change (vol of vol)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mrvol\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvol_var\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
- "\u001b[0;32m~/projects/code/python/exploration/option_trades.py\u001b[0m in \u001b[0;36mvol_var\u001b[0;34m(percentile, index, start_date)\u001b[0m\n\u001b[1;32m 111\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mwe\u001b[0m \u001b[0mshould\u001b[0m \u001b[0mgroup\u001b[0m \u001b[0mit\u001b[0m \u001b[0mby\u001b[0m \u001b[0mseries\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 112\u001b[0m \"\"\"\n\u001b[0;32m--> 113\u001b[0;31m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0matm_vol\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart_date\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 114\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrolling_vol\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mterm\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msort_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;32m~/projects/code/python/exploration/option_trades.py\u001b[0m in \u001b[0;36matm_vol\u001b[0;34m(index, date, series, moneyness)\u001b[0m\n\u001b[1;32m 87\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 88\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0matm_vol\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdate\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mseries\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmoneyness\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 89\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0matm_vol_calc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmoneyness\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 90\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 91\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mrolling_vol\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'atm_vol'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mterm\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;31mNameError\u001b[0m: name 'df' is not defined"
- ]
- }
- ],
+ "outputs": [],
"source": [
"#compute lo and hi percentiles of atm volatility daily change (vol of vol)\n",
"rvol.vol_var()"
diff --git a/python/notebooks/swaption_risk.ipynb b/python/notebooks/swaption_risk.ipynb
index c8e5c392..97f9a1c9 100644
--- a/python/notebooks/swaption_risk.ipynb
+++ b/python/notebooks/swaption_risk.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 50,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -13,7 +13,7 @@
},
{
"cell_type": "code",
- "execution_count": 51,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -30,412 +30,9 @@
},
{
"cell_type": "code",
- "execution_count": 52,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "Portfolio 2020-01-24\n",
- "\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>Product</th>\n",
- " <th>Index</th>\n",
- " <th>Notional</th>\n",
- " <th>Ref</th>\n",
- " <th>Strike</th>\n",
- " <th>Direction</th>\n",
- " <th>Type</th>\n",
- " <th>Expiry</th>\n",
- " <th>Vol</th>\n",
- " <th>PV</th>\n",
- " <th>Delta</th>\n",
- " <th>Gamma</th>\n",
- " <th>Theta</th>\n",
- " <th>Vega</th>\n",
- " <th>HY Equiv</th>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>ids</th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>SWPTN91</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>200,000,000.00</td>\n",
- " <td>46.59</td>\n",
- " <td>45.0</td>\n",
- " <td>Long</td>\n",
- " <td>receiver</td>\n",
- " <td>2020-02-19</td>\n",
- " <td>40.83%</td>\n",
- " <td>96,319.39</td>\n",
- " <td>-26.75%</td>\n",
- " <td>60.60%</td>\n",
- " <td>-3,188.64</td>\n",
- " <td>4,080.47</td>\n",
- " <td>-15,787,111.54</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN92</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>200,000,000.00</td>\n",
- " <td>46.59</td>\n",
- " <td>65.0</td>\n",
- " <td>Short</td>\n",
- " <td>payer</td>\n",
- " <td>2020-02-19</td>\n",
- " <td>74.83%</td>\n",
- " <td>-23,794.79</td>\n",
- " <td>-7.31%</td>\n",
- " <td>-15.04%</td>\n",
- " <td>2,128.60</td>\n",
- " <td>-1,542.26</td>\n",
- " <td>-4,314,115.94</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN97</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>200,000,000.00</td>\n",
- " <td>46.59</td>\n",
- " <td>42.5</td>\n",
- " <td>Long</td>\n",
- " <td>receiver</td>\n",
- " <td>2020-03-18</td>\n",
- " <td>37.97%</td>\n",
- " <td>63,066.05</td>\n",
- " <td>-15.51%</td>\n",
- " <td>36.70%</td>\n",
- " <td>-1,502.93</td>\n",
- " <td>4,332.40</td>\n",
- " <td>-9,151,352.04</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN107</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>200,000,000.00</td>\n",
- " <td>46.59</td>\n",
- " <td>42.5</td>\n",
- " <td>Long</td>\n",
- " <td>receiver</td>\n",
- " <td>2020-03-18</td>\n",
- " <td>37.97%</td>\n",
- " <td>63,066.05</td>\n",
- " <td>-15.51%</td>\n",
- " <td>36.70%</td>\n",
- " <td>-1,502.93</td>\n",
- " <td>4,332.40</td>\n",
- " <td>-9,151,352.04</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN108</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>200,000,000.00</td>\n",
- " <td>46.59</td>\n",
- " <td>55.0</td>\n",
- " <td>Short</td>\n",
- " <td>payer</td>\n",
- " <td>2020-03-18</td>\n",
- " <td>54.38%</td>\n",
- " <td>-152,837.83</td>\n",
- " <td>-30.95%</td>\n",
- " <td>-34.76%</td>\n",
- " <td>2,916.80</td>\n",
- " <td>-5,825.18</td>\n",
- " <td>-18,264,316.98</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN98</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>200,000,000.00</td>\n",
- " <td>46.59</td>\n",
- " <td>57.5</td>\n",
- " <td>Short</td>\n",
- " <td>payer</td>\n",
- " <td>2020-03-18</td>\n",
- " <td>57.60%</td>\n",
- " <td>-124,368.10</td>\n",
- " <td>-25.43%</td>\n",
- " <td>-30.04%</td>\n",
- " <td>2,793.20</td>\n",
- " <td>-5,282.54</td>\n",
- " <td>-15,009,920.16</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN93</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>300,000,000.00</td>\n",
- " <td>46.59</td>\n",
- " <td>62.5</td>\n",
- " <td>Short</td>\n",
- " <td>payer</td>\n",
- " <td>2020-03-18</td>\n",
- " <td>63.32%</td>\n",
- " <td>-128,800.98</td>\n",
- " <td>-17.73%</td>\n",
- " <td>-22.36%</td>\n",
- " <td>3,702.11</td>\n",
- " <td>-6,405.66</td>\n",
- " <td>-15,692,360.25</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN103</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>200,000,000.00</td>\n",
- " <td>46.59</td>\n",
- " <td>42.5</td>\n",
- " <td>Long</td>\n",
- " <td>receiver</td>\n",
- " <td>2020-04-15</td>\n",
- " <td>39.55%</td>\n",
- " <td>95,237.93</td>\n",
- " <td>-17.86%</td>\n",
- " <td>30.89%</td>\n",
- " <td>-1,363.28</td>\n",
- " <td>5,704.92</td>\n",
- " <td>-10,542,143.17</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN101</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>100,000,000.00</td>\n",
- " <td>46.58</td>\n",
- " <td>42.5</td>\n",
- " <td>Long</td>\n",
- " <td>receiver</td>\n",
- " <td>2020-04-15</td>\n",
- " <td>39.56%</td>\n",
- " <td>47,737.99</td>\n",
- " <td>-17.90%</td>\n",
- " <td>30.92%</td>\n",
- " <td>-682.45</td>\n",
- " <td>2,855.09</td>\n",
- " <td>-5,281,382.51</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN99</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>200,000,000.00</td>\n",
- " <td>46.58</td>\n",
- " <td>42.5</td>\n",
- " <td>Long</td>\n",
- " <td>receiver</td>\n",
- " <td>2020-04-15</td>\n",
- " <td>39.56%</td>\n",
- " <td>95,475.99</td>\n",
- " <td>-17.90%</td>\n",
- " <td>30.92%</td>\n",
- " <td>-1,364.90</td>\n",
- " <td>5,710.18</td>\n",
- " <td>-10,562,765.02</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN102</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>100,000,000.00</td>\n",
- " <td>46.58</td>\n",
- " <td>57.5</td>\n",
- " <td>Short</td>\n",
- " <td>payer</td>\n",
- " <td>2020-04-15</td>\n",
- " <td>55.32%</td>\n",
- " <td>-100,969.24</td>\n",
- " <td>-32.34%</td>\n",
- " <td>-28.64%</td>\n",
- " <td>1,236.12</td>\n",
- " <td>-3,680.38</td>\n",
- " <td>-9,542,511.78</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN104</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>200,000,000.00</td>\n",
- " <td>46.58</td>\n",
- " <td>57.5</td>\n",
- " <td>Short</td>\n",
- " <td>payer</td>\n",
- " <td>2020-04-15</td>\n",
- " <td>55.32%</td>\n",
- " <td>-201,938.48</td>\n",
- " <td>-32.34%</td>\n",
- " <td>-28.64%</td>\n",
- " <td>2,472.24</td>\n",
- " <td>-7,360.76</td>\n",
- " <td>-19,085,023.56</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN100</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>200,000,000.00</td>\n",
- " <td>46.58</td>\n",
- " <td>60.0</td>\n",
- " <td>Short</td>\n",
- " <td>payer</td>\n",
- " <td>2020-04-15</td>\n",
- " <td>57.63%</td>\n",
- " <td>-171,842.33</td>\n",
- " <td>-27.86%</td>\n",
- " <td>-25.74%</td>\n",
- " <td>2,399.51</td>\n",
- " <td>-6,871.65</td>\n",
- " <td>-16,441,512.64</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN110</th>\n",
- " <td>Swaption</td>\n",
- " <td>HY33 5yr</td>\n",
- " <td>50,000,000.00</td>\n",
- " <td>108.92</td>\n",
- " <td>105.0</td>\n",
- " <td>Short</td>\n",
- " <td>payer</td>\n",
- " <td>2020-04-15</td>\n",
- " <td>48.17%</td>\n",
- " <td>-165,874.84</td>\n",
- " <td>-21.56%</td>\n",
- " <td>-4.50%</td>\n",
- " <td>2,606.42</td>\n",
- " <td>-8,963.31</td>\n",
- " <td>-10,777,542.75</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN109</th>\n",
- " <td>Swaption</td>\n",
- " <td>HY33 5yr</td>\n",
- " <td>50,000,000.00</td>\n",
- " <td>108.92</td>\n",
- " <td>109.5</td>\n",
- " <td>Long</td>\n",
- " <td>receiver</td>\n",
- " <td>2020-04-15</td>\n",
- " <td>28.93%</td>\n",
- " <td>63,201.34</td>\n",
- " <td>-13.82%</td>\n",
- " <td>5.98%</td>\n",
- " <td>-1,144.08</td>\n",
- " <td>6,622.99</td>\n",
- " <td>-6,908,992.84</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN105</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>200,000,000.00</td>\n",
- " <td>46.58</td>\n",
- " <td>42.5</td>\n",
- " <td>Long</td>\n",
- " <td>receiver</td>\n",
- " <td>2020-05-20</td>\n",
- " <td>41.02%</td>\n",
- " <td>127,547.56</td>\n",
- " <td>-19.02%</td>\n",
- " <td>25.85%</td>\n",
- " <td>-1,214.84</td>\n",
- " <td>6,979.90</td>\n",
- " <td>-11,222,185.16</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>SWPTN106</th>\n",
- " <td>Swaption</td>\n",
- " <td>IG33 5yr</td>\n",
- " <td>200,000,000.00</td>\n",
- " <td>46.58</td>\n",
- " <td>60.0</td>\n",
- " <td>Short</td>\n",
- " <td>payer</td>\n",
- " <td>2020-05-20</td>\n",
- " <td>56.10%</td>\n",
- " <td>-264,316.54</td>\n",
- " <td>-34.57%</td>\n",
- " <td>-24.46%</td>\n",
- " <td>2,167.00</td>\n",
- " <td>-9,068.51</td>\n",
- " <td>-20,398,849.70</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>"
- ],
- "text/plain": [
- "Portfolio 2020-01-24\n",
- "\n",
- " Product Index Notional Ref Strike Direction Type Expiry Vol \\\n",
- "ids \n",
- "SWPTN91 Swaption IG33 5yr 200,000,000.00 46.59 45.0 Long receiver 2020-02-19 40.83% \n",
- "SWPTN92 Swaption IG33 5yr 200,000,000.00 46.59 65.0 Short payer 2020-02-19 74.83% \n",
- "SWPTN97 Swaption IG33 5yr 200,000,000.00 46.59 42.5 Long receiver 2020-03-18 37.97% \n",
- "SWPTN107 Swaption IG33 5yr 200,000,000.00 46.59 42.5 Long receiver 2020-03-18 37.97% \n",
- "SWPTN108 Swaption IG33 5yr 200,000,000.00 46.59 55.0 Short payer 2020-03-18 54.38% \n",
- "SWPTN98 Swaption IG33 5yr 200,000,000.00 46.59 57.5 Short payer 2020-03-18 57.60% \n",
- "SWPTN93 Swaption IG33 5yr 300,000,000.00 46.59 62.5 Short payer 2020-03-18 63.32% \n",
- "SWPTN103 Swaption IG33 5yr 200,000,000.00 46.59 42.5 Long receiver 2020-04-15 39.55% \n",
- "SWPTN101 Swaption IG33 5yr 100,000,000.00 46.58 42.5 Long receiver 2020-04-15 39.56% \n",
- "SWPTN99 Swaption IG33 5yr 200,000,000.00 46.58 42.5 Long receiver 2020-04-15 39.56% \n",
- "SWPTN102 Swaption IG33 5yr 100,000,000.00 46.58 57.5 Short payer 2020-04-15 55.32% \n",
- "SWPTN104 Swaption IG33 5yr 200,000,000.00 46.58 57.5 Short payer 2020-04-15 55.32% \n",
- "SWPTN100 Swaption IG33 5yr 200,000,000.00 46.58 60.0 Short payer 2020-04-15 57.63% \n",
- "SWPTN110 Swaption HY33 5yr 50,000,000.00 108.92 105.0 Short payer 2020-04-15 48.17% \n",
- "SWPTN109 Swaption HY33 5yr 50,000,000.00 108.92 109.5 Long receiver 2020-04-15 28.93% \n",
- "SWPTN105 Swaption IG33 5yr 200,000,000.00 46.58 42.5 Long receiver 2020-05-20 41.02% \n",
- "SWPTN106 Swaption IG33 5yr 200,000,000.00 46.58 60.0 Short payer 2020-05-20 56.10% \n",
- "\n",
- " PV Delta Gamma Theta Vega HY Equiv \n",
- "ids \n",
- "SWPTN91 96,319.39 -26.75% 60.60% -3,188.64 4,080.47 -15,787,111.54 \n",
- "SWPTN92 -23,794.79 -7.31% -15.04% 2,128.60 -1,542.26 -4,314,115.94 \n",
- "SWPTN97 63,066.05 -15.51% 36.70% -1,502.93 4,332.40 -9,151,352.04 \n",
- "SWPTN107 63,066.05 -15.51% 36.70% -1,502.93 4,332.40 -9,151,352.04 \n",
- "SWPTN108 -152,837.83 -30.95% -34.76% 2,916.80 -5,825.18 -18,264,316.98 \n",
- "SWPTN98 -124,368.10 -25.43% -30.04% 2,793.20 -5,282.54 -15,009,920.16 \n",
- "SWPTN93 -128,800.98 -17.73% -22.36% 3,702.11 -6,405.66 -15,692,360.25 \n",
- "SWPTN103 95,237.93 -17.86% 30.89% -1,363.28 5,704.92 -10,542,143.17 \n",
- "SWPTN101 47,737.99 -17.90% 30.92% -682.45 2,855.09 -5,281,382.51 \n",
- "SWPTN99 95,475.99 -17.90% 30.92% -1,364.90 5,710.18 -10,562,765.02 \n",
- "SWPTN102 -100,969.24 -32.34% -28.64% 1,236.12 -3,680.38 -9,542,511.78 \n",
- "SWPTN104 -201,938.48 -32.34% -28.64% 2,472.24 -7,360.76 -19,085,023.56 \n",
- "SWPTN100 -171,842.33 -27.86% -25.74% 2,399.51 -6,871.65 -16,441,512.64 \n",
- "SWPTN110 -165,874.84 -21.56% -4.50% 2,606.42 -8,963.31 -10,777,542.75 \n",
- "SWPTN109 63,201.34 -13.82% 5.98% -1,144.08 6,622.99 -6,908,992.84 \n",
- "SWPTN105 127,547.56 -19.02% 25.85% -1,214.84 6,979.90 -11,222,185.16 \n",
- "SWPTN106 -264,316.54 -34.57% -24.46% 2,167.00 -9,068.51 -20,398,849.70 "
- ]
- },
- "execution_count": 52,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"portf = get_swaption_portfolio(value_date, conn, source_list=[\"GS\"])\n",
"portf"
@@ -443,7 +40,7 @@
},
{
"cell_type": "code",
- "execution_count": 53,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -456,7 +53,7 @@
},
{
"cell_type": "code",
- "execution_count": 54,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -467,74 +64,9 @@
},
{
"cell_type": "code",
- "execution_count": 55,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "<div>\n",
- "<style scoped>\n",
- " .dataframe tbody tr th:only-of-type {\n",
- " vertical-align: middle;\n",
- " }\n",
- "\n",
- " .dataframe tbody tr th {\n",
- " vertical-align: top;\n",
- " }\n",
- "\n",
- " .dataframe thead th {\n",
- " text-align: right;\n",
- " }\n",
- "</style>\n",
- "<table border=\"1\" class=\"dataframe\">\n",
- " <thead>\n",
- " <tr style=\"text-align: right;\">\n",
- " <th></th>\n",
- " <th>current hedge</th>\n",
- " <th>current_delta</th>\n",
- " <th>gamma</th>\n",
- " <th>net_delta</th>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>Index</th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " <th></th>\n",
- " </tr>\n",
- " </thead>\n",
- " <tbody>\n",
- " <tr>\n",
- " <th>HY33 5yr</th>\n",
- " <td>18,500,000.00</td>\n",
- " <td>-17,686,535.58</td>\n",
- " <td>741,481.67</td>\n",
- " <td>813,464.42</td>\n",
- " </tr>\n",
- " <tr>\n",
- " <th>IG33 5yr</th>\n",
- " <td>646,400,000.00</td>\n",
- " <td>-645,431,240.73</td>\n",
- " <td>61,135,754.02</td>\n",
- " <td>968,759.27</td>\n",
- " </tr>\n",
- " </tbody>\n",
- "</table>\n",
- "</div>"
- ],
- "text/plain": [
- " current hedge current_delta gamma net_delta\n",
- "Index \n",
- "HY33 5yr 18,500,000.00 -17,686,535.58 741,481.67 813,464.42\n",
- "IG33 5yr 646,400,000.00 -645,431,240.73 61,135,754.02 968,759.27"
- ]
- },
- "execution_count": 55,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"def f(s):\n",
" l = s.split(\" \")\n",
@@ -551,20 +83,9 @@
},
{
"cell_type": "code",
- "execution_count": 56,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "10457.96370760693"
- ]
- },
- "execution_count": 56,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"portf.theta"
]