{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import datetime\n", "import pandas as pd\n", "import serenitas.analytics\n", "import numpy as np\n", "\n", "from pandas.tseries.offsets import BDay, BMonthEnd\n", "from serenitas.analytics.scenarios import run_portfolio_scenarios\n", "from risk.portfolio import build_portfolio, generate_vol_surface\n", "from pathlib import Path\n", "\n", "from serenitas.analytics.index_data import load_all_curves\n", "from serenitas.utils.db import serenitas_pool" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "run_date = datetime.date.today()\n", "serenitas.analytics._local = False\n", "base_dir = Path('/home/serenitas/Daily/Risk/')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run credit spread scenarios" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "scenarios = []\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", " 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', 'hy_equiv'],\n", " spread_shock=spread_shock,\n", " vol_shock=[0.0],\n", " corr_shock=[0.0],\n", " vol_surface=vol_surface)\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\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Jump to default" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "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", " 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\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3.9.1 64-bit", "language": "python", "name": "python39164bitf8da796bd4214fb9a205dc5a90db6a8a" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.1-final" } }, "nbformat": 4, "nbformat_minor": 4 }