Initial Update

This commit is contained in:
jeroen
2023-02-15 18:43:24 +01:00
parent bcaade3a66
commit 463535ef9c
9 changed files with 359 additions and 111 deletions

View File

@@ -6,6 +6,7 @@ from itertools import cycle
import logging
import os
import pandas as pd
from matplotlib import pyplot as plt
from openbb_terminal.config_terminal import theme
@@ -39,6 +40,7 @@ def plot_estr(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Euro Short-Term Rate (ESTR)
@@ -83,13 +85,21 @@ def plot_estr(
if external_axes is None:
theme.visualize_output()
if export:
if "[Percent]" in ID_TO_NAME[series_id]:
# Check whether it is a percentage, relevant for exporting
df_transformed = pd.DataFrame(df, columns=[series_id]) / 100
else:
df_transformed = pd.DataFrame(df, columns=[series_id])
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"estr, {series_id}",
df,
)
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
series_id,
df_transformed,
sheet_name
)
@log_start_end(log=logger)
@@ -101,6 +111,7 @@ def display_ecb_yield_curve(
external_axes: Optional[List[plt.Axes]] = None,
raw: bool = False,
export: str = "",
sheet_name: str = "",
):
"""Display yield curve based on ECB Treasury rates for a specified date.
@@ -175,5 +186,6 @@ def display_ecb_yield_curve(
export,
os.path.dirname(os.path.abspath(__file__)),
"ecbycrv",
rates,
pd.DataFrame(rates, columns=[date_of_yield]) / 100,
sheet_name
)

View File

@@ -5,6 +5,7 @@ from typing import Optional, List
from itertools import cycle
import logging
import os
import pandas as pd
from matplotlib import pyplot as plt
@@ -101,7 +102,7 @@ def plot_cmn(
export,
os.path.dirname(os.path.abspath(__file__)),
f"cmn, {maturity}",
df,
pd.DataFrame(df, columns=[maturity]) / 100,
)
@@ -171,7 +172,7 @@ def plot_tips(
export,
os.path.dirname(os.path.abspath(__file__)),
f"tips, {maturity}",
df,
pd.DataFrame(df, columns=[maturity]) / 100,
)
@@ -234,5 +235,5 @@ def plot_tbill(
export,
os.path.dirname(os.path.abspath(__file__)),
f"tbill, {maturity}",
df,
pd.DataFrame(df, columns=[maturity]) / 100,
)

View File

@@ -65,27 +65,27 @@ class FixedIncomeController(BaseController):
estr_parameter_to_fred_id = {
"volume_weighted_trimmed_mean_rate": "ECBESTRVOLWGTTRMDMNRT",
"total_volume": "ECBESTRTOTVOL",
"number_of_transactions": "ECBESTRNUMTRANS",
"rate_at_75th_percentile_of_volume": "ECBESTRRT75THPCTVOL",
"number_of_active_banks": "ECBESTRNUMACTBANKS",
"total_volume": "ECBESTRTOTVOL",
"share_of_volume_of_the_5_largest_active_banks": "ECBESTRSHRVOL5LRGACTBNK",
"rate_at_75th_percentile_of_volume": "ECBESTRRT75THPCTVOL",
"rate_at_25th_percentile_of_volume": "ECBESTRRT25THPCTVOL",
}
estr_parameter_to_ecb_id = {
"volume_weighted_trimmed_mean_rate": "EST.B.EU000A2X2A25.WT",
"total_volume": "EST.B.EU000A2X2A25.TT",
"number_of_transactions": "EST.B.EU000A2X2A25.NT",
"rate_at_75th_percentile_of_volume": "EST.B.EU000A2X2A25.R75",
"number_of_active_banks": "EST.B.EU000A2X2A25.NB",
"total_volume": "EST.B.EU000A2X2A25.TT",
"share_of_volume_of_the_5_largest_active_banks": "EST.B.EU000A2X2A25.VL",
"rate_at_75th_percentile_of_volume": "EST.B.EU000A2X2A25.R75",
"rate_at_25th_percentile_of_volume": "EST.B.EU000A2X2A25.R25",
}
sofr_parameter_to_fred_id = {
"overnight": "SOFR",
"30_day": "SOFR30DAYAVG",
"90_day": "SOFR90DAYAVG",
"180_day": "SOFR180DAYAVG",
"30_day_average": "SOFR30DAYAVG",
"90_day_average": "SOFR90DAYAVG",
"180_day_average": "SOFR180DAYAVG",
"index": "SOFRINDEX",
}
sonia_parameter_to_fred_id = {
@@ -248,7 +248,8 @@ class FixedIncomeController(BaseController):
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="estr",
description="Get Euro Short-Term Rate data",
description="The euro short-term rate (€STR) reflects the wholesale "
"euro unsecured overnight borrowing costs of banks located in the euro area."
)
parser.add_argument(
"-p",
@@ -285,6 +286,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
elif ns_parser.source == "ECB":
ecb_view.plot_estr(
@@ -292,6 +296,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -301,7 +308,8 @@ class FixedIncomeController(BaseController):
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="sofr",
description="Get Secured Overnight Financing Rate (SOFR) data",
description="Get Secured Overnight Financing Rate (SOFR) data from "
"the Federal Reserve Bank of New York",
)
parser.add_argument(
"-p",
@@ -338,6 +346,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
elif ns_parser.source == "NYFED":
nyfed_view.plot_sofr(
@@ -345,6 +356,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -390,6 +404,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -435,6 +452,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -483,6 +503,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -522,12 +545,18 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
elif ns_parser.source == "NYFED":
nyfed_view.plot_fftr(
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -577,6 +606,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
elif ns_parser.source == "NYFED":
nyfed_view.plot_effr(
@@ -584,6 +616,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -633,6 +668,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
elif ns_parser.source == "NYFED":
nyfed_view.plot_obfr(
@@ -640,6 +678,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -678,6 +719,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -717,6 +761,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -756,6 +803,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -804,6 +854,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -843,6 +896,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -882,6 +938,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -923,6 +982,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -986,6 +1048,9 @@ class FixedIncomeController(BaseController):
start_date=ns_parser.start_date,
end_date=ns_parser.end_date,
export=ns_parser.export,
sheet_name=" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -1053,6 +1118,9 @@ class FixedIncomeController(BaseController):
start_date=ns_parser.start_date,
end_date=ns_parser.end_date,
export=ns_parser.export,
sheet_name=" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -1102,6 +1170,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
sheet_name=" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -1151,6 +1222,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -1199,6 +1273,9 @@ class FixedIncomeController(BaseController):
date=ns_parser.date.strftime("%Y-%m-%d") if ns_parser.date else "",
raw=ns_parser.raw,
export=ns_parser.export,
sheet_name=" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -1246,6 +1323,9 @@ class FixedIncomeController(BaseController):
date=ns_parser.date.strftime("%Y-%m-%d") if ns_parser.date else "",
raw=ns_parser.raw,
export=ns_parser.export,
sheet_name=" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -1319,6 +1399,9 @@ class FixedIncomeController(BaseController):
aaa_only=ns_parser.aaa_only,
raw=ns_parser.raw,
export=ns_parser.export,
sheet_name=" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -1369,6 +1452,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
elif ns_parser.source == "EconDB":
econdb_view.plot_tbill(
@@ -1376,6 +1462,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -1434,6 +1523,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
elif ns_parser.source == "EconDB":
econdb_view.plot_cmn(
@@ -1441,6 +1533,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -1500,6 +1595,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
elif ns_parser.source == "EconDB":
econdb_view.plot_tips(
@@ -1507,6 +1605,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -1552,6 +1653,9 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)
@log_start_end(log=logger)
@@ -1597,4 +1701,7 @@ class FixedIncomeController(BaseController):
ns_parser.start_date,
ns_parser.end_date,
ns_parser.export,
" ".join(ns_parser.sheet_name)
if ns_parser.sheet_name
else None,
)

View File

@@ -41,8 +41,6 @@ def get_series_data(
pd.DataFrame
Series data
"""
df = pd.DataFrame()
try:
# Necessary for installer so that it can locate the correct certificates for
# API calls and https

