diff options
Diffstat (limited to 'python/notebooks/VaR.ipynb')
| -rw-r--r-- | python/notebooks/VaR.ipynb | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/python/notebooks/VaR.ipynb b/python/notebooks/VaR.ipynb new file mode 100644 index 00000000..fd48ded2 --- /dev/null +++ b/python/notebooks/VaR.ipynb @@ -0,0 +1,151 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from analytics.curve_trades import curve_pos\n", + "from analytics import Index, Portfolio\n", + "\n", + "import datetime\n", + "import exploration.VaR as var\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "date = (datetime.date.today() - pd.tseries.offsets.BDay(1)).date()\n", + "report_date = (date + pd.tseries.offsets.BMonthEnd(-1)).date()\n", + "index_type = \"IG\"\n", + "quantile = .025" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#IG Curve VaR\n", + "portf = curve_pos(date, index_type)\n", + "ig_curve_var = abs(var.hist_var(portf, quantile=quantile))\n", + "ig_curve_var" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#EU Curve VaR\n", + "index_type = \"EU\"\n", + "portf = curve_pos(date, index_type)\n", + "eu_curve_var = abs(var.hist_var(portf, quantile=quantile))\n", + "eu_curve_var" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#Mortgage Hedge VaR - use IG spread relative move for VaR\n", + "df = var.get_pos(date)\n", + "df = df[df.strategy == 'HEDGE_MBS']\n", + "portf = Portfolio([Index.from_name(row.p_index, row.p_series, row.tenor,\n", + " report_date, -row.notional)\n", + " for row in df[['p_index', 'tenor', 'p_series', 'notional']].\n", + " itertuples(index=False)])\n", + "portf.mark()\n", + "mort_hedge_var = abs(var.hist_var(portf, index_type = \"IG\", quantile=quantile, years=3))\n", + "mort_hedge_var" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#Import the IM at the FCM account: calculate the IM share of different strategies as a share of VaR\n", + "filename = date.strftime('%Y%m%d') + \"_OTC_MARGIN_EX_DEF.csv\"\n", + "margin_df = pd.read_csv(\"/home/serenitas/Daily/SG_reports/\" + filename, index_col='Currency')\n", + "morg_hedge_im = mort_hedge_var + mort_hedge_var/(mort_hedge_var + ig_curve_var) * margin_df.loc[('USD', 'SG IMR')]\n", + "morg_hedge_im" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#Oct ME Bond HY Equiv\n", + "bond_HY_equiv = -.12088\n", + "percentile = .95" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#95%tile \n", + "df, spread, dur = var.rel_spread_diff(report_date)\n", + "stress = pd.DataFrame()\n", + "stress.at[('2SD_widen', 'spread')] = df.quantile(.975) \n", + "stress.at[('2SD_tighten', 'spread')] = df.quantile(.025) \n", + "stress.at[('worst_widen', 'spread')] = df.max()\n", + "stress['pts'] = -stress * spread * dur/100\n", + "stress['nav_impact'] = bond_HY_equiv * stress['pts']\n", + "stress" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "port.cleared_cds_margins(report_date, percentile)" + ] + }, + { + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} |
