diff options
Diffstat (limited to 'openbb_terminal/etf/fmp_view.py')
-rw-r--r-- | openbb_terminal/etf/fmp_view.py | 84 |
1 files changed, 79 insertions, 5 deletions
diff --git a/openbb_terminal/etf/fmp_view.py b/openbb_terminal/etf/fmp_view.py index 6499aa3fc96..42f02cc93e2 100644 --- a/openbb_terminal/etf/fmp_view.py +++ b/openbb_terminal/etf/fmp_view.py @@ -8,12 +8,9 @@ from typing import Optional import pandas as pd from openbb_terminal import OpenBBFigure, theme -from openbb_terminal.decorators import log_start_end +from openbb_terminal.decorators import check_api_key, log_start_end from openbb_terminal.etf import fmp_model -from openbb_terminal.helper_funcs import ( - export_data, - print_rich_table, -) +from openbb_terminal.helper_funcs import export_data, print_rich_table from openbb_terminal.rich_config import console logger = logging.getLogger(__name__) @@ -120,3 +117,80 @@ def display_etf_weightings( ) return fig.show(external=external_axes) + + +@log_start_end(log=logger) +@check_api_key(["API_KEY_FINANCIALMODELINGPREP"]) +def view_etf_holdings_performance( + ticker: str, + start_date: str, + end_date: str, + limit: int = 10, + raw: bool = False, + export: str = "", + sheet_name: Optional[str] = None, +): + """Display ETF's holdings' performance over specified time. [Source: FinancialModelingPrep] + Parameters + ---------- + ticker: str + ETF ticker. + start_date: str + Date from which data is fetched in format YYYY-MM-DD. + end: str + Date from which data is fetched in format YYYY-MM-DD. + limit: int + Limit number of holdings to view. Sorted by holding percentage (desc). + raw: bool + Display holding performance + sheet_name: str + Optionally specify the name of the sheet the data is exported to. + export: str + Type of format to export data. + """ + data = fmp_model.get_holdings_pct_change(ticker, start_date, end_date, limit)[::-1] + + if raw: + print_rich_table( + data, + show_index=False, + headers=["Ticker", "Name", "Percent Change"], + title="ETF Holdings' Performance", + limit=limit, + export=bool(export), + ) + + fig = OpenBBFigure() + + if not raw or fig.is_image_export(export): + fig.add_bar( + hovertext=[f"{x:.2f}" + "%" for x in data["Percent Change"]], + x=data["Percent Change"], + y=data["Name"], + name="Stock", + orientation="h", + marker_color=[ + "darkgreen" if x > 0 else "darkred" for x in data["Percent Change"] + ], + ) + + fig.update_layout( + title=f"Percent Change in Price for Each Holding from {start_date} to {end_date} for {ticker}", + xaxis=dict(title="Percent Change"), + yaxis=dict(title="Asset Name"), + ) + + if export: + export_data( + export_type=export, + dir_path=os.path.dirname(os.path.abspath(__file__)), + func_name=f"{ticker}_holdings_perf", + df=data, + sheet_name=sheet_name, + figure=fig, + ) + return + + fig.show(external=raw or bool(export)) + + return |