diff options
author | Danglewood <85772166+deeleeramone@users.noreply.github.com> | 2024-02-04 10:39:29 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-04 18:39:29 +0000 |
commit | 3de1bddc2de0a76439e4bc3b09aa9d7ff9ef68a3 (patch) | |
tree | 311e4a2c03b0fc923743a04e2a035c5d64a73a29 | |
parent | a5da32808c68e4a6269d9ac1de8011dd1cee976a (diff) |
feature/more-yfinance: Adds some more to openbb-yfinance (#5979)
* equity profile for yFinance
* pylint
* equity quote
* unused imports
* price target consensus
* add currency field
* add share_statistics
* don't append empty result to results
* key executives
* missing definition in key_executives
* pylint
* key metrics
* add currency to key metrics
* add etf_info
* rename trailing_annual_dividend -> dividend_rate_ttm
* add institutions count to share_statistics
* add historical dividends
* add logic for start-end dates to historical_dividends
* recapture the test..?
* funny test
* filter on tests?
* record test with clean cache..?
* year_price_change -> price_return_1y in key_metrics
* black
* make descriptions clear for beta and dividend_yield fields
* add description field to standard model
* updated static
* clear description of shares_implied_outstanding field
* updated static for equity
* clean descriptions
---------
Co-authored-by: Pratyush Shukla <ps4534@nyu.edu>
29 files changed, 14592 insertions, 51 deletions
diff --git a/openbb_platform/core/openbb_core/provider/standard_models/etf_info.py b/openbb_platform/core/openbb_core/provider/standard_models/etf_info.py index abf3902197d..51bd0605f12 100644 --- a/openbb_platform/core/openbb_core/provider/standard_models/etf_info.py +++ b/openbb_platform/core/openbb_core/provider/standard_models/etf_info.py @@ -31,4 +31,7 @@ class EtfInfoData(Data): symbol: str = Field(description=DATA_DESCRIPTIONS.get("symbol", "") + " (ETF)") name: Optional[str] = Field(description="Name of the ETF.") + description: Optional[str] = Field( + default=None, description="Description of the fund." + ) inception_date: Optional[str] = Field(description="Inception date of the ETF.") diff --git a/openbb_platform/extensions/equity/integration/test_equity_api.py b/openbb_platform/extensions/equity/integration/test_equity_api.py index d09fca2fef3..6afa8577124 100644 --- a/openbb_platform/extensions/equity/integration/test_equity_api.py +++ b/openbb_platform/extensions/equity/integration/test_equity_api.py @@ -313,6 +313,12 @@ def test_equity_fundamental_historical_splits(params, headers): "provider": "fmp", } ), + ( + { + "symbol": "AAPL", + "provider": "yfinance", + } + ), ], ) @pytest.mark.integration @@ -547,6 +553,7 @@ def test_equity_calendar_ipo(params, headers): } ), ({"provider": "intrinio", "symbol": "AAPL", "period": "annual", "limit": 100}), + ({"provider": "yfinance", "symbol": "AAPL"}), ({"provider": "finviz", "symbol": "AAPL,GOOG"}), ], ) @@ -563,7 +570,10 @@ def test_equity_fundamental_metrics(params, headers): @parametrize( "params", - [({"symbol": "AAPL"})], + [ + ({"symbol": "AAPL", "provider": "fmp"}), + ({"symbol": "AAPL", "provider": "yfinance"}), + ], ) @pytest.mark.integration def test_equity_fundamental_management(params, headers): @@ -643,7 +653,10 @@ def test_equity_estimates_price_target(params, headers): @parametrize( "params", - [({"symbol": "AAPL"})], + [ + ({"symbol": "AAPL", "provider": "fmp"}), + ({"symbol": "AAPL,AMZN,RELIANCE.NS", "provider": "yfinance"}), + ], ) @pytest.mark.integration def test_equity_estimates_consensus(params, headers): @@ -767,6 +780,7 @@ def test_equity_fundamental_filings(params, headers): [ ({"symbol": "AAPL", "provider": "fmp"}), ({"symbol": "AAPL", "provider": "intrinio"}), + ({"symbol": "AAPL", "provider": "yfinance"}), ], ) @pytest.mark.integration diff --git a/openbb_platform/extensions/equity/integration/test_equity_python.py b/openbb_platform/extensions/equity/integration/test_equity_python.py index 0fd11eac27c..1990dce553f 100644 --- a/openbb_platform/extensions/equity/integration/test_equity_python.py +++ b/openbb_platform/extensions/equity/integration/test_equity_python.py @@ -290,6 +290,12 @@ def test_equity_fundamental_historical_splits(params, obb): "provider": "fmp", } ), + ( + { + "symbol": "AAPL", + "provider": "yfinance", + } + ), ], ) @pytest.mark.integration @@ -511,6 +517,7 @@ def test_equity_calendar_ipo(params, obb): } ), ({"provider": "intrinio", "symbol": "AAPL", "period": "annual", "limit": 100}), + ({"provider": "yfinance", "symbol": "AAPL"}), ({"provider": "finviz", "symbol": "AAPL,GOOG"}), ], ) @@ -528,7 +535,8 @@ def test_equity_fundamental_metrics(params, obb): @parametrize( "params", [ - ({"symbol": "AAPL"}), + ({"symbol": "AAPL", "provider": "fmp"}), + ({"symbol": "AAPL", "provider": "yfinance"}), ], ) @pytest.mark.integration @@ -601,7 +609,10 @@ def test_equity_estimates_price_target(params, obb): @parametrize( "params", - [({"symbol": "AAPL"})], + [ + ({"symbol": "AAPL", "provider": "fmp"}), + ({"symbol": "AAPL,AMZN,RELIANCE.NS", "provider": "yfinance"}), + ], ) @pytest.mark.integration def test_equity_estimates_consensus(params, obb): @@ -724,9 +735,9 @@ def test_equity_fundamental_filings(params, obb): @parametrize( "params", [ - ({"symbol": "AAPL"}), ({"symbol": "AAPL", "provider": "fmp"}), ({"symbol": "AAPL", "provider": "intrinio"}), + ({"symbol": "AAPL", "provider": "yfinance"}), ], ) @pytest.mark.integration diff --git a/openbb_platform/extensions/etf/integration/test_etf_api.py b/openbb_platform/extensions/etf/integration/test_etf_api.py index fb96327c512..15edfeda960 100644 --- a/openbb_platform/extensions/etf/integration/test_etf_api.py +++ b/openbb_platform/extensions/etf/integration/test_etf_api.py @@ -73,6 +73,7 @@ def test_etf_historical(params, headers): [ ({"symbol": "IOO", "provider": "fmp"}), ({"symbol": "MISL", "provider": "fmp"}), + ({"symbol": "QQQ", "provider": "yfinance"}), ], ) @pytest.mark.integration diff --git a/openbb_platform/extensions/etf/integration/test_etf_python.py b/openbb_platform/extensions/etf/integration/test_etf_python.py index 123774117b8..202fb1c62af 100644 --- a/openbb_platform/extensions/etf/integration/test_etf_python.py +++ b/openbb_platform/extensions/etf/integration/test_etf_python.py @@ -70,6 +70,7 @@ def test_etf_historical(params, obb): [ ({"symbol": "IOO", "provider": "fmp"}), ({"symbol": "MISL", "provider": "fmp"}), + ({"symbol": "QQQ", "provider": "yfinance"}), ], ) @pytest.mark.integration diff --git a/openbb_platform/openbb/package/equity.py b/openbb_platform/openbb/package/equity.py index 8a4feb09b85..d4b1a03457c 100644 --- a/openbb_platform/openbb/package/equity.py +++ b/openbb_platform/openbb/package/equity.py @@ -370,7 +370,7 @@ class ROUTER_equity(Container): shares_float : Optional[int] The number of shares in the public float. (provider: yfinance) shares_implied_outstanding : Optional[int] - The implied total number of shares outstanding. (provider: yfinance) + Implied shares outstanding of common equityassuming the conversion of all convertible subsidiary equity into common. (provider: yfinance) shares_short : Optional[int] The reported number of shares short. (provider: yfinance) dividend_yield : Optional[float] diff --git a/openbb_platform/openbb/package/equity_estimates.py b/openbb_platform/openbb/package/equity_estimates.py index 4b575a390a6..acb91a4164e 100644 --- a/openbb_platform/openbb/package/equity_estimates.py +++ b/openbb_platform/openbb/package/equity_estimates.py @@ -27,7 +27,7 @@ class ROUTER_equity_estimates(Container): Union[str, List[str]], OpenBBCustomParameter(description="Symbol to get data for."), ], - provider: Optional[Literal["fmp"]] = None, + provider: Optional[Literal["fmp", "yfinance"]] = None, **kwargs ) -> OBBject: """Price Target Consensus. Price target consensus data. @@ -36,7 +36,7 @@ class ROUTER_equity_estimates(Container): ---------- symbol : str Symbol to get data for. - provider : Optional[Literal['fmp']] + provider : Optional[Literal['fmp', 'yfinance']] The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default. @@ -44,9 +44,9 @@ class ROUTER_equity_estimates(Container): Returns ------- OBBject - results : PriceTargetConsensus + results : Union[List[PriceTargetConsensus], PriceTargetConsensus] Serializable results. - provider : Optional[Literal['fmp']] + provider : Optional[Literal['fmp', 'yfinance']] Provider name. warnings : Optional[List[Warning_]] List of warnings. @@ -67,6 +67,16 @@ class ROUTER_equity_estimates(Container): Consensus target of the price target consensus. target_median : Optional[float] Median target of the price target consensus. + recommendation : Optional[str] + Recommendation - buy, sell, etc. (provider: yfinance) + recommendation_mean : Optional[float] + Mean recommendation score where 1 is strong buy and 5 is strong sell. (provider: yfinance) + number_of_analysts : Optional[int] + Number of analysts providing opinions. (provider: yfinance) + current_price : Optional[float] + Current price of the stock. (provider: yfinance) + currency : Optional[str] + Currency the stock is priced in. (provider: yfinance) Example ------- diff --git a/openbb_platform/openbb/package/equity_fundamental.py b/openbb_platform/openbb/package/equity_fundamental.py index ced8bb656d4..91b8a2bda7a 100644 --- a/openbb_platform/openbb/package/equity_fundamental.py +++ b/openbb_platform/openbb/package/equity_fundamental.py @@ -955,7 +955,7 @@ class ROUTER_equity_fundamental(Container): description="End date of the data, in YYYY-MM-DD format." ), ] = None, - provider: Optional[Literal["fmp", "intrinio"]] = None, + provider: Optional[Literal["fmp", "intrinio", "yfinance"]] = None, **kwargs ) -> OBBject: """Historical Dividends. Historical dividends data for a given company. @@ -968,7 +968,7 @@ class ROUTER_equity_fundamental(Container): Start date of the data, in YYYY-MM-DD format. end_date : Optional[datetime.date] End date of the data, in YYYY-MM-DD format. - provider : Optional[Literal['fmp', 'intrinio']] + provider : Optional[Literal['fmp', 'intrinio', 'yfinance']] The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default. @@ -980,7 +980,7 @@ class ROUTER_equity_fundamental(Container): OBBject results : List[HistoricalDividends] Serializable results. - provider : Optional[Literal['fmp', 'intrinio']] + provider : Optional[Literal['fmp', 'intrinio', 'yfinance']] Provider name. warnings : Optional[List[Warning_]] List of warnings. @@ -2065,7 +2065,7 @@ class ROUTER_equity_fundamental(Container): Union[str, List[str]], OpenBBCustomParameter(description="Symbol to get data for."), ], - provider: Optional[Literal["fmp"]] = None, + provider: Optional[Literal["fmp", "yfinance"]] = None, **kwargs ) -> OBBject: """Key Executives. Key executives for a given company. @@ -2074,7 +2074,7 @@ class ROUTER_equity_fundamental(Container): ---------- symbol : str Symbol to get data for. - provider : Optional[Literal['fmp']] + provider : Optional[Literal['fmp', 'yfinance']] The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default. @@ -2084,7 +2084,7 @@ class ROUTER_equity_fundamental(Container): OBBject results : List[KeyExecutives] Serializable results. - provider : Optional[Literal['fmp']] + provider : Optional[Literal['fmp', 'yfinance']] Provider name. warnings : Optional[List[Warning_]] List of warnings. @@ -2109,6 +2109,10 @@ class ROUTER_equity_fundamental(Container): Birth year of the key executive. title_since : Optional[int] Date the tile was held since. + exercised_value : Optional[int] + Value of shares exercised. (provider: yfinance) + unexercised_value : Optional[int] + Value of shares not exercised. (provider: yfinance) Example ------- @@ -2245,7 +2249,7 @@ class ROUTER_equity_fundamental(Container): Optional[int], OpenBBCustomParameter(description="The number of data entries to return."), ] = 100, - provider: Optional[Literal["fmp", "intrinio"]] = None, + provider: Optional[Literal["fmp", "intrinio", "yfinance"]] = None, **kwargs ) -> OBBject: """Key Metrics. Key metrics for a given company. @@ -2258,7 +2262,7 @@ class ROUTER_equity_fundamental(Container): Time period of the data to return. limit : Optional[int] The number of data entries to return. - provider : Optional[Literal['fmp', 'intrinio']] + provider : Optional[Literal['fmp', 'intrinio', 'yfinance']] The provider to use for the query, by default None. If None, the provider specified in defaults is selected or 'fmp' if there is no default. @@ -2270,7 +2274,7 @@ class ROUTER_equity_fundamental(Container): OBBject results : Union[List[KeyMetrics], KeyMetrics] Serializable results. - provider : Optional[Literal['fmp', 'intrinio']] + provider : Optional[Literal['fmp', 'intrinio', 'yfinance']] Provider name. warnings : Optional[List[Warning_]] List of warnings. @@ -2294,7 +2298,7 @@ class ROUTER_equity_fundamental(Container): calendar_year : Optional[int] Calendar year. (provider: fmp) revenue_per_share : Optional[float] - Revenue per share (provider: fmp) + Revenue per share (provider: fmp, yfinance) net_income_per_share : Optional[float] Net income per share (provider: fmp) operating_cash_flow_per_share : Optional[float] @@ -2302,7 +2306,7 @@ class ROUTER_equity_fundamental(Container): free_cash_flow_per_share : Optional[float] Free cash flow per share (provider: fmp) cash_per_share : Optional[float] - Cash per share (provider: fmp) + Cash per share (provider: fmp, yfinance) book_value_per_share : Optional[float] Book value per share (provider: fmp) tangible_book_value_per_share : Optional[float] @@ -2311,8 +2315,8 @@ class ROUTER_equity_fundamental(Container): Shareholders equity per share (provider: fmp) interest_debt_per_share : Optional[float] Interest debt per share (provider: fmp) - enterprise_value : Optional[float] - Enterprise value (provider: fmp) + enterprise_value : Optional[Union[float, int]] + Enterprise value (provider: fmp, yfinance) price_to_sales_ratio : Optional[float] Price-to-sales ratio (provider: fmp) pocf_ratio : Optional[float] @@ -2336,21 +2340,21 @@ class ROUTER_equity_fundamental(Container): free_cash_flow_yield : Optional[float] Free cash flow yield (provider: fmp) debt_to_equity : Optional[float] - Debt-to-equity ratio (provider: fmp) + Debt-to-equity ratio (provider: fmp, yfinance) debt_to_assets : Optional[float] Debt-to-assets ratio (provider: fmp) net_debt_to_ebitda : Optional[float] Net debt-to-EBITDA ratio (provider: fmp) current_ratio : Optional[float] - Current ratio (provider: fmp) + Current ratio (provider: fmp, yfinance) interest_coverage : Optional[float] Interest coverage (provider: fmp) income_quality : Optional[float] Income quality (provider: fmp) dividend_yield : Optional[float] - Dividend yield (provider: fmp, intrinio) + Dividend yield, as a normalized percent. (provider: fmp, intrinio, yfinance) payout_ratio : Optional[float] - Payout ratio (provider: fmp) + Payout ratio (provider: fmp, yfinance) sales_general_and_administrative_to_revenue : Optional[float] Sales general and administrative expenses-to-revenue ratio (provider: fmp) research_and_development_to_revenue : Optional[float] @@ -2404,13 +2408,68 @@ class ROUTER_equity_fundamental(Container): capex_per_share : Optional[float] Capital expenditures per share (provider: fmp) beta : Optional[float] - Beta (provider: intrinio) + Beta relative to the broad market calculated on a rolling three-year basis. (provider: intrinio); + Beta relative to the broad market (5-year monthly). (provider: yfinance) volume : Optional[float] Volume (provider: intrinio) fifty_two_week_high : Optional[float] 52 week high (provider: intrinio) fifty_two_week_low : Optional[float] 52 week low (provider: intrinio) + forward_pe : Optional[float] + Forward price-to-earnings ratio. (provider: yfinance) + peg_ratio : Optional[float] + PEG ratio (5-year expected). (provider: yfinance) + peg_ratio_ttm : Optional[float] + PEG ratio (TTM). (provider: yfinance) + eps_ttm : Optional[float] + Earnings per share (TTM). (provider: yfinance) + eps_forward : Optional[float] + Forward earnings per share. (provider: yfinance) + enterprise_to_ebitda : Optional[float] + Enterprise value to EBITDA ratio. (provider: yfinance) + earnings_growth : Optional[float] + Earnings growth (Year Over Year), as a normalized percent. (provider: yfinance) + earnings_growth_quarterly : Optional[float] + Quarterly earnings growth (Year Over Year), as a normalized percent. (provider: yfinance) + revenue_growth : Optional[float] + Revenue growth (Year Over Year), as a normalized percent. (provider: yfinance) + enterprise_to_revenue : Optional[float] + Enterprise value to revenue ratio. (provider: yfinance) + quick_ratio : Optional[float] + Quick ratio. (provider: yfinance) + gross_margin : Optional[float] + Gross margin, as a normalized percent. (provider: yfinance) + ebitda_margin : Optional[float] + EBITDA margin, as a normalized percent. (provider: yfinance) + operating_margin : Optional[float] + Operating margin, as a normalized percent. (provider: yfinance) + profit_margin : Optional[float] + Profit margin, as a normalized percent. (provider: yfinance) + return_on_assets : Optional[float] + Return on assets, as a normalized percent. (provider: yfinance) + return_on_equity : Optional[float] + Return on equity, as a normalized percent. (provider: yfinance) + dividend_yield_5y_avg : Optional[float] + 5-year average dividend yield, as a normalized percent. (provider: yfinance) + book_value : Optional[float] + Book value per share. (provider: yfinance) + price_to_book : Optional[float] + Price-to-book ratio. (provider: yfinance) + overall_risk : Optional[float] + Overall risk score. (provider: yfinance) + audit_risk : Optional[float] + Audit risk score. (provider: yfinance) + board_risk : Optional[float] + Board risk score. (provider: yfinance) + compensation_risk : Optional[float] + Compensation risk score. (provider: yfinance) + shareholder_rights_risk : Optional[float] + Shareholder rights risk score. (provider: yfinance) + price_return_1y : Optional[float] + One-year price return, as a normalized percent. (provider: yfinance) + c |