Skip to content

Commit

Permalink
SDK mapping refactors + FA refactor (#3440)
Browse files Browse the repository at this point in the history
* First commit

* Other sources

* Update trail map

* Couple more trail map updates

* Balance Sheet SDK

* Cash flow for  SDK

Co-authored-by: Chavithra <chavithra@gmail.com>
  • Loading branch information
jmaslek and Chavithra authored Nov 17, 2022
1 parent d29ba43 commit d91eb57
Show file tree
Hide file tree
Showing 3 changed files with 215 additions and 17 deletions.
26 changes: 9 additions & 17 deletions openbb_terminal/miscellaneous/library/trail_map.csv
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ stocks.ba.infer,openbb_terminal.common.behavioural_analysis.twitter_model.load_a
stocks.ba.sentiment,openbb_terminal.common.behavioural_analysis.twitter_model.get_sentiment,openbb_terminal.common.behavioural_analysis.twitter_view.display_sentiment
etf.news,openbb_terminal.common.newsapi_model.get_news,openbb_terminal.common.newsapi_view.display_news
news,openbb_terminal.common.feedparser_model.get_news,
qa.bw,openbb_terminal.common.quantitative_analysis.qa_view.display_bw,openbb_terminal.common.quantitative_analysis.qa_view.display_bw
qa.bw,openbb_terminal.common.quantitative_analysis.qa_view.display_bw,
qa.calculate_adjusted_var,openbb_terminal.common.quantitative_analysis.qa_model.calculate_adjusted_var,
qa.es,openbb_terminal.common.quantitative_analysis.qa_model.get_es,openbb_terminal.common.quantitative_analysis.qa_view.display_es
qa.normality,openbb_terminal.common.quantitative_analysis.qa_model.get_normality,openbb_terminal.common.quantitative_analysis.qa_view.display_normality
Expand Down Expand Up @@ -105,7 +105,6 @@ crypto.disc.categories_keys,openbb_terminal.cryptocurrency.discovery.pycoingecko
crypto.disc.coin_list,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_coin_list,
crypto.disc.coins,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_coins,openbb_terminal.cryptocurrency.discovery.pycoingecko_view.display_coins
crypto.disc.coins_for_given_exchange,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_coins_for_given_exchange,
crypto.disc.gainers_or_losers,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_gainers_or_losers,
crypto.disc.gainers,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_gainers,openbb_terminal.cryptocurrency.discovery.pycoingecko_view.display_gainers
crypto.disc.losers,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_losers,openbb_terminal.cryptocurrency.discovery.pycoingecko_view.display_losers
crypto.disc.trending,openbb_terminal.cryptocurrency.discovery.pycoingecko_model.get_trending_coins,openbb_terminal.cryptocurrency.discovery.pycoingecko_view.display_trending
Expand Down Expand Up @@ -250,11 +249,10 @@ economy.perfmap,openbb_terminal.economy.finviz_model.get_performance_map,
economy.fred_series,openbb_terminal.economy.fred_model.get_aggregated_series_data,openbb_terminal.economy.fred_view.display_fred_series
economy.fred_ids,openbb_terminal.economy.fred_model.get_series_ids,
economy.fred_notes,openbb_terminal.economy.fred_model.get_series_notes,
economy.fred_yield_curve,openbb_terminal.economy.fred_model.get_yield_curve,openbb_terminal.economy.fred_view.display_yield_curve
economy.ycrv,openbb_terminal.economy.fred_model.get_yield_curve,openbb_terminal.economy.fred_view.display_yield_curve
economy.get_events_countries,openbb_terminal.economy.investingcom_model.get_events_countries,
economy.events,openbb_terminal.economy.nasdaq_model.get_economic_calendar,
economy.get_ycrv_countries,openbb_terminal.economy.investingcom_model.get_ycrv_countries,
economy.ycrv,openbb_terminal.economy.fred_model.get_yield_curve,openbb_terminal.economy.fred_view.display_yield_curve
economy.country_codes,openbb_terminal.economy.nasdaq_model.get_country_codes,
economy.bigmac,openbb_terminal.economy.nasdaq_model.get_big_mac_indices,openbb_terminal.economy.nasdaq_view.display_big_mac_index
economy.glbonds,openbb_terminal.economy.wsj_model.global_bonds,
Expand All @@ -278,9 +276,8 @@ etf.etf_by_name,openbb_terminal.etf.stockanalysis_model.get_etfs_by_name,openbb_
etf.weights,openbb_terminal.etf.yfinance_model.get_etf_sector_weightings,openbb_terminal.etf.yfinance_view.display_etf_weightings
etf.summary,openbb_terminal.etf.yfinance_model.get_etf_summary_description,openbb_terminal.etf.yfinance_view.display_etf_description
forex.get_currency_list,openbb_terminal.forex.av_model.get_currency_list,
forex.hist,openbb_terminal.forex.av_model.get_historical,
forex.quote,openbb_terminal.forex.av_model.get_quote,openbb_terminal.forex.av_view.display_quote
forex.oanda.fwd,openbb_terminal.forex.fxempire_model.get_forward_rates,openbb_terminal.forex.fxempire_view.display_forward_rates
forex.quote,openbb_terminal.forex.av_model.get_quote,
forex.fwd,openbb_terminal.forex.fxempire_model.get_forward_rates,openbb_terminal.forex.fxempire_view.display_forward_rates
forex.oanda.summary,openbb_terminal.forex.oanda.oanda_model.account_summary_request,openbb_terminal.forex.oanda.oanda_view.get_account_summary
forex.oanda.cancel,openbb_terminal.forex.oanda.oanda_model.cancel_pending_order_request,openbb_terminal.forex.oanda.oanda_view.cancel_pending_order
forex.oanda.close,openbb_terminal.forex.oanda.oanda_model.close_trades_request,openbb_terminal.forex.oanda.oanda_view.close_trade
Expand Down Expand Up @@ -409,12 +406,12 @@ stocks.dd.analyst,openbb_terminal.stocks.due_diligence.finviz_model.get_analyst_
stocks.dd.news,openbb_terminal.stocks.due_diligence.finviz_model.get_news,
stocks.dd.rating,openbb_terminal.stocks.due_diligence.fmp_model.get_rating,
stocks.dd.sec,openbb_terminal.stocks.due_diligence.marketwatch_model.get_sec_filings,openbb_terminal.stocks.due_diligence.marketwatch_view.sec_filings
stocks.fa.av_balance,openbb_terminal.stocks.fundamental_analysis.av_model.get_balance_sheet,
stocks.fa.av_cash,openbb_terminal.stocks.fundamental_analysis.av_model.get_cash_flow,openbb_terminal.stocks.fundamental_analysis.av_view.display_cash_flow
stocks.fa.dupont,openbb_terminal.stocks.fundamental_analysis.av_model.get_dupont,
stocks.fa.earnings,openbb_terminal.stocks.fundamental_analysis.av_model.get_earnings,
stocks.fa.fraud,openbb_terminal.stocks.fundamental_analysis.av_model.get_fraud_ratios,
stocks.fa.av_income,openbb_terminal.stocks.fundamental_analysis.av_model.get_income_statements,
stocks.fa.income,openbb_terminal.stocks.fundamental_analysis.sdk_helpers.get_income_statement,
stocks.fa.cash,openbb_terminal.stocks.fundamental_analysis.sdk_helpers.get_cash_flow,
stocks.fa.balance,openbb_terminal.stocks.fundamental_analysis.sdk_helpers.get_balance_sheet,
stocks.fa.av_metrics,openbb_terminal.stocks.fundamental_analysis.av_model.get_key_metrics,
stocks.fa.av_overview,openbb_terminal.stocks.fundamental_analysis.av_model.get_overview,
stocks.fa.mgmt,openbb_terminal.stocks.fundamental_analysis.business_insider_model.get_management,
Expand All @@ -423,22 +420,17 @@ stocks.fa.fama_raw,openbb_terminal.stocks.fundamental_analysis.dcf_model.get_fam
stocks.fa.historical_5,openbb_terminal.stocks.fundamental_analysis.dcf_model.get_historical_5,
stocks.fa.similar_dfs,openbb_terminal.stocks.fundamental_analysis.dcf_model.get_similar_dfs,
stocks.fa.analysis,openbb_terminal.stocks.fundamental_analysis.eclect_us_model.get_filings_analysis,
stocks.fa.fmp_balance,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_balance,
stocks.fa.fmp_cash,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_cash,
stocks.fa.dcf,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_dcf,
stocks.fa.enterprise,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_enterprise,
stocks.fa.growth,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_financial_growth,
stocks.fa.fmp_income,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_income,
stocks.fa.fmp_metrics,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_key_metrics,
stocks.fa.fmp_ratios,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_key_ratios,
stocks.fa.ratios,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_key_ratios,
stocks.fa.profile,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_profile,
stocks.fa.quote,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_quote,
stocks.fa.score,openbb_terminal.stocks.fundamental_analysis.fmp_model.get_score,
stocks.fa.data,openbb_terminal.stocks.fundamental_analysis.finviz_model.get_data,
stocks.fa.poly_financials,openbb_terminal.stocks.fundamental_analysis.polygon_model.get_financials,openbb_terminal.stocks.fundamental_analysis.polygon_view.display_fundamentals
stocks.fa.cal,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_model.get_calendar_earnings,
stocks.fa.divs,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_model.get_dividends,
stocks.fa.yf_financials,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_model.get_financials,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_view.display_fundamentals
stocks.fa.hq,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_model.get_hq,
stocks.fa.info,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_model.get_info,
stocks.fa.mktcap,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_model.get_mktcap,openbb_terminal.stocks.fundamental_analysis.yahoo_finance_view.display_mktcap
Expand Down Expand Up @@ -555,4 +547,4 @@ keys.shroom,openbb_terminal.keys_model.set_shroom_key,
futures.search,openbb_terminal.futures.yfinance_model.get_search_futures,openbb_terminal.futures.yfinance_view.display_search
futures.historical,openbb_terminal.futures.yfinance_model.get_historical_futures,openbb_terminal.futures.yfinance_view.display_historical
futures.curve,openbb_terminal.futures.yfinance_model.get_curve_futures,openbb_terminal.futures.yfinance_view.display_curve
economy.get_groups,openbb_terminal.economy.finviz_model.get_groups
economy.get_groups,openbb_terminal.economy.finviz_model.get_groups
6 changes: 6 additions & 0 deletions openbb_terminal/stocks/fundamental_analysis/fmp_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,9 +252,11 @@ def get_income(
# Invalid API Keys
except ValueError as e:
console.print(e)
return pd.DataFrame()
# Premium feature, API plan is not authorized
except HTTPError as e:
console.print(e)
return pd.DataFrame()

if ratios:
types = df_fa.copy().applymap(lambda x: isinstance(x, (float, int))).all(axis=1)
Expand Down Expand Up @@ -321,9 +323,11 @@ def get_balance(
# Invalid API Keys
except ValueError as e:
console.print(e)
return pd.DataFrame()
# Premium feature, API plan is not authorized
except HTTPError as e:
console.print(e)
return pd.DataFrame()

if ratios:
types = df_fa.copy().applymap(lambda x: isinstance(x, (float, int))).all(axis=1)
Expand Down Expand Up @@ -387,9 +391,11 @@ def get_cash(
# Invalid API Keys
except ValueError as e:
console.print(e)
return pd.DataFrame()
# Premium feature, API plan is not authorized
except HTTPError as e:
console.print(e)
return pd.DataFrame()

if ratios:
types = df_fa.copy().applymap(lambda x: isinstance(x, (float, int))).all(axis=1)
Expand Down
200 changes: 200 additions & 0 deletions openbb_terminal/stocks/fundamental_analysis/sdk_helpers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
"""SDK Helper Functions"""
__docformat__ = "numpy"

import pandas as pd
from openbb_terminal.stocks.fundamental_analysis import (
yahoo_finance_model,
polygon_model,
av_model,
fmp_model,
eodhd_model,
)


def get_income_statement(
symbol: str,
quarterly: bool = False,
ratios: bool = False,
source: str = "YahooFinance",
limit: int = 10,
) -> pd.DataFrame:
"""Get income statement.
Parameters
----------
symbol : str
Symbol to get income statement for
source : str, optional
Data source for income statement, by default "YahooFinance"
quarterly : bool, optional
Flag to get quarterly data
ratios : bool, optional
Flag to return data as a percent change.
limit : int
Number of statements to return (free tiers may be limited to 5 years)
Returns
-------
pd.DataFrame
Dataframe of income statement
Examples
--------
>>> from openbb_terminal.sdk import openbb
>>> income_statement = openbb.stocks.fa.income("AAPL", source="YahooFinance)
If you have a premium AlphaVantage key, you can use the quarterly flag to get quarterly statements
>>> quarterly_income_statement = openbb.stocks.fa.income("AAPL", source="AlphaVantage", quarterly=True)
"""
if source == "YahooFinance":
if quarterly:
print(
"Quarterly income statement not available from Yahoo Finance. Returning annual"
)
df = yahoo_finance_model.get_financials(
symbol=symbol, statement="financials", ratios=ratios
)
return df
if source == "AlphaVantage":
df = av_model.get_income_statements(
symbol=symbol, quarterly=quarterly, ratios=ratios, limit=limit
)
return df
if source == "FinancialModelingPrep":
df = fmp_model.get_income(
symbol=symbol, limit=limit, quarterly=quarterly, ratios=ratios
)
return df
if source == "Polygon":
df = polygon_model.get_financials(symbol, "income", quarterly, ratios)
return df
if source == "EODHD":
df = eodhd_model.get_financials(symbol, "income", quarterly, ratios)
return df
return pd.DataFrame()


def get_balance_sheet(
symbol: str,
quarterly: bool = False,
ratios: bool = False,
source: str = "YahooFinance",
limit: int = 10,
) -> pd.DataFrame:
"""Get balance sheet.
Parameters
----------
symbol : str
Symbol to get balance sheet for
source : str, optional
Data source for balance sheet, by default "YahooFinance"
quarterly : bool, optional
Flag to get quarterly data
ratios : bool, optional
Flag to return data as a percent change.
limit : int
Number of statements to return (free tiers may be limited to 5 years)
Returns
-------
pd.DataFrame
Dataframe of balance sheet
Examples
--------
>>> from openbb_terminal.sdk import openbb
>>> balance_sheet = openbb.stocks.fa.balance("AAPL", source="YahooFinance)
If you have a premium AlphaVantage key, you can use the quarterly flag to get quarterly statements
>>> quarterly_income_statement = openbb.stocks.fa.balance("AAPL", source="AlphaVantage", quarterly=True)
"""
if source == "YahooFinance":
if quarterly:
print(
"Quarterly statements not available from Yahoo Finance. Returning annual"
)
df = yahoo_finance_model.get_financials(
symbol=symbol, statement="balance-sheet", ratios=ratios
)
return df
if source == "AlphaVantage":
df = av_model.get_balance_sheet(
symbol=symbol, quarterly=quarterly, ratios=ratios, limit=limit
)
return df
if source == "FinancialModelingPrep":
df = fmp_model.get_balance(
symbol=symbol, limit=limit, quarterly=quarterly, ratios=ratios
)
return df
if source == "Polygon":
df = polygon_model.get_financials(symbol, "balance", quarterly, ratios)
return df
if source == "EODHD":
df = eodhd_model.get_financials(symbol, "balance", quarterly, ratios)
return df
return pd.DataFrame()


def get_cash_flow(
symbol: str,
quarterly: bool = False,
ratios: bool = False,
source: str = "YahooFinance",
limit: int = 10,
) -> pd.DataFrame:
"""Get Cash Flow.
Parameters
----------
symbol : str
Symbol to get cash flow for
source : str, optional
Data source for cash flow, by default "YahooFinance"
quarterly : bool, optional
Flag to get quarterly data
ratios : bool, optional
Flag to return data as a percent change.
limit : int
Number of statements to return (free tiers may be limited to 5 years)
Returns
-------
pd.DataFrame
Dataframe of cash flow
Examples
--------
>>> from openbb_terminal.sdk import openbb
>>> cash_flow = openbb.stocks.fa.cash("AAPL", source="YahooFinance)
If you have a premium AlphaVantage key, you can use the quarterly flag to get quarterly statements
>>> quarterly_income_statement = openbb.stocks.fa.cash("AAPL", source="AlphaVantage", quarterly=True)
"""
if source == "YahooFinance":
if quarterly:
print(
"Quarterly statements not available from Yahoo Finance. Returning annual"
)
df = yahoo_finance_model.get_financials(
symbol=symbol, statement="cash-flow", ratios=ratios
)
return df
if source == "AlphaVantage":
df = av_model.get_cash_flow(
symbol=symbol, quarterly=quarterly, ratios=ratios, limit=limit
)
return df
if source == "FinancialModelingPrep":
df = fmp_model.get_cash(
symbol=symbol, limit=limit, quarterly=quarterly, ratios=ratios
)
return df
if source == "Polygon":
df = polygon_model.get_financials(symbol, "cash", quarterly, ratios)
return df
if source == "EODHD":
df = eodhd_model.get_financials(symbol, "cash", quarterly, ratios)
return df
return pd.DataFrame()

0 comments on commit d91eb57

Please sign in to comment.