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.ipynb37
1 files changed, 26 insertions, 11 deletions
diff --git a/python/notebooks/VaR.ipynb b/python/notebooks/VaR.ipynb
index de2c26a1..ba59d717 100644
--- a/python/notebooks/VaR.ipynb
+++ b/python/notebooks/VaR.ipynb
@@ -16,6 +16,7 @@
"import exploration.VaR as var\n",
"import pandas as pd\n",
"import numpy as np\n",
+ "import globeop_reports as go\n",
"\n",
"conn = dbconn('dawndb')\n",
"dawndb = dbengine('dawndb')\n",
@@ -84,10 +85,10 @@
"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.csv\"\n",
- "margin_df = pd.read_csv(\"/home/serenitas/Daily/SG_reports/\" + filename, index_col='System Currency')\n",
- "mortg_hedge_im = mort_hedge_var + mort_hedge_var/(mort_hedge_var + ig_curve_var) * margin_df.loc[('USD', 'SG Settlement Margin')]\n",
- "mortg_hedge_im"
+ "#filename = date.strftime('%Y%m%d') + \"_OTC_MARGIN.csv\"\n",
+ "#margin_df = pd.read_csv(\"/home/serenitas/Daily/SG_reports/\" + filename, index_col='System Currency')\n",
+ "#mortg_hedge_im = mort_hedge_var + mort_hedge_var/(mort_hedge_var + ig_curve_var) * margin_df.loc[('USD', 'SG Settlement Margin')]\n",
+ "#mortg_hedge_im"
]
},
{
@@ -163,7 +164,7 @@
" 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",
+ " ['trn_'+ str(a) for a in t_trade_ids])\n",
"for row in swaption_trades:\n",
" option_delta = CreditIndex(row[1].split()[1], row[1].split()[3][1:], '5yr', position_date)\n",
" option_delta.mark()\n",
@@ -171,9 +172,15 @@
"for index_id in index_trade_ids:\n",
" portf.add_trade(CreditIndex.from_tradeid(index_id), 'index_' + str(index_id))\n",
" \n",
- "#Update manually - positive notional = long risk\n",
- "non_trancheSwap_risk_notional = 49119912 \n",
- "portf.add_trade(CreditIndex('HY', on_the_run('HY'), '5yr', value_date = shock_date, notional = -non_trancheSwap_risk_notional), 'bond')\n",
+ "#get bond risks:\n",
+ "rmbs_pos = go.rmbs_pos(position_date)\n",
+ "r = serenitasdb.execute(\"select duration from on_the_run where index = 'HY' and date = %s\",\n",
+ " shock_date)\n",
+ "duration, = next(r)\n",
+ "rmbs_pos['hy_equiv'] = rmbs_pos['delta_yield']/duration * 100\n",
+ "notional\n",
+ "portf.add_trade(CreditIndex('HY', on_the_run('HY'), '5yr', value_date = shock_date, \n",
+ " notional = rmbs_pos['hy_equiv'].sum()), 'rmbs_bond')\n",
" \n",
"portf.value_date = shock_date\n",
"portf.mark(interp_method=\"bivariate_linear\")\n",
@@ -195,7 +202,7 @@
" corr_shock=corr_shock,\n",
" vol_surface=vol_surface)\n",
"\n",
- "scens.xs('pnl', level=1).sum(axis=1)"
+ "scens.xs('pnl', level=1, axis=1).sum(axis=1)"
]
},
{
@@ -205,12 +212,20 @@
"outputs": [],
"source": [
"spread_shock = np.arange(-.4, 2.2, .2)\n",
- "scens = run_portfolio_scenarios(portf, date_range, params=[\"pnl\"],\n",
+ "\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",
- "scens.sum(axis=1)\n",
+ "results = {}\n",
+ "for x in ['pnl', 'hy_equiv']:\n",
+ " df = scens.xs(x, level=1, axis=1)\n",
+ " for y in ['trn', 'opt', 'index']:\n",
+ " columns = [col for col in df.columns if 'trn' in col]\n",
+ " results[(x,y)] = df[columns].sum(axis=1)\n",
+ " \n",
+ "hy_equiv = scens.xs('hy_equiv', level=1, axis=1).sum(axis=1)\n",
"\n",
"#risk_notional = [t.notional * t._index.duration for t in portf.indices]\n",
"#portf.trades[0]._index.duration()"