aboutsummaryrefslogtreecommitdiffstats
path: root/python/notebooks
diff options
context:
space:
mode:
Diffstat (limited to 'python/notebooks')
-rw-r--r--python/notebooks/VaR.ipynb40
1 files changed, 25 insertions, 15 deletions
diff --git a/python/notebooks/VaR.ipynb b/python/notebooks/VaR.ipynb
index 2fa3ee1d..de2c26a1 100644
--- a/python/notebooks/VaR.ipynb
+++ b/python/notebooks/VaR.ipynb
@@ -28,7 +28,7 @@
"metadata": {},
"outputs": [],
"source": [
- "date = (datetime.date.today() - pd.tseries.offsets.BDay(1)).date()\n",
+ "date = (datetime.date.today() - pd.tseries.offsets.BDay(3)).date()\n",
"report_date = (date + pd.tseries.offsets.BMonthEnd(-1)).date()\n",
"index_type = \"IG\"\n",
"quantile = .025"
@@ -127,6 +127,17 @@
"metadata": {},
"outputs": [],
"source": [
+ "position_date = (datetime.date.today() - pd.tseries.offsets.BDay(1)).date()\n",
+ "shock_date = (datetime.date.today() - pd.tseries.offsets.BDay(1)).date()\n",
+ "(position_date, shock_date)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
"#Current tranche and swaptions positions\n",
"t_sql_string = (\"SELECT id, sum(notional * case when protection='Buyer' then -1 else 1 end) \"\n",
" \"OVER (partition by security_id, attach) AS ntl_agg \"\n",
@@ -142,19 +153,19 @@
" \"AND trade_date <= %s\")\n",
"with conn.cursor() as c:\n",
" #Get Tranche Trade Ids\n",
- " c.execute(t_sql_string, (date,))\n",
+ " c.execute(t_sql_string, (position_date,))\n",
" t_trade_ids = [dealid for dealid, ntl in c if ntl != 0]\n",
" #Get Swaption Trade Ids\n",
- " c.execute(swaption_sql_string, (date, date))\n",
+ " c.execute(swaption_sql_string, (position_date, position_date))\n",
" swaption_trades = c.fetchall()\n",
" #Get Index/deltas Trade Ids\n",
- " c.execute(index_sql_string, (date,))\n",
+ " c.execute(index_sql_string, (position_date,))\n",
" index_trade_ids = [dealid for dealid, ntl in c if ntl != 0]\n",
" \n",
"portf = Portfolio([DualCorrTranche.from_tradeid(dealid) for dealid in t_trade_ids],\n",
" t_trade_ids)\n",
"for row in swaption_trades:\n",
- " option_delta = CreditIndex(row[1].split()[1], row[1].split()[3][1:], '5yr', date)\n",
+ " option_delta = CreditIndex(row[1].split()[1], row[1].split()[3][1:], '5yr', position_date)\n",
" option_delta.mark()\n",
" portf.add_trade(BlackSwaption.from_tradeid(row[0], option_delta), 'opt_' + str(row[0]))\n",
"for index_id in index_trade_ids:\n",
@@ -162,30 +173,29 @@
" \n",
"#Update manually - positive notional = long risk\n",
"non_trancheSwap_risk_notional = 49119912 \n",
- "\n",
- "portf.add_trade(CreditIndex('HY', on_the_run('HY'), '5yr', value_date = date, notional = -non_trancheSwap_risk_notional), 'bond')\n",
+ "portf.add_trade(CreditIndex('HY', on_the_run('HY'), '5yr', value_date = shock_date, notional = -non_trancheSwap_risk_notional), 'bond')\n",
" \n",
- "portf.value_date = date\n",
+ "portf.value_date = shock_date\n",
"portf.mark(interp_method=\"bivariate_linear\")\n",
"portf.reset_pv()\n",
"\n",
"vol_surface = {}\n",
"for trade in portf.swaptions:\n",
" vs = BlackSwaptionVolSurface(trade.index.index_type, trade.index.series, \n",
- " value_date=date, interp_method = \"bivariate_linear\")\n",
+ " value_date=shock_date, interp_method = \"bivariate_linear\")\n",
" vol_surface[trade.index.index_type + trade.index.series] = vs[vs.list(option_type='payer')[-1]]\n",
"vol_shock = [0]\n",
"corr_shock = [0]\n",
- "spread_shock = widen + tighten\n",
- "date_range = [pd.Timestamp(date)]\n",
+ "spread_shock = tighten + [0] + widen\n",
+ "date_range = [pd.Timestamp(shock_date)]\n",
"\n",
- "scens = run_portfolio_scenarios(portf, date_range, params=[\"pnl\"],\n",
+ "scens = run_portfolio_scenarios(portf, date_range, params=[\"pnl\", \"hy_equiv\"],\n",
" spread_shock=spread_shock,\n",
" vol_shock=vol_shock,\n",
" corr_shock=corr_shock,\n",
" vol_surface=vol_surface)\n",
"\n",
- "scens.sum(axis=1)"
+ "scens.xs('pnl', level=1).sum(axis=1)"
]
},
{
@@ -202,8 +212,8 @@
" vol_surface=vol_surface)\n",
"scens.sum(axis=1)\n",
"\n",
- "risk_notional = [t.notional * t._index.duration for t in portf.indices]\n",
- "portf.trades[0]._index.duration()"
+ "#risk_notional = [t.notional * t._index.duration for t in portf.indices]\n",
+ "#portf.trades[0]._index.duration()"
]
},
{