In [11]:
%load_ext autoreload
%autoreload 2
import plotly
import plotly.graph_objs as go
import logging
from quantfinlib.util import configure_logger
import numpy as np
from quantfinlib.datasets import load_treasury_rates
from plotly.express.colors import sample_colorscale
plotly.offline.init_notebook_mode()
configure_logger(verbosity=logging.WARN, log_to_file=False)
The autoreload extension is already loaded. To reload it, use:
%reload_ext autoreload
DAILY TREASURY PAR YIELD CURVE RATES
In [12]:
print('\n'.join(load_treasury_rates.__doc__.strip().split('\n')[1:10]))
The dataset provides a snapshot of historical daily interest rates for various U.S. Treasury bond maturities.
Source:https://home.treasury.gov/resource-center/data-chart-center/interest-rates/TextView?type=daily_treasury_yield_curve
DATE | 1m | 2m | 3m | 4m | 6m | 1y | 2y | 3y | 5y | 7y | 10y | 20y | 30y |
------------|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|
1990-01-02 | NaN | NaN | 7.83| NaN | 7.89| 7.81| 7.87| 7.90| 7.87| 7.98| 7.94| NaN | 8.00|
1990-01-03 | NaN | NaN | 7.89| NaN | 7.94| 7.85| 7.94| 7.96| 7.92| 8.04| 7.99| NaN | 8.04|
...
In [13]:
df = load_treasury_rates()
fig = go.Figure()
groups = {
'short': [f'{str(i)}m' for i in [1,2,3,4,6]],
'mid': [f'{str(i)}y' for i in [1,2,3,5]],
'long': [f'{str(i)}y' for i in [7,10,20,30]]
}
colorscales = ['Algae', 'Burg', 'ice']
for i, (group, maturities) in enumerate(groups.items()):
c = sample_colorscale(colorscales[i], list(np.linspace(0.2, 0.7, len(maturities))))
for k, m in enumerate(maturities):
fig.add_trace(go.Scatter(
x=df.index,
y=df[m],
mode='lines',
name=m,
line=dict(color=c[k]),
legendgroup=group,
hovertemplate="%{y:.2f}%",
))
fig.update_layout(
title='Treasury rates',
xaxis_title='Date',
yaxis_title='Yield (%)',
legend_title='Maturity',
template='plotly_white',
legend_x=-0.11,
width=1200,
height=600,
font=dict(size=12),
margin=dict(l=40, r=40, t=40, b=40)
)
fig.show()