diff --git a/openbb_terminal/fixedincome/ecb_view.py b/openbb_terminal/fixedincome/ecb_view.py index d0821e50666..4e794773cb8 100644 --- a/openbb_terminal/fixedincome/ecb_view.py +++ b/openbb_terminal/fixedincome/ecb_view.py @@ -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 ) diff --git a/openbb_terminal/fixedincome/econdb_view.py b/openbb_terminal/fixedincome/econdb_view.py index aae13e957e5..b0cb57485e1 100644 --- a/openbb_terminal/fixedincome/econdb_view.py +++ b/openbb_terminal/fixedincome/econdb_view.py @@ -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, ) diff --git a/openbb_terminal/fixedincome/fixedincome_controller.py b/openbb_terminal/fixedincome/fixedincome_controller.py index 0cc30cacc91..ebbf6d9d347 100644 --- a/openbb_terminal/fixedincome/fixedincome_controller.py +++ b/openbb_terminal/fixedincome/fixedincome_controller.py @@ -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, ) diff --git a/openbb_terminal/fixedincome/fred_model.py b/openbb_terminal/fixedincome/fred_model.py index 5b87e711db3..b9eb135447d 100644 --- a/openbb_terminal/fixedincome/fred_model.py +++ b/openbb_terminal/fixedincome/fred_model.py @@ -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 diff --git a/openbb_terminal/fixedincome/fred_view.py b/openbb_terminal/fixedincome/fred_view.py index d5e66928752..3454dfceaaf 100644 --- a/openbb_terminal/fixedincome/fred_view.py +++ b/openbb_terminal/fixedincome/fred_view.py @@ -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 ) diff --git a/openbb_terminal/fixedincome/nyfed_view.py b/openbb_terminal/fixedincome/nyfed_view.py index b5deacb843a..069ff3cb4a2 100644 --- a/openbb_terminal/fixedincome/nyfed_view.py +++ b/openbb_terminal/fixedincome/nyfed_view.py @@ -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, + ) diff --git a/openbb_terminal/fixedincome/oecd_view.py b/openbb_terminal/fixedincome/oecd_view.py index 88688fbe137..c7704614416 100644 --- a/openbb_terminal/fixedincome/oecd_view.py +++ b/openbb_terminal/fixedincome/oecd_view.py @@ -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 ) diff --git a/openbb_terminal/fixedincome/yfinance_view.py b/openbb_terminal/fixedincome/yfinance_view.py index 6e4d6e6f6f1..d6bd5a99fb2 100644 --- a/openbb_terminal/fixedincome/yfinance_view.py +++ b/openbb_terminal/fixedincome/yfinance_view.py @@ -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, ) diff --git a/openbb_terminal/miscellaneous/data_sources_default.json b/openbb_terminal/miscellaneous/data_sources_default.json index 3dea2608d36..ad3f8f5af82 100644 --- a/openbb_terminal/miscellaneous/data_sources_default.json +++ b/openbb_terminal/miscellaneous/data_sources_default.json @@ -519,6 +519,7 @@ "tips": ["FRED", "EconDB"], "tbffr": ["FRED"], "ty": ["YahooFinance"] + }, "portfolio": { "po": { "maxsharpe": ["YahooFinance"],