{ "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(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\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Jump to default" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "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\")" ] }, { "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 }