{ "cells": [ { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "f4223dad-974f-4861-a042-6482a68d5b2a" }, "slideshow": { "slide_type": "slide" } }, "source": [ "![](../images/logo.png)" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "54f8dbf2-4ff5-4247-801c-6f1cbf9bde2c" }, "slideshow": { "slide_type": "slide" } }, "source": [ "# Multi-Curve Bootstrapping" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2020-05-03T11:52:23.127533Z", "start_time": "2020-05-03T11:52:15.353618Z" }, "nbpresent": { "id": "e37b2715-afad-4967-ad31-817add74ad12" }, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "# import datetime as dt\n", "# from dateutil.relativedelta import relativedelta\n", "# import rivapy.marketdata.bootstrapping as bootstr\n", "# import math\n", "# import pandas as pd\n", "# import pyvacon\n", "# # the next line is a jupyter internal command to show the matplotlib graphs within the notebook\n", "# %matplotlib inline\n", "# import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "c:\\Users\\DrHansNguyen\\Documents\\MyRivacon\\RiVaPy\\rivapy\\__init__.py:11: UserWarning: The pyvacon module is not available. You may not use all functionality without this module. Consider installing pyvacon.\n", " warnings.warn('The pyvacon module is not available. You may not use all functionality without this module. Consider installing pyvacon.')\n" ] } ], "source": [ "%load_ext autoreload\n", "%autoreload 2\n", "\n", "#imports\n", "import datetime as dt\n", "from dateutil.relativedelta import relativedelta\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from rivapy.marketdata.bootstrapping import bootstrap_curve, get_quote\n", "from rivapy.instruments.deposit_specifications import DepositSpecification\n", "from rivapy.instruments.fra_specifications import ForwardRateAgreementSpecification\n", "from rivapy.instruments.ir_swap_specification import InterestRateSwapSpecification, IrFixedLegSpecification, IrFloatLegSpecification, IrOISLegSpecification, InterestRateBasisSwapSpecification\n", "from rivapy.instruments.components import ConstNotionalStructure\n", "from rivapy.tools.enums import DayCounterType, InterpolationType, ExtrapolationType\n", "\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import math\n", "\n", "from rivapy.tools._validators import print_member_values\n", "from rivapy.pricing.deposit_pricing import DepositPricer\n", "from rivapy.pricing.interest_rate_swap_pricing import InterestRateSwapPricer\n", "from rivapy.marketdata.curves import DiscountCurve\n", "from rivapy.tools.datetools import DayCounter, Period, Schedule, calc_end_day, calc_start_day\n", "#testing\n", "import rivapy.instruments.specification_from_csv as sfc \n", "from holidays import HolidayBase as _HolidayBase\n", "from holidays import EuropeanCentralBank as _ECB" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "e169f300-1edd-4f2c-bfdc-32432442cb99" }, "slideshow": { "slide_type": "slide" } }, "source": [ "## Introduction\n", "\n", "In this notebook we introduce the basic principles of multi-curve bootstrapping. \n", "\n", "Before the credit crisis a single-curve framework was used for pricing interest rate derivatives. Both the forecasting of future cashflows as well as the discounting of future cashflows was based on the same curve. This curve was considered to be risk-free and was bootstrapped using a mixture of instruments indexed to rates with different tenors. \n", "\n", "Since the crisis, however, a widening of the spreads in tenor basis swaps has been observed. As a result, two interest rate swaps indexed e.g. to the 3M EURIBOR and 6M EURIBOR can no longer be priced using the same curve. Furthermore, a distinction needs to be made between the curve for the forward rates and the discount curve. This has led to the introduction of the multi-curve framework with separate curves for each tenor. \n", "\n", "In the multi-curve setup the curves are constructed based on instruments homogeneous in the referenced index. A set of instruments needs to be selected for each curve, with one instrument per maturity. Each instrument requires a quote as well as the respective instrument definition, which is called a specification in the context of pyvacon." ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "4fafc065-ccf6-430e-9978-eca652d87838" }, "slideshow": { "slide_type": "slide" } }, "source": [ "## Input Instruments for Interest Rate Curve Bootstrapping\n", "The following instruments are currently available for ir curve bootstrapping\n", "\n", "- Deposits\n", "- IR Futures\n", "- IR Swaps\n", "- IR Basis-Swaps\n", "- FX Swaps\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "e4995a2c-6887-4072-b60b-fd95fb0b94a3" }, "slideshow": { "slide_type": "slide" } }, "source": [ "### Setting up deposits / fixings\n", "\n", "The fixing of the underlying reference rate is published daily and represents a certain average rate earned over a period corresponding to the tenor. The rate is calculated from quotes obtained from a panel of selected banks. The start date (spot date) of the period can deviate from the fixing date. This difference is referred to as the spot lag. \n", "\n", "The fixing is usually used as the starting point for the bootstrapping of forward curves. It can be specified as a deposit in pyvacon." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2020-05-03T11:52:23.154788Z", "start_time": "2020-05-03T11:52:23.133629Z" }, "nbpresent": { "id": "06fb2234-1c14-4663-a772-1511d8def20b" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ref date: 2019-08-31 00:00:00\n", "start date: 2019-09-02 00:00:00 with spot lag 2 days\n", "end date: 2019-09-03 00:00:00\n", "adjusted start date: 2019-08-30 00:00:00\n", "adjusted end date: 2019-09-03 00:00:00\n" ] } ], "source": [ "# calculation date\n", "ref_date = dt.datetime(2019, 8, 31) \n", "\n", "# start date of the accrual period with spot lag equal to 2 days\n", "start_date = ref_date + dt.timedelta(days=2)\n", "\n", "# end date of the accrual period is 1 day after startdate\n", "end_date = start_date + dt.timedelta(days=1)\n", "\n", "# specification of the deposit\n", "ccy = \"EUR\"\n", "dcc = \"Act365Fixed\"#\"Act360\"normally a bond is ACT360, we keep consistency with the swaps\n", "rate = 0.01\n", "notional = 100.0\n", "deposit = DepositSpecification(\n", " obj_id=\"OVERNIGHT_DEPOSIT\",\n", " issuer=\"dummy_issuer\",\n", " currency=ccy,\n", " issue_date=ref_date,\n", " maturity_date=end_date,\n", " notional=notional,\n", " rate=rate,\n", " day_count_convention=dcc,\n", ")\n", "\n", "# check dates, deposit start date cannot be the same as maturity date\n", "print(f\"ref date: {ref_date}\")\n", "print(f\"start date: {start_date} with spot lag 2 days\")\n", "print(f\"end date: {end_date}\")\n", "print(f\"adjusted start date: {deposit.start_date}\")\n", "print(f\"adjusted end date: {deposit.maturity_date}\")\n", "\n", " " ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "aa223212-9255-476f-b72f-5470cc5925c1" }, "slideshow": { "slide_type": "slide" } }, "source": [ "### Setting up an interest rate swap\n", "A plain vanilla interest rate swap is a financial contract in which a stream of fixed payments is exchanged for floating payments linked to a reference index. The par rate (r) of a swap is the fixed rate under which the value of the two streams (legs) is equal:\n", "$$ \n", "r \\cdot \\sum_{i=1}^n dcf_{i} \\cdot P(0,t_{i} ) = \\sum_{k=1}^m F_{k} \\cdot dcf_{k} \\cdot P(0,t_{k}) \n", "$$ \n", "\n", "where $t_{i}$, $i=1,..,n$ and $t_{k}$, $i=1,..,m$ are the payment structures of the fixed and floating legs, and $P(0,t_{i/k})$ are the corresponding discount factors, $dcf_{i/k}$ is the day count fraction for the period $[t_{(i/k-1)},t_{i/k}]$, and $F_{k}$ is the expected value of underlying reference rate for the period $[t_{(k-1)},t_{k}]$.\n", "\n", "The standard payment frequency of the fixed leg depends on the currency of the swap as well as the tenor of the underlying. In the EUR market swaps are usually quoted with annual fixed payments.\n", "\n", "The payment frequency of the floating leg usually coincides with the tenor of the underlying reference index. In some currencies, however, the floating rate can be compounded and payed out at less frequent intervals (e.g. CAD). \n", "\n", "In the context of pyvacon an IRS can be defined using an InterestRateSwapSpecification." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2020-05-03T11:52:23.203412Z", "start_time": "2020-05-03T11:52:23.165902Z" }, "nbpresent": { "id": "cecbd3b1-a5bd-4541-be70-22fd19542177" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "# start dates of the accrual periods corresponding to the tenor of the underlying index (3 months). The spot lag is set to 0.\n", "start_dates = [ref_date + relativedelta(months=3*i) for i in range(4)]\n", "\n", "# reset dates are equal to start dates if spot lag is 0.\n", "reset_dates = start_dates\n", "\n", "# the end dates of the accral periods\n", "end_dates = [x + relativedelta(months=3) for x in start_dates]\n", "\n", "# the actual payment dates of the cashflows may differ from the end of the accrual period (e.g. OIS). \n", "# in the standard case these two sets of dates coincide\n", "pay_dates = end_dates\n", "ns = ConstNotionalStructure(100.0)\n", "spread = 0.00\n", "\n", "# definition of the floating leg\n", "float_leg =IrFloatLegSpecification(obj_id = 'dummy_float_leg', notional = ns, reset_dates=reset_dates, start_dates=start_dates, end_dates=end_dates,\n", " rate_start_dates=start_dates, rate_end_dates=end_dates, pay_dates=pay_dates, currency = \"EUR\", \n", " udl_id=\"test_udl_id\", fixing_id=\"test_fixing_id\", day_count_convention=\"Act365Fixed\", spread=spread)\n", "\n", "# # definition of the fixed leg\n", "#Note that a fixed rate is given for the specification as it is required. \n", "#However, for the creation of the bootrstrapped curve, the market quotes are used as the target swap par rate\n", "fixed_leg = IrFixedLegSpecification(fixed_rate = 0.01, obj_id = 'dummy_fixed_leg', notional = 100.0, start_dates=start_dates, \n", " end_dates=end_dates, pay_dates=pay_dates, currency='EUR', day_count_convention='Act365Fixed')\n", "\n", "# # definition of the IR swap\n", "ir_swap = InterestRateSwapSpecification(obj_id=\"3M_SWAP\", notional=ns, issue_date=ref_date, maturity_date=pay_dates[-1],\n", " pay_leg=fixed_leg, receive_leg=float_leg,currency='EUR', day_count_convention=\"Act365Fixed\",\n", " issuer=\"dummy_issuer\", securitization_level=\"COLLATERALIZED\")\n", " " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "#2Y maturity 3M swap\n", "start_dates2 = [ref_date + relativedelta(months=3*i) for i in range(4*2)]\n", "reset_dates2 = start_dates2\n", "end_dates2 = [x + relativedelta(months=3) for x in start_dates2]\n", "pay_dates2 = end_dates2\n", "\n", "ns = ConstNotionalStructure(100.0)\n", "spread = 0.00\n", "\n", "# # definition of the floating leg\n", "float_leg2 =IrFloatLegSpecification(obj_id = 'dummy_float_leg2', notional = ns, reset_dates=reset_dates2, start_dates=start_dates2, end_dates=end_dates2,\n", " rate_start_dates=start_dates2, rate_end_dates=end_dates2, pay_dates=pay_dates2, currency = \"EUR\", \n", " udl_id=\"test_udl_id\", fixing_id=\"test_fixing_id\", day_count_convention=\"Act365Fixed\", spread=spread)\n", "\n", "# # definition of the fixed leg\n", "fixed_leg2 = IrFixedLegSpecification(fixed_rate = 0.01, obj_id = 'dummy_fixed_leg2', notional = 100.0, start_dates=start_dates2, \n", " end_dates=end_dates2, pay_dates=pay_dates2, currency='EUR', day_count_convention='Act365Fixed')\n", "\n", "# # definition of the IR swap\n", "ir_swap2 = InterestRateSwapSpecification(obj_id=\"3M_SWAP2\", notional=ns, issue_date=ref_date, maturity_date=pay_dates2[-1],\n", " pay_leg=fixed_leg2, receive_leg=float_leg2,currency='EUR', day_count_convention=\"Act365Fixed\",\n", " issuer=\"dummy_issuer\", securitization_level=\"COLLATERALIZED\")" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "ad928f00-82ea-46f2-aadc-1d45c53e2b2f" }, "slideshow": { "slide_type": "slide" } }, "source": [ "### Setting up an overnight indexed swap\n", "An OIS is an interest rate swap where the floating payments are linked to a compounded overnight rate. The floating payments are obtained as:\n", "\n", " $$ N\\prod_{i=1}^n (1+dcf_{i}\\cdot I_{i-1})-1$$\n", "where $N$ is the notional, $dcf_{i}$ is the day count fraction for the one-day period $[t_{i-1},t_{i}]$ and $I_{i-1}$ is the fixing of the ON rate corresponding to time $t_{i-1}$.\n", "\n", "The overnight rate represents the default risk over one night and can, therefore, be regarded as mostly risk free. This rate is used to discount cashflows from collateralized trades as this rate is most often paid as interest for the collateral.\n", "\n", "In the current pyvacon setting the OIS will be defined as plain vanilla IRS without compounding." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Setting up a tenor basis swap\n", "\n", "Basis swaps can be quoted in a fixed-fixed (as a portfolio of 2 fixed vs floating IRS) or in a float-float (as a single swap) convention. The market standard usually depends on the currency. \n", "\n", "#### Fixed-Fixed Basis Swaps (EUR convention)\n", "\n", "In certain currencies (e.g EUR, SEK, DKK and NOK) basis swaps are quoted as the difference between two IRS with identical fixed legs and floating legs indexed to different tenors. With this convention the spread is usually paid annually, independent of the tenors of the floating legs. The par spread $s^{xy}$ is defined via:\n", "\n", "$$ s^{xy} \\cdot \\sum_{l} dcf_{i} \\cdot P(0,t_{l})= \\sum_{k} dcf_{k} \\cdot F_{k}^{y} \\cdot P(0,t_{k})-\\sum_{i} dcf_{i} \\cdot F_{i}^{x} \\cdot P(0,t_{i} )$$\n", "\n", "where $t_{i}$, $t_{k}$ are grids corresponding to the tenors $x,y$ with $x 0.00085\n", "\n", "# --- Spot and maturity dates ---\n", "spot_date = calc_end_day(ref_date, spot_lag, roll_conv, holidays)\n", "expiry = calc_end_day(spot_date, maturity, roll_conv, holidays)\n", "label = f\"{instr}_{maturity}\"\n", "\n", "ns = ConstNotionalStructure(1.0)\n", "\n", "# --------------------------------------------\n", "# PAY FLOATING LEG (short tenor, pays basis)\n", "short_schedule = Schedule(\n", " start_day=spot_date,\n", " end_day=expiry,\n", " time_period=short_freq,\n", " business_day_convention=roll_conv,\n", " calendar=holidays,\n", " ref_date=ref_date,\n", ").generate_dates(False)\n", "\n", "short_start = short_schedule[:-1]\n", "short_end = short_schedule[1:]\n", "short_pay = short_end\n", "short_reset = Schedule(\n", " start_day=spot_date,\n", " end_day=expiry,\n", " time_period=short_tenor,\n", " business_day_convention=roll_conv,\n", " calendar=holidays,\n", " ref_date=ref_date,\n", ").generate_dates(False)[:-1]\n", "\n", "pay_leg = IrFloatLegSpecification(\n", " obj_id=label + \"_pay_leg\",\n", " notional=ns,\n", " reset_dates=short_reset,\n", " start_dates=short_start,\n", " end_dates=short_end,\n", " rate_start_dates=short_start,\n", " rate_end_dates=short_end,\n", " pay_dates=short_pay,\n", " currency=currency,\n", " udl_id=short_index,\n", " fixing_id=\"test_fixing_id\",\n", " day_count_convention=floatDayCount,\n", " spread=0.0, # this is the quoted basis\n", ")\n", "\n", "# --------------------------------------------\n", "# RECEIVE FLOATING LEG (long tenor)\n", "\n", "long_schedule = Schedule(\n", " start_day=spot_date,\n", " end_day=expiry,\n", " time_period=long_freq,\n", " business_day_convention=roll_conv,\n", " calendar=holidays,\n", " ref_date=ref_date,\n", ").generate_dates(False)\n", "\n", "long_start = long_schedule[:-1]\n", "long_end = long_schedule[1:]\n", "long_pay = long_end\n", "long_reset = Schedule(\n", " start_day=spot_date,\n", " end_day=expiry,\n", " time_period=long_tenor,\n", " business_day_convention=roll_conv,\n", " calendar=holidays,\n", " ref_date=ref_date,\n", ").generate_dates(False)[:-1]\n", "\n", "receive_leg = IrFloatLegSpecification(\n", " obj_id=label + \"_receive_leg\",\n", " notional=ns,\n", " reset_dates=long_reset,\n", " start_dates=long_start,\n", " end_dates=long_end,\n", " rate_start_dates=long_start,\n", " rate_end_dates=long_end,\n", " pay_dates=long_pay,\n", " currency=currency,\n", " udl_id=long_index,\n", " fixing_id=\"test_fixing_id\",\n", " day_count_convention=floatDayCount,\n", " spread=0.0,\n", ")\n", "\n", "# --------------------------------------------\n", "# FIXED SPREAD LEG\n", "# The spread leg represents the fixed +x bps cashflows applied to the pay leg\n", "spread_schedule = Schedule(\n", " start_day=spot_date,\n", " end_day=expiry,\n", " time_period=short_freq, # same freq as short leg\n", " business_day_convention=rollConvFix,\n", " calendar=holidays,\n", " ref_date=ref_date,\n", ").generate_dates(False)\n", "\n", "spread_start = spread_schedule[:-1]\n", "spread_end = spread_schedule[1:]\n", "spread_pay = spread_end\n", "\n", "spread_leg = IrFixedLegSpecification(\n", " fixed_rate=spread_rate,\n", " obj_id=label + \"_spread_leg\",\n", " notional=1.0,\n", " start_dates=spread_start,\n", " end_dates=spread_end,\n", " pay_dates=spread_pay,\n", " currency=currency,\n", " day_count_convention=fixDayCount,\n", ")\n", "\n", "# --------------------------------------------\n", "# Combine into full TBS object\n", "basis_swap = InterestRateBasisSwapSpecification(\n", " obj_id=label,\n", " notional=ns,\n", " issue_date=ref_date,\n", " maturity_date=expiry,\n", " pay_leg=pay_leg,\n", " receive_leg=receive_leg,\n", " spread_leg=spread_leg,\n", " currency=currency,\n", " day_count_convention=floatDayCount,\n", " issuer=\"dummy_issuer\",\n", " securitization_level=\"COLLATERALIZED\",\n", ")\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "856957c5-943d-41b4-8800-7464f9267f3f" }, "slideshow": { "slide_type": "slide" } }, "source": [ "## Bootstrapping EUR Curves\n", "In the EUR market most interest rate derivatives are indexed to the Euribor benchmark rate and the Euro OverNight Index Average (Eonia) in case of Overnight indexed swaps (https://www.emmi-benchmarks.eu/emmi/about-us.html). Derivatives indexed to the 1M, 3M, 6M and 12M tenors can be found. \n", "\n", "In this notebook we present the construction of the OIS discounting curve and the two most commonly used tenor curves - the 3M and 6M tenors.\n", "\n", "\n", "The bootstrapping of different tenors needs to be performed sequentially. At first the OIS curve needs to be constructed, since it is used as the discount curve in the bootstrapping algorithm for all other tenors. The OIS curve is calibrated under the assumption that the forward and discount curves coincide. \n", "\n", "The order of construction of the other tenors depends on the defined input instruments. If the derivatives only depend on one tenor (outright quotes), there are no restrictions on the order. However, for most currencies, one or two tenors will be more liquid (depending on the maturity) and all other tenors will be represented as basis swaps with respect to the main tenor. In this case the correct bootstrapping order needs to be followed and the corresponding basis index needs to be provided.\n", "\n", "### Sample curve specification\n", "\n", "We define a few example specifications to show the expected syntax. Further below we showcase real data." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# sample \"OIS\" discounting curve\n", "instruments = [deposit, ir_swap]\n", "quotes = [0.0025, 0.005]\n", "sample_dc = bootstrap_curve(\n", " ref_date=ref_date,\n", " curve_id=\"OIS_DC\",\n", " day_count_convention=\"Act360\", # taken the first entry and assume is valid for all other deposits\n", " instruments=instruments,\n", " quotes=quotes,\n", " interpolation_type=InterpolationType.LINEAR_LOG,\n", " extrapolation_type=ExtrapolationType.LINEAR_LOG,\n", " )\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2020-05-03T11:52:23.267025Z", "start_time": "2020-05-03T11:52:23.251996Z" }, "nbpresent": { "id": "cb9932a0-594c-44a7-bdc3-fc70f5996990" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "# sample 3M EURIBOR curve with OIS discounting \n", "instruments = [ir_swap, ir_swap2]\n", "quotes = [0.003, 0.0075]\n", "\n", "euribor_3m = bootstrap_curve(\n", " ref_date=ref_date,\n", " curve_id=\"EUR3M_DC\",\n", " day_count_convention=\"Act360\", # taken the first entry and assume is valid for all other deposits\n", " instruments=instruments,\n", " quotes=quotes,\n", " curves={\"discount_curve\": sample_dc},\n", " interpolation_type=InterpolationType.LINEAR_LOG,\n", " extrapolation_type=ExtrapolationType.LINEAR_LOG,\n", " )" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2020-05-03T11:52:23.282759Z", "start_time": "2020-05-03T11:52:23.270476Z" }, "nbpresent": { "id": "94fb8021-0811-47af-a2fe-90efbbe4a3d9" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "# sample 6M EURIBOR curve with ois bootstrapping and the 3M EURIBOR curve as the basis index\n", "quotes = [0.003, 0.006]\n", "# the basis swap is used instead of the ir swap\n", "instruments[1] = basis_swap\n", "#euribor_6m = bootstr.bootstrap_curve(refdate, 'EUR6M_DC', 'Act365Fixed', instruments, quotes, estr, euribor_3m)\n", "\n", "\n", "euribor_6m = bootstrap_curve(\n", " ref_date=ref_date,\n", " curve_id=\"EUR6M_DC\",\n", " day_count_convention=\"Act360\", # taken the first entry and assume is valid for all other deposits\n", " instruments=instruments,\n", " quotes=quotes,\n", " curves={\"discount_curve\": sample_dc, \"basis_curve\": euribor_3m},\n", " interpolation_type=InterpolationType.LINEAR_LOG,\n", " extrapolation_type=ExtrapolationType.LINEAR_LOG,\n", " )\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sample_dc.plot()\n", "euribor_3m.plot()\n", "euribor_6m.plot()" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "0ec13b44-f3ac-417d-9219-4c330f48b7d0" }, "slideshow": { "slide_type": "slide" } }, "source": [ "### EUR market data\n", "\n", "We now present the calibration of EUR curves based on actual market data. The input quotes as well as the instrument definition and conventions are provided in an input csv. file and are loaded into a pandas data frame object:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2020-05-03T11:52:24.249492Z", "start_time": "2020-05-03T11:52:24.162321Z" }, "nbpresent": { "id": "9c2d8e4a-85bb-4df9-828c-caba1a81d43a" }, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateMaturityInstrumentCurrencyQuoteUnderlyingIndexUnderlyingTenorUnderlyingPaymentFrequencyBasisIndexBasisTenor...DayCountFixedDayCountFloatDayCountBasisRollConventionFixedRollConventionFloatRollConventionBasisSpotLagUnderlyingTenorShortUnderlyingPaymentFrequencyShortPaymentFrequencyFixedShort
026.09.20257YOISUSD0.03449SOFR1D1YNaNNaN...Act360Act360NaNModifiedFollowingModifiedFollowingNaN2DNaNNaNNaN
126.09.202514DOISEUR0.02013EONIA1D14DNaNNaN...Act360Act360NaNModifiedFollowingModifiedFollowingNaN2DNaNNaNNaN
226.09.20251MOISEUR0.02013EONIA1D1MNaNNaN...Act360Act360NaNModifiedFollowingModifiedFollowingNaN2DNaNNaNNaN
326.09.20252MOISEUR0.02012EONIA1D2MNaNNaN...Act360Act360NaNModifiedFollowingModifiedFollowingNaN2DNaNNaNNaN
426.09.20253MOISEUR0.02016EONIA1D3MNaNNaN...Act360Act360NaNModifiedFollowingModifiedFollowingNaN2DNaNNaNNaN
..................................................................
1132323.07.20253yTBSEUR8.90000EURIBOR12M1yNaNNaN...Act360Act360NaNModifiedFollowingModifiedFollowingNaN2D6M6M6M
1132423.07.20256yTBSEUR6.95000EURIBOR6M6MNaNNaN...Act360Act360NaNModifiedFollowingModifiedFollowingNaN2D3M3M3M
1132523.07.202560yTBSEUR-2.35000EURIBOR6M6MNaNNaN...Act360Act360NaNModifiedFollowingModifiedFollowingNaN2D3M3M3M
1132623.07.202530yTBSEUR20.40000EURIBOR12M1yNaNNaN...Act360Act360NaNModifiedFollowingModifiedFollowingNaN2D6M6M6M
1132723.07.20258yTBSEUR11.00000EURIBOR12M1yNaNNaN...Act360Act360NaNModifiedFollowingModifiedFollowingNaN2D6M6M6M
\n", "

11328 rows Ă— 22 columns

\n", "
" ], "text/plain": [ " Date Maturity Instrument Currency Quote UnderlyingIndex \\\n", "0 26.09.2025 7Y OIS USD 0.03449 SOFR \n", "1 26.09.2025 14D OIS EUR 0.02013 EONIA \n", "2 26.09.2025 1M OIS EUR 0.02013 EONIA \n", "3 26.09.2025 2M OIS EUR 0.02012 EONIA \n", "4 26.09.2025 3M OIS EUR 0.02016 EONIA \n", "... ... ... ... ... ... ... \n", "11323 23.07.2025 3y TBS EUR 8.90000 EURIBOR \n", "11324 23.07.2025 6y TBS EUR 6.95000 EURIBOR \n", "11325 23.07.2025 60y TBS EUR -2.35000 EURIBOR \n", "11326 23.07.2025 30y TBS EUR 20.40000 EURIBOR \n", "11327 23.07.2025 8y TBS EUR 11.00000 EURIBOR \n", "\n", " UnderlyingTenor UnderlyingPaymentFrequency BasisIndex BasisTenor ... \\\n", "0 1D 1Y NaN NaN ... \n", "1 1D 14D NaN NaN ... \n", "2 1D 1M NaN NaN ... \n", "3 1D 2M NaN NaN ... \n", "4 1D 3M NaN NaN ... \n", "... ... ... ... ... ... \n", "11323 12M 1y NaN NaN ... \n", "11324 6M 6M NaN NaN ... \n", "11325 6M 6M NaN NaN ... \n", "11326 12M 1y NaN NaN ... \n", "11327 12M 1y NaN NaN ... \n", "\n", " DayCountFixed DayCountFloat DayCountBasis RollConventionFixed \\\n", "0 Act360 Act360 NaN ModifiedFollowing \n", "1 Act360 Act360 NaN ModifiedFollowing \n", "2 Act360 Act360 NaN ModifiedFollowing \n", "3 Act360 Act360 NaN ModifiedFollowing \n", "4 Act360 Act360 NaN ModifiedFollowing \n", "... ... ... ... ... \n", "11323 Act360 Act360 NaN ModifiedFollowing \n", "11324 Act360 Act360 NaN ModifiedFollowing \n", "11325 Act360 Act360 NaN ModifiedFollowing \n", "11326 Act360 Act360 NaN ModifiedFollowing \n", "11327 Act360 Act360 NaN ModifiedFollowing \n", "\n", " RollConventionFloat RollConventionBasis SpotLag UnderlyingTenorShort \\\n", "0 ModifiedFollowing NaN 2D NaN \n", "1 ModifiedFollowing NaN 2D NaN \n", "2 ModifiedFollowing NaN 2D NaN \n", "3 ModifiedFollowing NaN 2D NaN \n", "4 ModifiedFollowing NaN 2D NaN \n", "... ... ... ... ... \n", "11323 ModifiedFollowing NaN 2D 6M \n", "11324 ModifiedFollowing NaN 2D 3M \n", "11325 ModifiedFollowing NaN 2D 3M \n", "11326 ModifiedFollowing NaN 2D 6M \n", "11327 ModifiedFollowing NaN 2D 6M \n", "\n", " UnderlyingPaymentFrequencyShort PaymentFrequencyFixedShort \n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "3 NaN NaN \n", "4 NaN NaN \n", "... ... ... \n", "11323 6M 6M \n", "11324 3M 3M \n", "11325 3M 3M \n", "11326 6M 6M \n", "11327 6M 6M \n", "\n", "[11328 rows x 22 columns]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# set holiday calendar \n", "holidays= _ECB()\n", "\n", "# set directory and file name for Input Quotes\n", "dirName = \"./sample_data\" \n", "fileName = \"/multi_dates_tbs.csv\"\n", "\n", "# get instrument quotes and conventions from input .csv file \n", "dfQuotes = pd.read_csv(dirName + fileName, sep=\";\", decimal=\",\")\n", "column_names = list(dfQuotes.columns)\n", "\n", "dfQuotes" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "d12b501e-afa0-408d-8ba9-2205768b254d" }, "slideshow": { "slide_type": "slide" } }, "source": [ "### €STR curve" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2020-05-03T11:52:24.309135Z", "start_time": "2020-05-03T11:52:24.251711Z" }, "nbpresent": { "id": "c7187080-80dc-4993-a161-ab2573397f8d" }, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "# Select for a specific date\n", "mon = \"09\"\n", "day = \"24\"\n", "year = \"2025\"\n", "date_str = f\"{day}.{mon}.{year}\"\n", "ref_date = dt.datetime(int(year), int(mon), int(day))\n", "\n", "# get input data for the ESTR curve\n", "dfQuotesOIS = dfQuotes[(dfQuotes[\"Date\"] == date_str) \n", " & (dfQuotes[\"Currency\"] == \"EUR\") \n", " & (dfQuotes[\"UnderlyingIndex\"] == \"EONIA\") \n", " & (dfQuotes[\"Instrument\"] == \"OIS\")]\n", "\n", "ins_spec = sfc.load_specifications_from_pd(dfQuotesOIS, ref_date, holidays)\n", "ins_quotes = dfQuotesOIS[\"Quote\"].tolist()\n", "\n", "\n", "# get estr curve \n", "\n", "estrCurve = bootstrap_curve(\n", " ref_date=ref_date,\n", " curve_id=\"eonia\",\n", " day_count_convention=dfQuotes[\"DayCountFixed\"].tolist()[0], # taken the first entry and assume is valid for all other deposits\n", " instruments=ins_spec,\n", " quotes=ins_quotes,\n", " )" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "f276ffa4-781a-422f-9b22-e5a52057a1f7" }, "slideshow": { "slide_type": "slide" } }, "source": [ "### 3M EURIBOR curve" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2020-05-03T11:52:24.396777Z", "start_time": "2020-05-03T11:52:24.313705Z" }, "nbpresent": { "id": "3dc83439-750a-464c-979b-ec5038b9111c" }, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "# get input data for the 3M EURIBOR curve\n", "dfQuotes3M = dfQuotesOIS = dfQuotes[(dfQuotes[\"Date\"] == date_str) \n", " & (dfQuotes[\"Currency\"] == \"EUR\") \n", " & (dfQuotes[\"UnderlyingIndex\"] == \"EURIBOR\") \n", " & (dfQuotes[\"Instrument\"] == \"IRS\")\n", " & (dfQuotes[\"UnderlyingTenor\"] == \"3M\")]\n", "\n", "\n", "ins_spec_3m = sfc.load_specifications_from_pd(dfQuotes3M, ref_date, holidays)\n", "ins_quotes_3m = dfQuotes3M[\"Quote\"].tolist()\n", "\n", "# set up curve parameters for the 3M EURIBOR curve. The eonia curve is used for bootstrapping\n", "curves = {\"discount_curve\": estrCurve}\n", "\n", "# get 3M euribor curve\n", "euribor3MCurve = bootstrap_curve(\n", " ref_date=ref_date,\n", " curve_id=\"euribor_3m\",\n", " day_count_convention=dfQuotes3M[\"DayCountFixed\"].tolist()[0], # taken the first entry and assume is valid for all other deposits\n", " instruments=ins_spec_3m,\n", " quotes=ins_quotes_3m,\n", " curves=curves,\n", " interpolation_type=InterpolationType.LINEAR_LOG,\n", " extrapolation_type=ExtrapolationType.LINEAR_LOG,\n", ")" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "3fe8f581-ff92-49d5-9b64-b0626e5afc5a" }, "slideshow": { "slide_type": "slide" } }, "source": [ "### 6M EURIBOR curve" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2020-05-03T11:52:24.481091Z", "start_time": "2020-05-03T11:52:24.399354Z" }, "nbpresent": { "id": "ce9d2502-c488-4032-bd41-bd9b9a1ff21a" }, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "# get input data for the 6M EURIBOR curve\n", "dfQuotes6M = dfQuotes[\n", " (dfQuotes[\"Date\"] == date_str)\n", " & (dfQuotes[\"Currency\"] == \"EUR\")\n", " & (dfQuotes[\"UnderlyingIndex\"] == \"EURIBOR\")\n", " & (dfQuotes[\"Instrument\"] == \"TBS\")\n", " & (dfQuotes[\"UnderlyingTenor\"] == \"6M\")\n", "]\n", "ins_spec_tbs = sfc.load_specifications_from_pd(dfQuotes6M, ref_date, holidays)\n", "ins_quotes_tbs = (dfQuotes6M[\"Quote\"] / 10000.0).tolist()\n", "\n", "# set up curve parameters for the 6M EURIBOR curve by adding 3m euribor curve as basis curve\n", "curves[\"basis_curve\"] = euribor3MCurve\n", "\n", "# get 6M euribor curve \n", "euribor6MCurve = bootstrap_curve(\n", " ref_date=ref_date,\n", " curve_id=\"euribor_6m\",\n", " day_count_convention=dfQuotes6M[\"DayCountFixed\"].tolist()[0], # taken the first entry and assume is valid for all other deposits\n", " instruments=ins_spec_tbs,\n", " quotes=ins_quotes_tbs,\n", " curves=curves,\n", " interpolation_type=InterpolationType.LINEAR_LOG,\n", " extrapolation_type=ExtrapolationType.LINEAR_LOG,\n", " # interpolation_type=InterpolationType.HAGAN_DF,\n", " # extrapolation_type=ExtrapolationType.CONSTANT_DF,\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting IR Curves\n", "\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "scrolled": true, "tags": [ "nbsphinx-thumbnail" ] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "estrCurve.plot()\n", "euribor3MCurve.plot()\n", "euribor6MCurve.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Raw Cell Format", "kernelspec": { "display_name": "rivapy", "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.12.11" }, "nbpresent": { "slides": { "12560d27-3deb-41c9-9341-6db487c116c2": { "id": "12560d27-3deb-41c9-9341-6db487c116c2", "prev": "87b25b53-db8e-4fcc-a545-e269a53b7c8c", "regions": { "6f245f0e-bca1-4849-be4f-7965687e8d51": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "3fe8f581-ff92-49d5-9b64-b0626e5afc5a", "part": "whole" }, "id": "6f245f0e-bca1-4849-be4f-7965687e8d51" } } }, "13ab5494-b66a-4255-a79a-c01cd83ed262": { "id": "13ab5494-b66a-4255-a79a-c01cd83ed262", "prev": "7deaa6da-471d-4656-9b11-9f534322b190", "regions": { "848e4960-9a17-4422-90be-0c34993ded15": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "06fb2234-1c14-4663-a772-1511d8def20b", "part": "whole" }, "id": "848e4960-9a17-4422-90be-0c34993ded15" } } }, "47e5a258-d774-4453-a8f6-e6d2189610d9": { "id": "47e5a258-d774-4453-a8f6-e6d2189610d9", "prev": "c49687b1-5855-4ca4-be10-5587536d4eab", "regions": { "ab11d4d4-56ed-49c2-b808-2964cafe6423": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "e169f300-1edd-4f2c-bfdc-32432442cb99", "part": "whole" }, "id": "ab11d4d4-56ed-49c2-b808-2964cafe6423" } } }, "5a08da0f-b6c2-4fae-beb6-9467631bf96a": { "id": "5a08da0f-b6c2-4fae-beb6-9467631bf96a", "prev": "e0fe69d1-a6b4-4b86-953a-1e3903af24d5", "regions": { "cab7fa9f-bad5-4f7d-a046-dc7a00fb1d5e": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "9c2d8e4a-85bb-4df9-828c-caba1a81d43a", "part": "whole" }, "id": "cab7fa9f-bad5-4f7d-a046-dc7a00fb1d5e" } } }, "66b35f00-4433-4a7f-9cf9-c3efeb51461a": { "id": "66b35f00-4433-4a7f-9cf9-c3efeb51461a", "prev": "ae027abc-5cad-4b41-a033-b878bf7e63bd", "regions": { "7a53c14e-eec2-4304-9fe4-bceeab676d4f": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "ccdf8e73-0877-4f3e-b327-816a201ac7da", "part": "whole" }, "id": "7a53c14e-eec2-4304-9fe4-bceeab676d4f" } } }, "6738eaba-9e93-4814-b252-c92ae209b79f": { "id": "6738eaba-9e93-4814-b252-c92ae209b79f", "prev": "ea354e4b-a7d7-4379-ba90-4e1bc2343e54", "regions": { "9779f023-a1d9-43ac-8761-e5f7bdd7279e": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "95e7f380-a9a1-48a4-bbf4-160bc4e940c7", "part": "whole" }, "id": "9779f023-a1d9-43ac-8761-e5f7bdd7279e" } } }, "6c576941-e4a6-408f-a1bf-9aa5fe034734": { "id": "6c576941-e4a6-408f-a1bf-9aa5fe034734", "prev": "825619b2-6adf-46e5-aadf-1dbd671d16c3", "regions": { "c6e6e602-3351-4aad-a0ef-61398c780a67": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "c2269f8d-24ff-4fb8-bdf4-f00906f4fb0f", "part": "whole" }, "id": "c6e6e602-3351-4aad-a0ef-61398c780a67" } } }, "7ce0bc38-7e56-48a5-8408-583216a8dd96": { "id": "7ce0bc38-7e56-48a5-8408-583216a8dd96", "prev": "66b35f00-4433-4a7f-9cf9-c3efeb51461a", "regions": { "3df02f94-1fdf-4de3-926a-af23ac65e451": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "856957c5-943d-41b4-8800-7464f9267f3f", "part": "whole" }, "id": "3df02f94-1fdf-4de3-926a-af23ac65e451" } } }, "7deaa6da-471d-4656-9b11-9f534322b190": { "id": "7deaa6da-471d-4656-9b11-9f534322b190", "prev": "892daf89-1875-4f29-9498-cb0b0cc9114c", "regions": { "eed0d7b7-01f5-4f13-9186-aefe4118e0f7": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "e4995a2c-6887-4072-b60b-fd95fb0b94a3", "part": "whole" }, "id": "eed0d7b7-01f5-4f13-9186-aefe4118e0f7" } } }, "825619b2-6adf-46e5-aadf-1dbd671d16c3": { "id": "825619b2-6adf-46e5-aadf-1dbd671d16c3", "prev": "12560d27-3deb-41c9-9341-6db487c116c2", "regions": { "d1689957-7b3b-40d8-a9e3-cb4967002c77": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "ce9d2502-c488-4032-bd41-bd9b9a1ff21a", "part": "whole" }, "id": "d1689957-7b3b-40d8-a9e3-cb4967002c77" } } }, "87b25b53-db8e-4fcc-a545-e269a53b7c8c": { "id": "87b25b53-db8e-4fcc-a545-e269a53b7c8c", "prev": "a728d2ca-aefa-4a97-a78a-bc5cdf1d5ccb", "regions": { "9eae7801-eeb9-41f5-9e54-f1c9df2bca49": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "3dc83439-750a-464c-979b-ec5038b9111c", "part": "whole" }, "id": "9eae7801-eeb9-41f5-9e54-f1c9df2bca49" } } }, "892daf89-1875-4f29-9498-cb0b0cc9114c": { "id": "892daf89-1875-4f29-9498-cb0b0cc9114c", "prev": "47e5a258-d774-4453-a8f6-e6d2189610d9", "regions": { "65e7b40e-6b5b-4832-867d-801d73c4e4cd": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "4fafc065-ccf6-430e-9978-eca652d87838", "part": "whole" }, "id": "65e7b40e-6b5b-4832-867d-801d73c4e4cd" } } }, "a24f7a9a-7d94-459c-98ec-24565513ce63": { "id": "a24f7a9a-7d94-459c-98ec-24565513ce63", "layout": "grid", "prev": null, "regions": { "adb16634-1243-41c1-b1bc-61b58b9209ee": { "attrs": { "height": 1, "pad": 0.01, "treemap:weight": 1, "width": -2.3333333333333335, "x": 0, "y": 0 }, "content": { "cell": "f4223dad-974f-4861-a042-6482a68d5b2a", "part": "whole" }, "id": "adb16634-1243-41c1-b1bc-61b58b9209ee" } } }, "a621640b-d351-40d1-98e2-d239f07ec24a": { "id": "a621640b-d351-40d1-98e2-d239f07ec24a", "prev": "e06f2136-35d2-4915-9f44-5aa1b09995b1", "regions": { "7e15332d-3289-4e23-b185-c1aff629a3bf": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "ad928f00-82ea-46f2-aadc-1d45c53e2b2f", "part": "whole" }, "id": "7e15332d-3289-4e23-b185-c1aff629a3bf" } } }, "a728d2ca-aefa-4a97-a78a-bc5cdf1d5ccb": { "id": "a728d2ca-aefa-4a97-a78a-bc5cdf1d5ccb", "prev": "d4664637-42bf-4ad2-988d-7f27f3bebbe6", "regions": { "f650a095-b099-4b20-a899-29c83ab86f58": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "f276ffa4-781a-422f-9b22-e5a52057a1f7", "part": "whole" }, "id": "f650a095-b099-4b20-a899-29c83ab86f58" } } }, "ae027abc-5cad-4b41-a033-b878bf7e63bd": { "id": "ae027abc-5cad-4b41-a033-b878bf7e63bd", "prev": "a621640b-d351-40d1-98e2-d239f07ec24a", "regions": { "92ca3e41-49a7-49fc-a128-91b70af25b70": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "7bba5d24-ed5c-4596-b638-feb72807b995", "part": "whole" }, "id": "92ca3e41-49a7-49fc-a128-91b70af25b70" } } }, "b8e8de9d-f14f-4114-ba07-6e1d05a8eaf0": { "id": "b8e8de9d-f14f-4114-ba07-6e1d05a8eaf0", "prev": "e73fcd5b-91ba-4180-aa22-f1eabf7c6fba", "regions": { "c549266e-e768-44c4-b8a0-6c178d418520": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "cb9932a0-594c-44a7-bdc3-fc70f5996990", "part": "whole" }, "id": "c549266e-e768-44c4-b8a0-6c178d418520" } } }, "bda60a1b-c673-47d9-b38c-5f9864ebe180": { "id": "bda60a1b-c673-47d9-b38c-5f9864ebe180", "prev": "b8e8de9d-f14f-4114-ba07-6e1d05a8eaf0", "regions": { "845f22ec-790c-4aa8-8ba2-c629c6997477": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "94fb8021-0811-47af-a2fe-90efbbe4a3d9", "part": "whole" }, "id": "845f22ec-790c-4aa8-8ba2-c629c6997477" } } }, "c49687b1-5855-4ca4-be10-5587536d4eab": { "id": "c49687b1-5855-4ca4-be10-5587536d4eab", "prev": "6738eaba-9e93-4814-b252-c92ae209b79f", "regions": { "f5e1d41c-6e75-413c-924e-1dad0c294be1": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "e37b2715-afad-4967-ad31-817add74ad12", "part": "whole" }, "id": "f5e1d41c-6e75-413c-924e-1dad0c294be1" } } }, "d1c45966-42d9-4334-8683-c0b8043a2f3e": { "id": "d1c45966-42d9-4334-8683-c0b8043a2f3e", "prev": "5a08da0f-b6c2-4fae-beb6-9467631bf96a", "regions": { "4257d537-45e3-4387-8643-cfec4a407f44": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "d12b501e-afa0-408d-8ba9-2205768b254d", "part": "whole" }, "id": "4257d537-45e3-4387-8643-cfec4a407f44" } } }, "d4664637-42bf-4ad2-988d-7f27f3bebbe6": { "id": "d4664637-42bf-4ad2-988d-7f27f3bebbe6", "prev": "d1c45966-42d9-4334-8683-c0b8043a2f3e", "regions": { "3ddf572f-e3f5-4c68-a3da-cf00fcfd63ac": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "c7187080-80dc-4993-a161-ab2573397f8d", "part": "whole" }, "id": "3ddf572f-e3f5-4c68-a3da-cf00fcfd63ac" } } }, "e06f2136-35d2-4915-9f44-5aa1b09995b1": { "id": "e06f2136-35d2-4915-9f44-5aa1b09995b1", "prev": "f9f9ce5b-177f-4ad1-9072-36415757b7af", "regions": { "5ad2a505-95eb-4ad5-b0df-590a4de20a0a": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "cecbd3b1-a5bd-4541-be70-22fd19542177", "part": "whole" }, "id": "5ad2a505-95eb-4ad5-b0df-590a4de20a0a" } } }, "e0fe69d1-a6b4-4b86-953a-1e3903af24d5": { "id": "e0fe69d1-a6b4-4b86-953a-1e3903af24d5", "prev": "bda60a1b-c673-47d9-b38c-5f9864ebe180", "regions": { "dcc37db1-58e2-4fb2-9556-0fbcfd78c712": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "0ec13b44-f3ac-417d-9219-4c330f48b7d0", "part": "whole" }, "id": "dcc37db1-58e2-4fb2-9556-0fbcfd78c712" } } }, "e73fcd5b-91ba-4180-aa22-f1eabf7c6fba": { "id": "e73fcd5b-91ba-4180-aa22-f1eabf7c6fba", "prev": "7ce0bc38-7e56-48a5-8408-583216a8dd96", "regions": { "cc4d411f-b738-4cbb-8321-16a4afdfdc92": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "036b98eb-32be-4943-aa59-6b91dca66394", "part": "whole" }, "id": "cc4d411f-b738-4cbb-8321-16a4afdfdc92" } } }, "ea354e4b-a7d7-4379-ba90-4e1bc2343e54": { "id": "ea354e4b-a7d7-4379-ba90-4e1bc2343e54", "prev": "a24f7a9a-7d94-459c-98ec-24565513ce63", "regions": { "80e61f5b-8394-4ffe-afb1-e2a054cec776": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "54f8dbf2-4ff5-4247-801c-6f1cbf9bde2c", "part": "whole" }, "id": "80e61f5b-8394-4ffe-afb1-e2a054cec776" } } }, "f9f9ce5b-177f-4ad1-9072-36415757b7af": { "id": "f9f9ce5b-177f-4ad1-9072-36415757b7af", "prev": "13ab5494-b66a-4255-a79a-c01cd83ed262", "regions": { "b4c6d67d-a6ad-43ee-ab0e-3d70481cb95e": { "attrs": { "height": 0.8, "width": 0.8, "x": 0.1, "y": 0.1 }, "content": { "cell": "aa223212-9255-476f-b72f-5470cc5925c1", "part": "whole" }, "id": "b4c6d67d-a6ad-43ee-ab0e-3d70481cb95e" } } } }, "themes": {} }, "toc": { "base_numbering": 1, "nav_menu": { "height": "103px", "width": "252px" }, "number_sections": true, "sideBar": true, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": "block", "toc_window_display": true }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }