{ "cells": [ { "cell_type": "markdown", "id": "b7fefde3-a591-4ec6-91f4-dab1f4d0e961", "metadata": {}, "source": [ "# Inflation Indexes and Curves 2 (Quantlib comparison)\n", "\n", "This guide replicates and is a comparison to the Quantlib tutorial page at\n", "https://www.quantlibguide.com/Inflation%20indexes%20and%20curves.html\n", "\n", "## Inflation Indexes\n", "\n", "Historical index fixings in *rateslib* should be indexed to the 1st of the appropriate inflation month." ] }, { "cell_type": "code", "execution_count": 1, "id": "36ce78fa-5eba-4062-9bee-c8429465a867", "metadata": {}, "outputs": [], "source": [ "from rateslib import *\n", "from pandas import Series" ] }, { "cell_type": "code", "execution_count": 2, "id": "599b18ea-97fb-4d63-8a61-13d4163401c0", "metadata": {}, "outputs": [], "source": [ "inflation_fixings = [\n", " (dt(2022, 1, 1), 110.70),\n", " (dt(2022, 2, 1), 111.74),\n", " (dt(2022, 3, 1), 114.46),\n", " (dt(2022, 4, 1), 115.11),\n", " (dt(2022, 5, 1), 116.07),\n", " (dt(2022, 6, 1), 117.01),\n", " (dt(2022, 7, 1), 117.14),\n", " (dt(2022, 8, 1), 117.85),\n", " (dt(2022, 9, 1), 119.26),\n", " (dt(2022, 10, 1), 121.03),\n", " (dt(2022, 11, 1), 120.95),\n", " (dt(2022, 12, 1), 120.52),\n", " (dt(2023, 1, 1), 120.27),\n", " (dt(2023, 2, 1), 121.24),\n", " (dt(2023, 3, 1), 122.34),\n", " (dt(2023, 4, 1), 123.12),\n", " (dt(2023, 5, 1), 123.15),\n", " (dt(2023, 6, 1), 123.47),\n", " (dt(2023, 7, 1), 123.36),\n", " (dt(2023, 8, 1), 124.03),\n", " (dt(2023, 9, 1), 124.43),\n", " (dt(2023, 10, 1), 124.54),\n", " (dt(2023, 11, 1), 123.85),\n", " (dt(2023, 12, 1), 124.05),\n", " (dt(2024, 1, 1), 123.60),\n", " (dt(2024, 2, 1), 124.37),\n", " (dt(2024, 3, 1), 125.31),\n", " (dt(2024, 4, 1), 126.05),\n", "]\n", "dates, values = zip(*inflation_fixings)\n", "fixings = Series(values, dates)" ] }, { "cell_type": "markdown", "id": "fe8d5863-766e-4e9b-ae67-1261a71e82f5", "metadata": {}, "source": [ "*Rateslib* contains an `index_value` method that will determine such for a given reference value date and other common parameters." ] }, { "cell_type": "code", "execution_count": 3, "id": "a0a399a0-04b3-47ed-95a3-ad6b128504f5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(125.31)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "index_value(\n", " index_lag=0,\n", " index_method=\"monthly\",\n", " index_fixings=fixings,\n", " index_date=dt(2024, 3, 15)\n", ")" ] }, { "cell_type": "markdown", "id": "eb9cc687-77d3-4d34-b660-f46246da2270", "metadata": {}, "source": [ "For example to replicate the *Quantlib* example of a lagged reference date we can use:" ] }, { "cell_type": "code", "execution_count": 4, "id": "952b0c42-4e83-4e5d-a50b-353a921210b0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(124.79451612903226)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "index_value(\n", " index_lag=3,\n", " index_method=\"daily\",\n", " index_fixings=fixings,\n", " index_date=dt(2024, 5, 15)\n", ")" ] }, { "cell_type": "markdown", "id": "25b970b3-67a3-4f6d-ad07-5425bd023f61", "metadata": {}, "source": [ "## Inflation Curves" ] }, { "cell_type": "markdown", "id": "262f443d-b6fb-48c8-89ff-da5bc52e0dcd", "metadata": {}, "source": [ "Create a nominal discount curve for cashflows. Calibrated to a 3% continuously compounded rate." ] }, { "cell_type": "code", "execution_count": 5, "id": "be29773c-7582-4474-a180-a930f8a8a73e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SUCCESS: `func_tol` reached after 8 iterations (levenberg_marquardt), `f_val`: 4.2178219398368675e-19, `time`: 0.0071s\n" ] } ], "source": [ "nominal_curve = Curve(\n", " nodes={dt(2024, 5, 11): 1.0, dt(2074, 5, 18): 1.0},\n", " interpolation=\"log_linear\",\n", " convention=\"Act365F\",\n", " id=\"discount\"\n", ")\n", "solver1 = Solver(\n", " curves=[nominal_curve],\n", " instruments=[Value(dt(2074, 5, 11), metric=\"cc_zero_rate\", curves=\"discount\")],\n", " s=[3.0],\n", " id=\"rates\",\n", " instrument_labels=[\"nominal\"],\n", ")" ] }, { "cell_type": "markdown", "id": "5845daa2-9245-4c25-80e2-541bc7a2ff95", "metadata": {}, "source": [ "Now create an inflation curve, based on the last known CPI print, calibrated with zero coupon inflation swaps rates. Notice that an inflation curve starts as of the last known fixing as its `index_base`. This is similar to *Quantlib*, not be design, but by necessity since this is the only information we have that can define the start of the curve." ] }, { "cell_type": "code", "execution_count": 6, "id": "5f9577b4-1d49-4b88-a5f4-aba19f9ca198", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SUCCESS: `func_tol` reached after 8 iterations (levenberg_marquardt), `f_val`: 1.4302416694642844e-17, `time`: 0.0439s\n" ] } ], "source": [ "inflation_curve = Curve(\n", " nodes={\n", " dt(2024, 4, 1): 1.0, # <- last known inflation print.\n", " dt(2025, 5, 11): 1.0, # 1y\n", " dt(2026, 5, 11): 1.0, # 2y\n", " dt(2027, 5, 11): 1.0, # 3y\n", " dt(2028, 5, 11): 1.0, # 4y\n", " dt(2029, 5, 11): 1.0, # 5y\n", " dt(2031, 5, 11): 1.0, # 7y\n", " dt(2034, 5, 11): 1.0, # 10y\n", " dt(2036, 5, 11): 1.0, # 12y\n", " dt(2039, 5, 11): 1.0, # 15y\n", " dt(2044, 5, 11): 1.0, # 20y\n", " dt(2049, 5, 11): 1.0, # 25y\n", " dt(2054, 5, 11): 1.0, # 30y\n", " dt(2064, 5, 11): 1.0, # 40y\n", " dt(2074, 5, 11): 1.0, # 50y\n", " },\n", " interpolation=\"log_linear\",\n", " convention=\"Act365F\",\n", " index_base=126.05,\n", " index_lag=0,\n", " id=\"inflation\"\n", ")\n", "solver = Solver(\n", " pre_solvers=[solver1],\n", " curves=[inflation_curve],\n", " instruments=[\n", " ZCIS(dt(2024, 5, 11), \"1y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"2y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"3y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"4y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"5y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"7y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"10y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"12y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"15y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"20y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"25y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"30y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"40y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"50y\", spec=\"eur_zcis\", curves=[\"inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ],\n", " s=[2.93, 2.95, 2.965, 2.98, 3.0, 3.06, 3.175, 3.243, 3.293, 3.338, 3.348, 3.348, 3.308, 3.228],\n", " instrument_labels=[\"1y\", \"2y\", \"3y\", \"4y\", \"5y\", \"7y\", \"10y\", \"12y\", \"15\", \"20y\", \"25y\", \"30y\", \"40y\", \"50y\"],\n", " id=\"zcis\",\n", ") " ] }, { "cell_type": "markdown", "id": "8a30887d-1c92-4a3e-9c34-d26e7fd5d3dc", "metadata": {}, "source": [ "The data can be output to a table or plotted as below." ] }, { "cell_type": "code", "execution_count": 7, "id": "a1bcfe1f-9830-4245-8624-c09118589dfe", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(
,\n", " ,\n", " [])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "inflation_curve.plot(\"1m\")" ] }, { "cell_type": "markdown", "id": "2e150b3e-5924-4776-891a-150b7a233db9", "metadata": {}, "source": [ "Some of the forecast values from the curve can be obtained directly from *Curve* methods." ] }, { "cell_type": "code", "execution_count": 8, "id": "f06d993b-6eae-4b9f-a74f-87a9db8e6b43", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inflation_curve.index_value(dt(2027, 4, 1), index_lag=3, interpolation=\"monthly\")" ] }, { "cell_type": "code", "execution_count": 9, "id": "38426aa2-d030-4ed2-a016-b0f64eaed561", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inflation_curve.index_value(dt(2027, 4, 1), index_lag=0, interpolation=\"monthly\")" ] }, { "cell_type": "code", "execution_count": 10, "id": "a66eb510-f446-40b4-9746-0ae3f57c466b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inflation_curve.index_value(dt(2027, 5, 15), index_lag=3, interpolation=\"monthly\")" ] }, { "cell_type": "markdown", "id": "9c81acc5-e233-4b45-8b89-efe3ba8b0b2a", "metadata": {}, "source": [ "## Seasonality\n", "\n", "The way *rateslib* handles seasonality is to replicate it via its *CompositeCurve* framework.\n", "If we create a *Curve* with **nodes** replicating factors we might create something like:\n", " " ] }, { "cell_type": "code", "execution_count": 11, "id": "b92772d3-73d7-403b-9538-23399006eea3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SUCCESS: `func_tol` reached after 5 iterations (levenberg_marquardt), `f_val`: 6.966362122021486e-12, `time`: 0.0071s\n" ] } ], "source": [ "seasonality = Curve(\n", " nodes={\n", " dt(2024, 4, 1): 1.0,\n", " dt(2025, 3, 1): 1.0,\n", " dt(2025, 4, 1): 1.0,\n", " dt(2025, 5, 1): 1.0,\n", " dt(2025, 6, 1): 1.0,\n", " dt(2025, 7, 1): 1.0,\n", " dt(2074, 5, 11): 1.0\n", " },\n", " convention=\"Act365F\",\n", " id=\"season\"\n", ")\n", "solver_s2 = Solver(\n", " curves=[seasonality],\n", " instruments=[\n", " Value(dt(2024, 4, 1), curves=\"season\", metric=\"o/n_rate\"),\n", " Value(dt(2025, 3, 1), curves=\"season\", metric=\"o/n_rate\"),\n", " Value(dt(2025, 4, 1), curves=\"season\", metric=\"o/n_rate\"),\n", " Value(dt(2025, 5, 1), curves=\"season\", metric=\"o/n_rate\"),\n", " Value(dt(2025, 6, 1), curves=\"season\", metric=\"o/n_rate\"),\n", " Value(dt(2025, 7, 1), curves=\"season\", metric=\"o/n_rate\"),\n", " ],\n", " s=[0.0, -0.3, 0.3, -0.4, 0.4, 0.0],\n", " instrument_labels=[\"s0\", \"s1\", \"s2\", \"s3\", \"s4\", \"s5\"],\n", " id=\"seasonality\",\n", ")" ] }, { "cell_type": "code", "execution_count": 12, "id": "9ccc7e5d-3c57-49c5-9e40-8f1d139246ba", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(
,\n", " ,\n", " [])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "seasonality.plot(\"1b\", right=dt(2026, 4, 1))" ] }, { "cell_type": "code", "execution_count": 13, "id": "f7237fe8-9223-4a98-b53e-b65a00b675c6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(
,\n", " ,\n", " [])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "adjusted_inflation = CompositeCurve(curves=[inflation_curve, seasonality], id=\"adj_inflation\")\n", "adjusted_inflation.plot(\"1b\", right=dt(2028, 1, 1))" ] }, { "cell_type": "code", "execution_count": 14, "id": "8e1990c8-1c7e-45c4-99f0-18e459deaa6e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SUCCESS: `func_tol` reached after 4 iterations (levenberg_marquardt), `f_val`: 1.0300554017220054e-13, `time`: 0.0299s\n" ] } ], "source": [ "solver = Solver(\n", " pre_solvers=[solver1, solver_s2],\n", " curves=[adjusted_inflation, inflation_curve],\n", " instruments=[\n", " ZCIS(dt(2024, 5, 11), \"1y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"2y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"3y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"4y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"5y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"7y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"10y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"12y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"15y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"20y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"25y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"30y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"40y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ZCIS(dt(2024, 5, 11), \"50y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], leg2_index_fixings=fixings),\n", " ],\n", " s=[2.93, 2.95, 2.965, 2.98, 3.0, 3.06, 3.175, 3.243, 3.293, 3.338, 3.348, 3.348, 3.308, 3.228],\n", " instrument_labels=[\"1y\", \"2y\", \"3y\", \"4y\", \"5y\", \"7y\", \"10y\", \"12y\", \"15\", \"20y\", \"25y\", \"30y\", \"40y\", \"50y\"],\n", " id=\"zcis\",\n", ") " ] }, { "cell_type": "markdown", "id": "2217befd-1b5d-4f7e-9707-bad8029ebfac", "metadata": {}, "source": [ "We sample a few dates" ] }, { "cell_type": "code", "execution_count": 15, "id": "6be07a61-8249-4ebc-abf8-4e5d847f15f7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "128.19527824617822 128.36352410657304 128.58994830252666 128.8580493924425\n" ] } ], "source": [ "f1 = adjusted_inflation.index_value(dt(2025, 3, 1), index_lag=0)\n", "f2 = adjusted_inflation.index_value(dt(2025, 4, 1), index_lag=0)\n", "f3 = adjusted_inflation.index_value(dt(2025, 5, 1), index_lag=0)\n", "f4 = adjusted_inflation.index_value(dt(2025, 6, 1), index_lag=0)\n", "print(float(f1), float(f2), float(f3), float(f4))" ] }, { "cell_type": "markdown", "id": "96d965af-409a-46e7-8955-1b6395f23326", "metadata": {}, "source": [ "These values compare to the underlying, non-seasonaility adjusted curves as follows:" ] }, { "cell_type": "code", "execution_count": 16, "id": "58804e8d-6dcd-433d-9386-67e993b849f1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "128.1952781881416 128.39623301907898 128.5910053629069 128.9028908233816\n" ] } ], "source": [ "f1 = inflation_curve.index_value(dt(2025, 3, 1), index_lag=0)\n", "f2 = inflation_curve.index_value(dt(2025, 4, 1), index_lag=0)\n", "f3 = inflation_curve.index_value(dt(2025, 5, 1), index_lag=0)\n", "f4 = inflation_curve.index_value(dt(2025, 6, 1), index_lag=0)\n", "print(float(f1), float(f2), float(f3), float(f4))" ] }, { "cell_type": "markdown", "id": "bf1f3367-21f5-439f-89fd-9df3c078ad62", "metadata": {}, "source": [ "The trick here is obviously to find a representation of a `seasonaility` curve that matches one's expectation of seasonality adjustments. Here, a `Solver` calibration was used to separately solve the `seasonality` curve to inflation rate adjustments." ] }, { "cell_type": "markdown", "id": "6da82d38-4183-4adf-83d8-fd57cf7ab40e", "metadata": {}, "source": [ "## Inflation Swap and DV01\n", "\n", "We can easily construct a ZCIS or other type of inflation based *instrument* and use the native `delta` and `gamma` methods associated with a `Solver` to extract risk sensitivities." ] }, { "cell_type": "code", "execution_count": 17, "id": "58a79013-bf18-415b-bc85-8e0ad6fe2afa", "metadata": {}, "outputs": [], "source": [ "zcis = ZCIS(dt(2024, 3, 11), \"4y\", spec=\"eur_zcis\", curves=[\"adj_inflation\", \"discount\"], fixed_rate=3.0, leg2_index_fixings=fixings)" ] }, { "cell_type": "code", "execution_count": 18, "id": "b557f116-c639-4879-8a4b-d7acca8f8407", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zcis.rate(solver=solver)" ] }, { "cell_type": "code", "execution_count": 19, "id": "393b055d-bd42-4311-b067-99ff3723d597", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zcis.npv(solver=solver)" ] }, { "cell_type": "code", "execution_count": 20, "id": "8b9b7df6-f9fa-4724-be76-5dfc427ec5ea", "metadata": {}, "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", "
  local_ccyeur
  display_ccyeur
typesolverlabel 
instrumentsratesnominal1
seasonalitys0-1
s10
s20
s30
s40
s5-0
zcis1y4
2y-23
3y93
4y297
5y-0
7y0
10y0
12y0
150
20y-0
25y-0
30y-0
40y-0
50y-0
\n" ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zcis.delta(solver=solver).style.format(precision=0)" ] }, { "cell_type": "code", "execution_count": 21, "id": "ea42c6e4-7001-4c6c-883b-a1b07bca9aef", "metadata": {}, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
    typeinstruments
    solverratesseasonalityzcis
    labelnominals0s1s2s3s4s51y2y3y4y5y7y10y12y1520y25y30y40y50y
local_ccydisplay_ccytypesolverlabel                     
eureurinstrumentsratesnominal-0.00.0-0.0-0.0-0.0-0.00.0-0.00.0-0.0-0.10.00.0-0.00.00.00.00.00.00.0-0.0
seasonalitys00.0-0.0-0.0-0.0-0.0-0.00.0-0.00.0-0.0-0.0-0.0-0.00.0-0.0-0.0-0.0-0.0-0.0-0.00.0
s1-0.0-0.00.00.00.00.0-0.00.0-0.00.00.0-0.0-0.00.0-0.0-0.0-0.0-0.0-0.0-0.00.0
s2-0.0-0.00.00.00.00.0-0.00.0-0.00.00.0-0.0-0.00.0-0.0-0.0-0.0-0.0-0.0-0.00.0
s3-0.0-0.00.00.00.00.0-0.00.0-0.00.00.0-0.0-0.00.0-0.0-0.0-0.0-0.0-0.0-0.00.0
s4-0.0-0.00.00.00.00.0-0.00.0-0.00.00.0-0.0-0.00.0-0.0-0.0-0.0-0.0-0.0-0.00.0
s50.00.0-0.0-0.0-0.0-0.00.0-0.00.0-0.0-0.0-0.0-0.00.0-0.0-0.0-0.0-0.0-0.0-0.00.0
zcis1y-0.0-0.00.00.00.00.0-0.0-0.0-0.00.00.0-0.0-0.00.0-0.0-0.0-0.0-0.0-0.0-0.00.0
2y0.00.0-0.0-0.0-0.0-0.00.0-0.00.0-0.0-0.00.00.0-0.00.00.00.00.00.00.0-0.0
3y-0.0-0.00.00.00.00.0-0.00.0-0.0-0.00.0-0.0-0.00.0-0.0-0.0-0.00.0-0.00.00.0
4y-0.1-0.00.00.00.00.0-0.00.0-0.00.00.1-0.00.00.0-0.0-0.0-0.0-0.0-0.0-0.00.0
5y0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.00.0-0.0-0.00.0-0.0-0.0-0.00.0-0.00.0-0.0-0.00.0
7y0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.00.0-0.00.0-0.00.00.00.0-0.00.0-0.00.00.0-0.0
10y-0.00.00.00.00.00.00.00.0-0.00.00.0-0.00.0-0.0-0.00.0-0.00.0-0.0-0.00.0
12y0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.00.0-0.0-0.0-0.00.0-0.00.0-0.00.0-0.00.00.0-0.0
150.0-0.0-0.0-0.0-0.0-0.0-0.0-0.00.0-0.0-0.00.0-0.00.0-0.00.0-0.00.0-0.0-0.00.0
20y0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.00.0-0.0-0.0-0.00.0-0.00.0-0.00.0-0.00.00.0-0.0
25y0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.00.00.0-0.00.0-0.00.0-0.00.0-0.00.0-0.0-0.00.0
30y0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.00.0-0.0-0.0-0.00.0-0.00.0-0.00.0-0.00.00.0-0.0
40y0.0-0.0-0.0-0.0-0.0-0.0-0.0-0.00.00.0-0.0-0.00.0-0.00.0-0.00.0-0.00.0-0.00.0
50y-0.00.00.00.00.00.00.00.0-0.00.00.00.0-0.00.0-0.00.0-0.00.0-0.00.0-0.0
\n" ], "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zcis.gamma(solver=solver).style.format(precision=1)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.13.0" } }, "nbformat": 4, "nbformat_minor": 5 }