diff options
Diffstat (limited to 'python/notebooks')
| -rw-r--r-- | python/notebooks/risk_sabo.ipynb | 95 |
1 files changed, 39 insertions, 56 deletions
diff --git a/python/notebooks/risk_sabo.ipynb b/python/notebooks/risk_sabo.ipynb index 5106056c..c220d23c 100644 --- a/python/notebooks/risk_sabo.ipynb +++ b/python/notebooks/risk_sabo.ipynb @@ -7,22 +7,17 @@ "outputs": [], "source": [ "import datetime\n", - "import globeop_reports as go\n", "import pandas as pd\n", - "import analytics\n", + "import serenitas.analytics\n", "import numpy as np\n", "\n", "from pandas.tseries.offsets import BDay, BMonthEnd\n", - "from analytics.scenarios import run_portfolio_scenarios\n", + "from serenitas.analytics.scenarios import run_portfolio_scenarios\n", "from risk.portfolio import build_portfolio, generate_vol_surface\n", - "from pathlib import Path" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set dates" + "from pathlib import Path\n", + "\n", + "from serenitas.analytics.index_data import load_all_curves\n", + "from serenitas.utils.db import serenitas_pool" ] }, { @@ -31,10 +26,8 @@ "metadata": {}, "outputs": [], "source": [ - "position_date = (datetime.date.today() - BMonthEnd(1)).date()\n", - "spread_date = position_date\n", - "analytics._local = False\n", - "analytics.init_ontr(spread_date)\n", + "run_date = datetime.date.today()\n", + "serenitas.analytics._local = False\n", "base_dir = Path('/home/serenitas/Daily/Risk/')" ] }, @@ -51,18 +44,22 @@ "metadata": {}, "outputs": [], "source": [ - "spread_shock = np.array([-100., -25., 1., +25. , 100.])\n", - "spread_shock /= analytics._ontr['HY'].spread\n", - "portf, _ = build_portfolio(position_date, spread_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", - " spread_shock=spread_shock,\n", - " vol_shock=[0.0],\n", - " corr_shock=[0.0],\n", - " vol_surface=vol_surface)\n", - "scens = scens.sum(axis=1)\n", - "scens.to_csv(base_dir / f\"csscen_{position_date:%Y%m%d}.csv\")" + "scenarios = []\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", + " spread_shock = np.array([-100., -25., 1., +25. , 100.])\n", + " serenitas.analytics.init_ontr(spread_date)\n", + " spread_shock /= serenitas.analytics._ontr['HY'].spread\n", + " 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", + " spread_shock=spread_shock,\n", + " vol_shock= [0.0],\n", + " corr_shock=[0.0],\n", + " vol_surface=vol_surface)\n", + " scenarios.append(scens.sum(axis=1))\n", + "pd.concat(scenarios).to_csv(base_dir / f\"csscen_{run_date:%Y%m%d}.csv\")" ] }, { @@ -78,32 +75,18 @@ "metadata": {}, "outputs": [], "source": [ - "_, portf = build_portfolio(position_date, spread_date)\n", - "jtd = portf.jtd_single_names()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from analytics.index_data import load_all_curves\n", - "from utils.db import serenitas_pool\n", - "conn = serenitas_pool.getconn()\n", - "surv_curves = load_all_curves(conn, spread_date)\n", - "serenitas_pool.putconn(conn)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "jtd_sabo = jtd[[jtd.columns[0]]].join(surv_curves.groupby(level=0).first()[['name', 'company_id']])\n", - "jtd_sabo.columns = ['jtd', 'name', 'company_id']\n", - "jtd_sabo.to_csv(base_dir / f\"jtd_{position_date:%Y%m%d}.csv\")" + "for position_date in pd.date_range((datetime.date.today() - BMonthEnd(12)), (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", + " conn = serenitas_pool.getconn()\n", + " surv_curves = load_all_curves(conn, spread_date.date())\n", + " serenitas_pool.putconn(conn)\n", + " surv_curves['spread'] = surv_curves['curve'].apply(lambda sc: sc.to_series(forward=False)[5] * (1-sc.recovery_rates[5]))\n", + " jtd_sabo = jtd[[jtd.columns[0]]].join(surv_curves.groupby(level=0).first()[['name', 'company_id', 'spread']])\n", + " jtd_sabo.columns = ['jtd', 'name', 'company_id', 'spread']\n", + " jtd_sabo = jtd_sabo.groupby(['company_id', 'name']).sum()\n", + " jtd_sabo.to_csv(base_dir / f\"jtd_{position_date:%Y%m%d}.csv\")" ] }, { @@ -116,9 +99,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3.9.1 64-bit", "language": "python", - "name": "python3" + "name": "python39164bitf8da796bd4214fb9a205dc5a90db6a8a" }, "language_info": { "codemirror_mode": { @@ -130,7 +113,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.6" + "version": "3.9.1-final" } }, "nbformat": 4, |
