diff options
Diffstat (limited to 'python/notebooks/risk_sabo.ipynb')
| -rw-r--r-- | python/notebooks/risk_sabo.ipynb | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/python/notebooks/risk_sabo.ipynb b/python/notebooks/risk_sabo.ipynb index c220d23c..20813d2f 100644 --- a/python/notebooks/risk_sabo.ipynb +++ b/python/notebooks/risk_sabo.ipynb @@ -45,7 +45,7 @@ "outputs": [], "source": [ "scenarios = []\n", - "for position_date in pd.date_range((datetime.date.today() - BMonthEnd(2)), (datetime.date.today() - BMonthEnd(1)), freq=\"BM\"):\n", + "for position_date in pd.date_range((datetime.date.today() - BMonthEnd(6)), (datetime.date.today() - BMonthEnd()), freq=\"BM\"):\n", " spread_date = position_date\n", " spread_shock = np.array([-100., -25., 1., +25. , 100.])\n", " serenitas.analytics.init_ontr(spread_date)\n", @@ -53,12 +53,34 @@ " portf, _ = build_portfolio(position_date.date(), spread_date.date())\n", " vol_surface = generate_vol_surface(portf, 5)\n", " portf.reset_pv()\n", - " scens = run_portfolio_scenarios(portf, date_range=[pd.Timestamp(spread_date)], params=['pnl'],\n", + " scens = run_portfolio_scenarios(portf, date_range=[pd.Timestamp(spread_date)], params=['pnl', 'hy_equiv'],\n", " spread_shock=spread_shock,\n", - " vol_shock= [0.0],\n", + " vol_shock=[0.0],\n", " corr_shock=[0.0],\n", " vol_surface=vol_surface)\n", - " scenarios.append(scens.sum(axis=1))\n", + "\n", + " strategies = {}\n", + " strategies['options'] = ['HYOPTDEL', 'HYPAYER', 'HYREC', \n", + " 'IGOPTDEL', 'IGPAYER', 'IGREC']\n", + " strategies['tranches'] = ['HYSNR', 'HYMEZ', 'HYINX', 'HYEQY', \n", + " 'IGSNR', 'IGMEZ', 'IGINX', 'IGEQY', \n", + " 'EUSNR', 'EUMEZ', 'EUINX', 'EUEQY', \n", + " 'XOSNR', 'XOMEZ', 'XOINX', 'XOEQY', \n", + " 'BSPK']\n", + "\n", + " scens = scens.xs((0.0, 0.0), level=['vol_shock', 'corr_shock'])\n", + " scens.columns.names=['strategy', 'trade_id', 'scen_type']\n", + "\n", + " results = {}\n", + " for i, g in scens.groupby(level='scen_type', axis =1):\n", + " temp = g.groupby(level='strategy', axis =1).sum()\n", + " for key, item in strategies.items():\n", + " exist_columns = set(temp.columns).intersection(item)\n", + " temp[key] = temp[exist_columns].sum(axis=1)\n", + " temp.drop(exist_columns, axis=1, inplace=True)\n", + " temp['total'] = temp.sum(axis = 1)\n", + " results[i] = temp\n", + " scenarios.append(pd.concat(results))\n", "pd.concat(scenarios).to_csv(base_dir / f\"csscen_{run_date:%Y%m%d}.csv\")" ] }, @@ -72,10 +94,12 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "for position_date in pd.date_range((datetime.date.today() - BMonthEnd(12)), (datetime.date.today() - BMonthEnd(1)), freq=\"BM\"):\n", + "for position_date in pd.date_range((datetime.date.today() - BMonthEnd(2)), (datetime.date.today() - BMonthEnd(1)), freq=\"BM\"):\n", " spread_date = position_date\n", " _, portf = build_portfolio(position_date.date(), spread_date.date())\n", " jtd = portf.jtd_single_names()\n", @@ -95,6 +119,13 @@ "metadata": {}, "outputs": [], "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { |
