summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanglewood <85772166+deeleeramone@users.noreply.github.com>2024-02-04 10:39:29 -0800
committerGitHub <noreply@github.com>2024-02-04 18:39:29 +0000
commit3de1bddc2de0a76439e4bc3b09aa9d7ff9ef68a3 (patch)
tree311e4a2c03b0fc923743a04e2a035c5d64a73a29
parenta5da32808c68e4a6269d9ac1de8011dd1cee976a (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>
-rw-r--r--openbb_platform/core/openbb_core/provider/standard_models/etf_info.py3
-rw-r--r--openbb_platform/extensions/equity/integration/test_equity_api.py18
-rw-r--r--openbb_platform/extensions/equity/integration/test_equity_python.py17
-rw-r--r--openbb_platform/extensions/etf/integration/test_etf_api.py1
-rw-r--r--openbb_platform/extensions/etf/integration/test_etf_python.py1
-rw-r--r--openbb_platform/openbb/package/equity.py2
-rw-r--r--openbb_platform/openbb/package/equity_estimates.py18
-rw-r--r--openbb_platform/openbb/package/equity_fundamental.py95
-rw-r--r--openbb_platform/openbb/package/equity_ownership.py26
-rw-r--r--openbb_platform/openbb/package/etf.py72
-rw-r--r--openbb_platform/providers/fmp/openbb_fmp/models/etf_info.py1
-rw-r--r--openbb_platform/providers/fmp/openbb_fmp/models/key_metrics.py6
-rw-r--r--openbb_platform/providers/intrinio/openbb_intrinio/models/key_metrics.py11
-rw-r--r--openbb_platform/providers/yfinance/openbb_yfinance/__init__.py16
-rw-r--r--openbb_platform/providers/yfinance/openbb_yfinance/models/equity_profile.py12
-rw-r--r--openbb_platform/providers/yfinance/openbb_yfinance/models/equity_quote.py11
-rw-r--r--openbb_platform/providers/yfinance/openbb_yfinance/models/etf_info.py284
-rw-r--r--openbb_platform/providers/yfinance/openbb_yfinance/models/historical_dividends.py74
-rw-r--r--openbb_platform/providers/yfinance/openbb_yfinance/models/key_executives.py82
-rw-r--r--openbb_platform/providers/yfinance/openbb_yfinance/models/key_metrics.py308
-rw-r--r--openbb_platform/providers/yfinance/openbb_yfinance/models/price_target_consensus.py122
-rw-r--r--openbb_platform/providers/yfinance/openbb_yfinance/models/share_statistics.py169
-rw-r--r--openbb_platform/providers/yfinance/tests/record/http/test_yfinance_fetchers/test_y_finance_etf_info_fetcher.yaml4126
-rw-r--r--openbb_platform/providers/yfinance/tests/record/http/test_yfinance_fetchers/test_y_finance_historical_dividends_fetcher.yaml8671
-rw-r--r--openbb_platform/providers/yfinance/tests/record/http/test_yfinance_fetchers/test_y_finance_key_executives_fetcher.yaml108
-rw-r--r--openbb_platform/providers/yfinance/tests/record/http/test_yfinance_fetchers/test_y_finance_key_metrics_fetcher.yaml108
-rw-r--r--openbb_platform/providers/yfinance/tests/record/http/test_yfinance_fetchers/test_y_finance_price_target_consensus_fetcher.yaml108
-rw-r--r--openbb_platform/providers/yfinance/tests/record/http/test_yfinance_fetchers/test_y_finance_share_statistics_fetcher.yaml108
-rw-r--r--openbb_platform/providers/yfinance/tests/test_yfinance_fetchers.py65
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