aboutsummaryrefslogtreecommitdiffstats
path: root/python/notebooks/VaR.ipynb
diff options
context:
space:
mode:
Diffstat (limited to 'python/notebooks/VaR.ipynb')
-rw-r--r--python/notebooks/VaR.ipynb151
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
+}