diff options
Diffstat (limited to 'python/notebooks')
| -rw-r--r-- | python/notebooks/Reto Report.ipynb | 61 |
1 files changed, 51 insertions, 10 deletions
diff --git a/python/notebooks/Reto Report.ipynb b/python/notebooks/Reto Report.ipynb index a906291c..81210010 100644 --- a/python/notebooks/Reto Report.ipynb +++ b/python/notebooks/Reto Report.ipynb @@ -21,9 +21,9 @@ "from serenitas.analytics.scenarios import run_portfolio_scenarios\n", "from serenitas.analytics.basket_index import BasketIndex\n", "from serenitas.analytics.base import Trade\n", - "from serenitas.utils.db2 import dbconn, serenitas_pool, dawn_pool\n", - "from serenitas.utils.db import serenitas_engine, dawn_engine\n", - "#from dates import bond_cal" + "from serenitas.utils.db2 import dbconn\n", + "from serenitas.utils.pool import serenitas_pool, dawn_pool\n", + "from serenitas.utils.db import serenitas_engine, dawn_engine" ] }, { @@ -33,21 +33,23 @@ "outputs": [], "source": [ "#Set dates\n", - "position_date = (datetime.date.today() - BDay(1)).date()\n", - "spread_date = (datetime.date.today() - BDay(1)).date()\n", + "position_date = (datetime.date.today() - BDay(4)).date()\n", + "spread_date = (datetime.date.today() - BDay(4)).date()\n", "ana._local = False\n", "Trade.init_ontr(spread_date)\n", - "fund ='SERCGMAST'" + "fund ='ISOSEL'" ] }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "tags": [] + }, "outputs": [], "source": [ - "################################### Run scenarios\n", - "spread_shock = np.array([-100., -25., 1., +25. , 100., 200., 300.])\n", + "################################### Run spread scenarios\n", + "spread_shock = np.array([-100., -25., 1., +25. , 100., 200., 500, 1000])\n", "spread_shock /= Trade._ontr['HY'].spread\n", "portf, _ = build_portfolio(position_date, spread_date, fund)\n", "vol_surface = generate_vol_surface(portf, 10, 'MS')\n", @@ -101,6 +103,38 @@ "metadata": {}, "outputs": [], "source": [ + "################################### Run interest rate scenarios\n", + "ir_swptn_portf = ana.ir_swaption.IRSwaption.get_portfolio(position_date)\n", + "ir_swap_portf = ana.ir_swap.SofrSwap.get_portfolio(position_date)\n", + "\n", + "nav_before = {}\n", + "shock = np.array([-100., -25., 1., 25., 100.])\n", + "my_index = pd.MultiIndex.from_product([np.arange(len(ir_swap_portf.trades)),\n", + " shock], names=['trade','shock'])\n", + "rate_shock = pd.DataFrame(index=my_index)\n", + "for r in shock:\n", + " for j, t in enumerate(ir_swap_portf.trades):\n", + " rate_shock.loc[j, r] = t._qlswap.npv\n", + " breakpoint()\n", + " t._shift.value = r * 1e-4\n", + " nav_after[j, i] = t._qlswap.npv\n", + " t._shift.value = 0.0\n", + " for t in ir_swptn_portf.trades:\n", + " temp = t.pv\n", + " t._shift.value = r_shock * 1e-4\n", + " rate_results[i] += temp - t.pv\n", + " t._shift.value = 0\n", + "rate_results = pd.DataFrame.from_dict(nav_before, orient='index') - pd.DataFrame.from_dict(nav_after, orient='index')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ "#####our jump risks\n", "jtd = portf.jtd_single_names()\n", "with serenitas_pool.connection() as conn:\n", @@ -559,6 +593,13 @@ "metadata": {}, "outputs": [], "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -577,7 +618,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.2" + "version": "3.10.8" } }, "nbformat": 4, |
