aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/notebooks/Reto Report.ipynb61
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,