View File

@@ -37,7 +37,7 @@ ID_TO_NAME_SOFR = {
"SOFR30DAYAVG": "30-Day Average SOFR [Percent]",
"SOFR90DAYAVG": "90-Day Average SOFR [Percent]",
"SOFR180DAYAVG": "180-Day Average SOFR [Percent]",
"SOFRINDEX": "SOFR Index",
"SOFRINDEX": "SOFR Index [Base = 04-2018]",
}
ID_TO_NAME_SONIA = {
"IUDSOIA": "Daily Sterling Overnight Index Average (SONIA) Rate [Percent]",
@@ -142,6 +142,7 @@ def plot_estr(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Euro Short-Term Rate (ESTR)
@@ -149,11 +150,15 @@ def plot_estr(
Parameters
----------
series_id: str
FRED ID of ESTR data to plot, options: ['ECBESTRVOLWGTTRMDMNRT', 'ECBESTRTOTVOL', 'ECBESTRNUMTRANS', 'ECBESTRRT75THPCTVOL', 'ECBESTRNUMACTBANKS', 'ECBESTRSHRVOL5LRGACTBNK', 'ECBESTRRT25THPCTVOL']
FRED ID of ESTR data to plot, options: ['ECBESTRVOLWGTTRMDMNRT',
'ECBESTRTOTVOL', 'ECBESTRNUMTRANS', 'ECBESTRRT75THPCTVOL',
'ECBESTRNUMACTBANKS', 'ECBESTRSHRVOL5LRGACTBNK', 'ECBESTRRT25THPCTVOL']
start_date: Optional[str]
Start date, formatted YYYY-MM-DD
end_date: Optional[str]
End date, formatted YYYY-MM-DD
sheet_name: str
Optionally specify the name of the sheet the data is exported to.
export: str
Export data to csv or excel file
external_axes: Optional[List[plt.Axes]]
@@ -186,13 +191,21 @@ def plot_estr(
if external_axes is None:
theme.visualize_output()
if export:
if "[Percent]" in ID_TO_NAME_ESTR[series_id]:
# Check whether it is a percentage, relevant for exporting
df_transformed = pd.DataFrame(df, columns=[series_id]) / 100
else:
df_transformed = pd.DataFrame(df, columns=[series_id])
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"estr, {series_id}",
df,
)
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
series_id,
df_transformed,
sheet_name
)
@log_start_end(log=logger)
@@ -202,6 +215,7 @@ def plot_sofr(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Secured Overnight Financing Rate (SOFR)
@@ -214,6 +228,8 @@ def plot_sofr(
Start date, formatted YYYY-MM-DD
end_date: Optional[str]
End date, formatted YYYY-MM-DD
sheet_name: str
Optionally specify the name of the sheet the data is exported to.
export: str
Export data to csv or excel file
external_axes: Optional[List[plt.Axes]]
@@ -245,14 +261,22 @@ def plot_sofr(
theme.style_primary_axis(ax)
if external_axes is None:
theme.visualize_output()
theme.visualize_output()
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"sofr, {series_id}",
df,
)
if export:
if "[Percent]" in ID_TO_NAME_SOFR[series_id]:
# Check whether it is a percentage, relevant for exporting
df_transformed = pd.DataFrame(df, columns=[series_id]) / 100
else:
df_transformed = pd.DataFrame(df, columns=[series_id])
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
series_id,
df_transformed,
sheet_name
)
@log_start_end(log=logger)
@@ -262,6 +286,7 @@ def plot_sonia(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Sterling Overnight Index Average (SONIA)
@@ -306,13 +331,21 @@ def plot_sonia(
if external_axes is None:
theme.visualize_output()
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"sonia, {series_id}",
df,
)
if export:
if "[Percent]" in ID_TO_NAME_SONIA[series_id]:
# Check whether it is a percentage, relevant for exporting
df_transformed = pd.DataFrame(df, columns=[series_id]) / 100
else:
df_transformed = pd.DataFrame(df, columns=[series_id])
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
series_id,
df_transformed,
sheet_name
)
@log_start_end(log=logger)
@@ -322,6 +355,7 @@ def plot_ameribor(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot American Interbank Offered Rate (AMERIBOR)
@@ -366,13 +400,21 @@ def plot_ameribor(
if external_axes is None:
theme.visualize_output()
if export:
if "[Percent]" in ID_TO_NAME_AMERIBOR[series_id]:
# Check whether it is a percentage, relevant for exporting
df_transformed = pd.DataFrame(df, columns=[series_id]) / 100
else:
df_transformed = pd.DataFrame(df, columns=[series_id])
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"ameribor, {series_id}",
df,
)
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
series_id,
df_transformed,
sheet_name
)
@log_start_end(log=logger)
@@ -382,6 +424,7 @@ def plot_ffer(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Federal Funds Effective Rate.
@@ -432,13 +475,21 @@ def plot_ffer(
if external_axes is None:
theme.visualize_output()
if export:
if "[Percent]" in ID_TO_NAME_FFER[series_id]:
# Check whether it is a percentage, relevant for exporting
df_transformed = pd.DataFrame(df, columns=[series_id]) / 100
else:
df_transformed = pd.DataFrame(df, columns=[series_id])
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"ffer, {series_id}",
df,
)
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
series_id,
df_transformed,
sheet_name
)
@log_start_end(log=logger)
@@ -447,6 +498,7 @@ def plot_fftr(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Federal Funds Target Range.
@@ -497,7 +549,8 @@ def plot_fftr(
export,
os.path.dirname(os.path.abspath(__file__)),
"fftr",
df,
pd.DataFrame(df, columns=["FFTR"]) / 100,
sheet_name
)
@@ -508,6 +561,7 @@ def plot_effr(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Effective Federal Funds Rate.
@@ -556,13 +610,21 @@ def plot_effr(
if external_axes is None:
theme.visualize_output()
if export:
if "[Percent]" in ID_TO_NAME_EFFR[series_id]:
# Check whether it is a percentage, relevant for exporting
df_transformed = pd.DataFrame(df, columns=[series_id]) / 100
else:
df_transformed = pd.DataFrame(df, columns=[series_id])
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"effr, {series_id}",
df,
)
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
series_id,
df_transformed,
sheet_name
)
@log_start_end(log=logger)
@@ -572,6 +634,7 @@ def plot_obfr(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Overnight Bank Funding Rate (OBFR).
@@ -621,12 +684,20 @@ def plot_obfr(
if external_axes is None:
theme.visualize_output()
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"obfr, {series_id}",
df,
)
if export:
if "[Percent]" in ID_TO_NAME_OBFR[series_id]:
# Check whether it is a percentage, relevant for exporting
df_transformed = pd.DataFrame(df, columns=[series_id]) / 100
else:
df_transformed = pd.DataFrame(df, columns=[series_id])
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
series_id,
df_transformed,
sheet_name
)
@log_start_end(log=logger)
@@ -635,6 +706,7 @@ def plot_iorb(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Interest Rate on Reserve Balances.
@@ -682,7 +754,8 @@ def plot_iorb(
export,
os.path.dirname(os.path.abspath(__file__)),
"iorb",
df,
pd.DataFrame(df, columns=["IORB"]) / 100,
sheet_name
)
@@ -692,6 +765,7 @@ def plot_projection(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot FOMC Summary of Economic Projections for the Fed Funds Rate.
@@ -780,6 +854,7 @@ def plot_projection(
os.path.dirname(os.path.abspath(__file__)),
"projection",
df,
sheet_name
)
@@ -789,6 +864,7 @@ def plot_oldprojection(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Longer Run FOMC Summary of Economic Projections for the Fed Funds Rate.
@@ -877,6 +953,7 @@ def plot_oldprojection(
os.path.dirname(os.path.abspath(__file__)),
"oldprojection",
df,
sheet_name
)
@@ -887,6 +964,7 @@ def plot_dwpcr(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Discount Window Primary Credit Rate.
@@ -943,8 +1021,9 @@ def plot_dwpcr(
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"dwpcr, {series_id}",
df,
series_id,
pd.DataFrame(df, columns=[series_id]) / 100,
sheet_name
)
@@ -954,6 +1033,7 @@ def plot_ecbdfr(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot ECB Deposit Facility Rate for Euro Area.
@@ -1003,7 +1083,8 @@ def plot_ecbdfr(
export,
os.path.dirname(os.path.abspath(__file__)),
"ecbdfr",
df,
pd.DataFrame(df, columns=["ECBDFR"]) / 100,
sheet_name
)
@@ -1013,6 +1094,7 @@ def plot_ecbmlfr(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot ECB Marginal Lending Facility Rate for Euro Area.
@@ -1063,6 +1145,7 @@ def plot_ecbmlfr(
os.path.dirname(os.path.abspath(__file__)),
"ecbmlfr",
df,
sheet_name
)
@@ -1072,6 +1155,7 @@ def plot_ecbmrofr(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot ECB Marginal Lending Facility Rate for Euro Area.
@@ -1125,7 +1209,8 @@ def plot_ecbmrofr(
export,
os.path.dirname(os.path.abspath(__file__)),
"ecbmrofr",
df,
pd.DataFrame(df, columns=["ECBMROFR"]) / 100,
sheet_name
)
@@ -1136,6 +1221,7 @@ def plot_tmc(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot 10-Year Treasury Constant Maturity Minus Selected Treasury Constant Maturity data.
@@ -1192,8 +1278,9 @@ def plot_tmc(
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"tmc, {series_id}",
df,
series_id,
pd.DataFrame(df, columns=[series_id]) / 100,
sheet_name
)
@@ -1204,6 +1291,7 @@ def plot_ffrmc(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Selected Treasury Constant Maturity Minus Federal Funds Rate data.
@@ -1259,8 +1347,9 @@ def plot_ffrmc(
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"ffrmc, {series_id}",
df,
series_id,
pd.DataFrame(df, columns=[series_id]) / 100,
sheet_name
)
@@ -1271,6 +1360,7 @@ def display_yield_curve(
external_axes: Optional[List[plt.Axes]] = None,
raw: bool = False,
export: str = "",
sheet_name: str = "",
):
"""Display yield curve based on US Treasury rates for a specified date.
@@ -1333,7 +1423,8 @@ def display_yield_curve(
export,
os.path.dirname(os.path.abspath(__file__)),
"ycrv",
rates,
pd.DataFrame(rates, columns=["YCRV"]) / 100,
sheet_name
)
@@ -1344,6 +1435,7 @@ def display_inflation_indexed_yield_curve(
external_axes: Optional[List[plt.Axes]] = None,
raw: bool = False,
export: str = "",
sheet_name: str = "",
):
"""Display inflation-indexed yield curve based on US Treasury rates for a specified date.
@@ -1406,7 +1498,8 @@ def display_inflation_indexed_yield_curve(
export,
os.path.dirname(os.path.abspath(__file__)),
"iiycrv",
rates,
pd.DataFrame(rates, columns=["IIYCRV"]) / 100,
sheet_name
)
@@ -1417,6 +1510,7 @@ def plot_tbill(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Treasury Bill Secondary Market Rate.
@@ -1470,8 +1564,9 @@ def plot_tbill(
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"tbill, {series_id}",
df,
series_id,
pd.DataFrame(df, columns=["TBILL"]) / 100,
sheet_name
)
@@ -1482,6 +1577,7 @@ def plot_cmn(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Treasury Constant Maturity Nominal Market Yield.
@@ -1541,8 +1637,9 @@ def plot_cmn(
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"cmn, {series_id}",
df,
series_id,
pd.DataFrame(df, columns=["CMN"]) / 100,
sheet_name
)
@@ -1553,6 +1650,7 @@ def plot_tips(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Plot Yields on Treasury inflation protected securities (TIPS) adjusted to constant maturities.
@@ -1613,8 +1711,9 @@ def plot_tips(
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"tips, {series_id}",
df,
series_id,
pd.DataFrame(df, columns=["TIPS"]) / 100,
sheet_name
)
@@ -1625,6 +1724,7 @@ def plot_tbffr(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Plot Selected Treasury Bill Minus Federal Funds Rate data.
@@ -1676,6 +1776,7 @@ def plot_tbffr(
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"tbffr, {series_id}",
df,
series_id,
pd.DataFrame(df, columns=["TBFFR"]) / 100,
sheet_name
)

View File

@@ -5,6 +5,7 @@ from typing import Optional, List
from itertools import cycle
import logging
import os
import pandas as pd
from matplotlib import pyplot as plt
@@ -104,13 +105,20 @@ def plot_sofr(
if external_axes is None:
theme.visualize_output()
if export:
if "[Percent]" in SERIES_TO_NAME_SOFR[series]:
# Check whether it is a percentage, relevant for exporting
df_transformed = pd.DataFrame(df, columns=[series]) / 100
else:
df_transformed = pd.DataFrame(df, columns=[series])
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"sofr, {series}",
df,
)
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
series,
df_transformed,
)
@log_start_end(log=logger)
@@ -166,8 +174,8 @@ def plot_fftr(
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"fftr",
df,
"fftr",
pd.DataFrame(df, columns=["FFTR"]) / 100,
)
@@ -224,13 +232,20 @@ def plot_effr(
if external_axes is None:
theme.visualize_output()
if export:
if "[Percent]" in SERIES_TO_NAME_EFFR[series]:
# Check whether it is a percentage, relevant for exporting
df_transformed = pd.DataFrame(df, columns=[series]) / 100
else:
df_transformed = pd.DataFrame(df, columns=[series])
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"effr, {series}",
df,
)
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
series,
df_transformed,
)
@log_start_end(log=logger)
@@ -287,9 +302,16 @@ def plot_obfr(
if external_axes is None:
theme.visualize_output()
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"obfr, {series}",
df,
)
if export:
if "[Percent]" in SERIES_TO_NAME_OBFR[series]:
# Check whether it is a percentage, relevant for exporting
df_transformed = pd.DataFrame(df, columns=[series]) / 100
else:
df_transformed = pd.DataFrame(df, columns=[series])
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
series,
df_transformed,
)

View File

@@ -4,6 +4,7 @@ __docformat__ = "numpy"
from typing import Optional, List
import logging
import os
import pandas as pd
from matplotlib import pyplot as plt
@@ -27,6 +28,7 @@ def plot_short_term_interest_rate(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Gets long term interest rates data from selected countries.
@@ -88,7 +90,8 @@ def plot_short_term_interest_rate(
export,
os.path.dirname(os.path.abspath(__file__)),
f"stir",
df,
pd.DataFrame(df, columns=["STIR"]) / 100,
sheet_name
)
@@ -99,6 +102,7 @@ def plot_long_term_interest_rate(
start_date: Optional[str] = None,
end_date: Optional[str] = None,
export: str = "",
sheet_name: str = "",
external_axes: Optional[List[plt.Axes]] = None,
):
"""Gets long term interest rates data from selected countries.
@@ -163,5 +167,6 @@ def plot_long_term_interest_rate(
export,
os.path.dirname(os.path.abspath(__file__)),
f"ltir",
df,
pd.DataFrame(df, columns=["LTIR"]) / 100,
sheet_name
)

View File

@@ -5,6 +5,7 @@ from typing import Optional, List
from itertools import cycle
import logging
import os
import pandas as pd
from matplotlib import pyplot as plt
@@ -76,6 +77,6 @@ def plot_ty(
export_data(
export,
os.path.dirname(os.path.abspath(__file__)),
f"ty, {maturity}",
df,
maturity,
pd.DataFrame(df, columns=[maturity]) / 100,
)

View File

@@ -519,6 +519,7 @@
"tips": ["FRED", "EconDB"],
"tbffr": ["FRED"],
"ty": ["YahooFinance"]
},
"portfolio": {
"po": {
"maxsharpe": ["YahooFinance"],