diff options
Diffstat (limited to 'python/notebooks')
| -rw-r--r-- | python/notebooks/bespokes/Bozeman.ipynb | 22 | ||||
| -rw-r--r-- | python/notebooks/bespokes/Phoenix.ipynb | 163 | ||||
| -rw-r--r-- | python/notebooks/bespokes/Venice.ipynb | 2 | ||||
| -rw-r--r-- | python/notebooks/bespokes/zero_recovery_EUXO.ipynb | 154 |
4 files changed, 335 insertions, 6 deletions
diff --git a/python/notebooks/bespokes/Bozeman.ipynb b/python/notebooks/bespokes/Bozeman.ipynb index 5183a338..43aa1174 100644 --- a/python/notebooks/bespokes/Bozeman.ipynb +++ b/python/notebooks/bespokes/Bozeman.ipynb @@ -37,7 +37,7 @@ "metadata": {}, "outputs": [], "source": [ - "bozeman.value_date=datetime.date(2019, 3, 5)" + "bozeman.value_date=datetime.date(2019, 5, 1)" ] }, { @@ -46,7 +46,7 @@ "metadata": {}, "outputs": [], "source": [ - "bozeman" + "bozeman.mark(skew=ig29.skew)" ] }, { @@ -64,7 +64,19 @@ "metadata": {}, "outputs": [], "source": [ - "bs1._index.spread()" + "#Bozeman\n", + "import pandas as pd\n", + "date_range = pd.bdate_range(end=datetime.date.today(), periods=16, freq = '5B')\n", + "df = pd.DataFrame(index = date_range, columns = ['spread', 'duration', 'port_spread'])\n", + "index = TrancheBasket(\"IG\", 29, \"5yr\")\n", + "tranche = DualCorrTranche.from_tradeid(1037)\n", + "for date in date_range:\n", + " index.value_date = date\n", + " index.tweak()\n", + " index.build_skew()\n", + " tranche.value_date = date\n", + " tranche.mark(skew=index.skew)\n", + " df.loc[date] = [tranche.spread, tranche.duration, tranche._index.spread()[0]/10000]" ] }, { @@ -73,7 +85,7 @@ "metadata": {}, "outputs": [], "source": [ - "bs1.spread" + "df[['spread', 'port_spread']].plot()" ] }, { @@ -136,7 +148,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.2" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/python/notebooks/bespokes/Phoenix.ipynb b/python/notebooks/bespokes/Phoenix.ipynb new file mode 100644 index 00000000..3d546576 --- /dev/null +++ b/python/notebooks/bespokes/Phoenix.ipynb @@ -0,0 +1,163 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from analytics.tranche_basket import DualCorrTranche, TrancheBasket\n", + "import datetime" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ig29 = TrancheBasket(\"IG\", 29, \"5yr\")\n", + "ig29.tweak()\n", + "ig29.build_skew()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "phoenix = DualCorrTranche(\"BS\", 4, \"3yr\",attach=15, detach=30, corr_attach=None, corr_detach=None, tranche_running=100)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "phoenix.value_date=datetime.date.today()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "phoenix.mark(skew=ig29.skew)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "phoenix" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(phoenix.spread, phoenix.duration, phoenix._index.spread())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#Phoenix\n", + "import pandas as pd\n", + "date_range = pd.bdate_range(end=datetime.date.today(), periods=20, freq = '3B')\n", + "df = pd.DataFrame(index = date_range, columns = ['spread', 'duration', 'port_spread'])\n", + "index = TrancheBasket(\"IG\", 29, \"5yr\")\n", + "tranche = DualCorrTranche(\"BS\", 4, \"3yr\",attach=15, detach=30, corr_attach=None, corr_detach=None, tranche_running=100)\n", + "for date in date_range:\n", + " index.value_date = date\n", + " index.tweak()\n", + " index.build_skew()\n", + " tranche.value_date = date\n", + " tranche.mark(skew=index.skew)\n", + " df.loc[date] = [tranche.spread, tranche.duration, tranche._index.spread()[0]/10000]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df[['spread', 'port_spread']].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from pyisda.curve import Senior, MM14\n", + "palma._index[(\"CMACGM\", Senior, MM14)].to_series()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "jtd = palma.jump_to_default(ig29.skew)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "jtd.sort_values()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "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.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/python/notebooks/bespokes/Venice.ipynb b/python/notebooks/bespokes/Venice.ipynb index fc15082d..ce464653 100644 --- a/python/notebooks/bespokes/Venice.ipynb +++ b/python/notebooks/bespokes/Venice.ipynb @@ -128,7 +128,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.2" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/python/notebooks/bespokes/zero_recovery_EUXO.ipynb b/python/notebooks/bespokes/zero_recovery_EUXO.ipynb new file mode 100644 index 00000000..3b3204f1 --- /dev/null +++ b/python/notebooks/bespokes/zero_recovery_EUXO.ipynb @@ -0,0 +1,154 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from analytics.tranche_basket import DualCorrTranche, TrancheBasket\n", + "from pandas.tseries.offsets import BDay\n", + "\n", + "import scipy.interpolate as intp\n", + "import numpy as np\n", + "import datetime" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "index = 'EU'\n", + "series = 30\n", + "value_date=datetime.date.today() - BDay(1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "idx = TrancheBasket(index, series, \"5yr\", value_date=value_date)\n", + "idx.tweak()\n", + "idx.build_skew()\n", + "a,b, bond_prices =idx.tranche_pvs()\n", + "bond_prices" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "idx.tranche_spreads()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a,b, bond_prices = idx.tranche_pvs(zero_recovery=True)\n", + "bond_prices" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "idx.tranche_spreads(zero_recovery=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#map rho to the new expected loss\n", + "idx_zero_loss = idx.expected_loss()/(1-idx.recovery_rates.mean())\n", + "exp_loss = np.zeros(1)\n", + "for k in idx.K[1:]:\n", + " exp_loss = np.append(exp_loss, idx.expected_loss_trunc(k))\n", + "moneyness = np.divide(idx.K, exp_loss)\n", + "zero_moneyness = np.divide(idx.K, exp_loss/(1-idx.recovery_rates.mean()))\n", + "extrapolate = intp.interp1d(moneyness[1:4], idx.rho[1:4], fill_value='extrapolate')\n", + "idx.rho[1:4] = extrapolate(zero_moneyness[1:4])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a,b, bond_prices = idx.tranche_pvs(zero_recovery=True)\n", + "bond_prices" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "idx.tranche_spreads(zero_recovery=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#top down - to price SS\n", + "idx.build_skew(skew_type='topdown')\n", + "extrapolate = intp.interp1d(moneyness[1:4], idx.rho[1:4], fill_value='extrapolate')\n", + "idx.rho[1:4] = extrapolate(zero_moneyness[1:4])\n", + "idx.tranche_spreads(zero_recovery=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} |
