From cfe41ef7a973729d0dac71259fa17b733a3aaac1 Mon Sep 17 00:00:00 2001 From: James Maslek Date: Mon, 21 Nov 2022 16:58:32 -0500 Subject: [PATCH] More sdk enhancements (#3480) * Combine CA peers to smiliar command * crypto/disc/top into one sdk function * Exchanges into sdk function * delete wrong platforms trail * #3478 sdk crypto load * Options hist 1 sdk function * SDK functions Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com> --- .../cryptocurrency/cryptocurrency_helpers.py | 7 +- .../cryptocurrency/discovery/sdk_helpers.py | 41 +++++ .../overview/coinpaprika_model.py | 11 +- .../overview/coinpaprika_view.py | 2 +- .../cryptocurrency/overview/sdk_helpers.py | 70 +++++++ .../miscellaneous/library/trail_map.csv | 34 ++-- .../reports/templates/forecast.ipynb | 171 ++---------------- .../stocks/comparison_analysis/sdk_helpers.py | 51 ++++++ .../stocks/options/chartexchange_model.py | 10 +- .../stocks/options/options_controller.py | 4 +- .../stocks/options/options_sdk_helper.py | 57 +++++- 11 files changed, 264 insertions(+), 194 deletions(-) create mode 100644 openbb_terminal/cryptocurrency/discovery/sdk_helpers.py create mode 100644 openbb_terminal/cryptocurrency/overview/sdk_helpers.py create mode 100644 openbb_terminal/stocks/comparison_analysis/sdk_helpers.py diff --git a/openbb_terminal/cryptocurrency/cryptocurrency_helpers.py b/openbb_terminal/cryptocurrency/cryptocurrency_helpers.py index 991d49197aa9..3b00fc6e7967 100644 --- a/openbb_terminal/cryptocurrency/cryptocurrency_helpers.py +++ b/openbb_terminal/cryptocurrency/cryptocurrency_helpers.py @@ -489,7 +489,7 @@ def load_from_yahoofinance( def load( symbol: str, start_date: datetime | str | None = None, - interval: str = "1440", + interval: str | int = "1440", exchange: str = "binance", vs_currency: str = "usdt", end_date: datetime | str | None = None, @@ -503,7 +503,7 @@ def load( Coin to get start_date: str or datetime, optional Start date to get data from with. - datetime or string format (YYYY-MM-DD) - interval: str + interval: str|int The interval between data points in minutes. Choose from: 1, 15, 30, 60, 240, 1440, 10080, 43200 exchange: str: @@ -521,7 +521,8 @@ def load( pd.DataFrame Dataframe consisting of price and volume data """ - + if isinstance(interval, int): + interval = str(interval) if start_date is None: start_date = (datetime.now() - timedelta(days=1100)).strftime("%Y-%m-%d") diff --git a/openbb_terminal/cryptocurrency/discovery/sdk_helpers.py b/openbb_terminal/cryptocurrency/discovery/sdk_helpers.py new file mode 100644 index 000000000000..bea27febdd75 --- /dev/null +++ b/openbb_terminal/cryptocurrency/discovery/sdk_helpers.py @@ -0,0 +1,41 @@ +"""SDK Helper Functions.""" +__docfromat__ = "numpy" + +import pandas as pd +from openbb_terminal.cryptocurrency.discovery import ( + coinmarketcap_model, + pycoingecko_model, +) + + +def top_coins(source: str = "CoinGecko", limit: int = 10) -> pd.DataFrame: + """Get top cryptp coins. + + Parameters + ---------- + source : str, optional + Source of data, by default "CoinGecko" + limit : int, optional + Number of coins to return, by default 10 + + Returns + ------- + pd.DataFrame + DataFrame with top coins + + Examples + -------- + >>> from openbb_terminal.sdk import openbb + >>> top_coins = openbb.crypto.disc.top_coins() + + To get 30 results from coinmarketcap, use the source parameter and the limit parameter: + >>> top_coins = openbb.crypto.disc.top_coins(source="CoinMarketCap", limit=30) + + """ + if source.lower() == "coingecko": + df = pycoingecko_model.get_coins(limit=limit) + return df + if source.lower() == "coinmarketcap": + df = coinmarketcap_model.get_cmc_top_n() + return df + return pd.DataFrame() diff --git a/openbb_terminal/cryptocurrency/overview/coinpaprika_model.py b/openbb_terminal/cryptocurrency/overview/coinpaprika_model.py index 9797f3b670d6..c24f49397fe0 100644 --- a/openbb_terminal/cryptocurrency/overview/coinpaprika_model.py +++ b/openbb_terminal/cryptocurrency/overview/coinpaprika_model.py @@ -69,7 +69,7 @@ @log_start_end(log=logger) -def get_global_market() -> pd.DataFrame: +def get_global_info() -> pd.DataFrame: """Return data frame with most important global crypto statistics like: market_cap_usd, volume_24h_usd, bitcoin_dominance_percentage, cryptocurrencies_number, market_cap_ath_value, market_cap_ath_date, volume_24h_ath_value, volume_24h_ath_date, @@ -308,18 +308,17 @@ def get_list_of_exchanges( "reported_volume_30d", "sessions_per_month", ] - df.loc[:, "fiats"] = df["fiats"].apply(lambda x: len([i["symbol"] for i in x if x])) + df["fiats"] = df["fiats"].apply(lambda x: len([i["symbol"] for i in x if x])) df = df[cols] df = df.applymap( lambda x: "\n".join(textwrap.wrap(x, width=28)) if isinstance(x, str) else x ) - df.rename( + df = df.rename( columns={"adjusted_rank": "Rank", "confidence_score": "confidence"}, - inplace=True, ) df.columns = [x.replace("reported_", "") for x in df.columns] - if sortby == "Rank": - df = df.sort_values(by=sortby, ascending=not ascend) + if sortby.lower() == "rank": + df = df.sort_values(by="Rank", ascending=not ascend) else: df = df.sort_values(by=sortby, ascending=ascend) return df diff --git a/openbb_terminal/cryptocurrency/overview/coinpaprika_view.py b/openbb_terminal/cryptocurrency/overview/coinpaprika_view.py index 558125cbf3b0..5972c178216f 100644 --- a/openbb_terminal/cryptocurrency/overview/coinpaprika_view.py +++ b/openbb_terminal/cryptocurrency/overview/coinpaprika_view.py @@ -83,7 +83,7 @@ def display_global_market(export: str = "") -> None: Export dataframe data to csv,json,xlsx file """ - df = paprika.get_global_market() + df = paprika.get_global_info() df_data = df.copy() df["Value"] = df["Value"].apply( # pylint:disable=unsupported-assignment-operation lambda x: lambda_long_number_format_with_type_check(x) diff --git a/openbb_terminal/cryptocurrency/overview/sdk_helpers.py b/openbb_terminal/cryptocurrency/overview/sdk_helpers.py new file mode 100644 index 000000000000..7f89b804b4d5 --- /dev/null +++ b/openbb_terminal/cryptocurrency/overview/sdk_helpers.py @@ -0,0 +1,70 @@ +"""Crypto OV SDK Helper Functions.""" +__docformat__ = "numpy" + +import pandas as pd +from openbb_terminal.cryptocurrency.overview import pycoingecko_model, coinpaprika_model +from openbb_terminal.cryptocurrency.dataframe_helpers import ( + lambda_long_number_format_with_type_check, +) + + +def globe(source: str = "CoinGecko") -> pd.DataFrame: + """Get global crypto market data. + + Parameters + ---------- + source : str, optional + Source of data, by default "CoinGecko" + + Returns + ------- + pd.DataFrame + DataFrame with global crypto market data + + Examples + -------- + >>> from openbb_terminal.sdk import openbb + >>> global_market_data = openbb.crypto.ov.globals() + + To get data from CoinPaprika, use the source parameter: + >>> global_market_data = openbb.crypto.ov.globals(source="coinpaprika") + + """ + if source.lower() == "coingecko": + df = pycoingecko_model.get_global_info() + return df + if source.lower() == "coinpaprika": + df = coinpaprika_model.get_global_info() + return df + return pd.DataFrame() + + +def exchanges(source: str = "CoinGecko") -> pd.DataFrame: + """Show top crypto exchanges. + + Parameters + ---------- + source : str, optional + Source to get exchanges, by default "CoinGecko" + + Returns + ------- + pd.DataFrame + DataFrame with top crypto exchanges + + Examples + -------- + >>> from openbb_terminal.sdk import openbb + >>> exchanges = openbb.crypto.ov.exchanges() + """ + if source.lower() == "coingecko": + df = pycoingecko_model.get_exchanges().sort_values(by="Rank", ascending=True) + return df + if source.lower() == "coinpaprika": + df = coinpaprika_model.get_list_of_exchanges("USD") + cols = [col for col in df.columns if col != "Rank"] + df[cols] = df[cols].applymap( + lambda x: lambda_long_number_format_with_type_check(x) + ) + return df.sort_values(by="Rank", ascending=True).reset_index(drop=True).head(20) + return pd.DataFrame() diff --git a/openbb_terminal/miscellaneous/library/trail_map.csv b/openbb_terminal/miscellaneous/library/trail_map.csv index 5a8af11b87ca..e2b1f3f45e9a 100644 --- a/openbb_terminal/miscellaneous/library/trail_map.csv +++ b/openbb_terminal/miscellaneous/library/trail_map.csv @@ -18,17 +18,17 @@ stocks.ba.queries,openbb_terminal.common.behavioural_analysis.google_model.get_q stocks.ba.regions,openbb_terminal.common.behavioural_analysis.google_model.get_regions,openbb_terminal.common.behavioural_analysis.google_view.display_regions stocks.ba.rise,openbb_terminal.common.behavioural_analysis.google_model.get_rise, stocks.ba.getdd,openbb_terminal.common.behavioural_analysis.reddit_model.get_due_dilligence, -stocks.ba.popular,openbb_terminal.common.behavioural_analysis.reddit_model.get_popular_tickers,openbb_terminal.common.behavioural_analysis.reddit_view.display_popular_tickers -stocks.ba.redditsent,openbb_terminal.common.behavioural_analysis.reddit_model.get_posts_about,openbb_terminal.common.behavioural_analysis.reddit_view.display_redditsent +stocks.ba.popular,openbb_terminal.common.behavioural_analysis.reddit_model.get_popular_tickers, +stocks.ba.redditsent,openbb_terminal.common.behavioural_analysis.reddit_model.get_posts_about, stocks.ba.text_sent,openbb_terminal.common.behavioural_analysis.reddit_model.get_sentiment, stocks.ba.spac,openbb_terminal.common.behavioural_analysis.reddit_model.get_spac, stocks.ba.spacc,openbb_terminal.common.behavioural_analysis.reddit_model.get_spac_community, -stocks.ba.watchlist,openbb_terminal.common.behavioural_analysis.reddit_model.get_watchlists,openbb_terminal.common.behavioural_analysis.reddit_view.display_watchlist +stocks.ba.watchlist,openbb_terminal.common.behavioural_analysis.reddit_model.get_watchlists, stocks.ba.wsb,openbb_terminal.common.behavioural_analysis.reddit_model.get_wsb_community, stocks.ba.hist,openbb_terminal.common.behavioural_analysis.sentimentinvestor_model.get_historical,openbb_terminal.common.behavioural_analysis.sentimentinvestor_view.display_historical stocks.ba.trend,openbb_terminal.common.behavioural_analysis.sentimentinvestor_model.get_trending,openbb_terminal.common.behavioural_analysis.sentimentinvestor_view.display_trending -stocks.ba.bullbear,openbb_terminal.common.behavioural_analysis.stocktwits_model.get_bullbear,openbb_terminal.common.behavioural_analysis.stocktwits_view.display_bullbear -stocks.ba.messages,openbb_terminal.common.behavioural_analysis.stocktwits_model.get_messages,openbb_terminal.common.behavioural_analysis.stocktwits_view.display_messages +stocks.ba.bullbear,openbb_terminal.common.behavioural_analysis.stocktwits_model.get_bullbear, +stocks.ba.messages,openbb_terminal.common.behavioural_analysis.stocktwits_model.get_messages, stocks.ba.stalker,openbb_terminal.common.behavioural_analysis.stocktwits_model.get_stalker, stocks.ba.trending,openbb_terminal.common.behavioural_analysis.stocktwits_model.get_trending, stocks.ba.infer,openbb_terminal.common.behavioural_analysis.twitter_model.load_analyze_tweets,openbb_terminal.common.behavioural_analysis.twitter_view.display_inference @@ -101,7 +101,7 @@ crypto.defi.sinfo,openbb_terminal.cryptocurrency.defi.terramoney_fcd_model.get_s crypto.defi.sratio,openbb_terminal.cryptocurrency.defi.terramoney_fcd_model.get_staking_ratio_history,openbb_terminal.cryptocurrency.defi.terramoney_fcd_view.display_staking_ratio_history crypto.defi.sreturn,openbb_terminal.cryptocurrency.defi.terramoney_fcd_model.get_staking_returns_history,openbb_terminal.cryptocurrency.defi.terramoney_fcd_view.display_staking_returns_history crypto.defi.validators,openbb_terminal.cryptocurrency.defi.terramoney_fcd_model.get_validators,openbb_terminal.cryptocurrency.defi.terramoney_fcd_view.display_validators -crypto.disc.cmctop,openbb_terminal.cryptocurrency.discovery.coinmarketcap_model.get_cmc_top_n,openbb_terminal.cryptocurrency.discovery.coinmarketcap_view.display_cmc_top_coins +crypto.disc.top_coins,openbb_terminal.cryptocurrency.discovery.sdk_helpers.top_coins, crypto.disc.cpsearch,openbb_terminal.cryptocurrency.discovery.coinpaprika_model.get_search_results,openbb_terminal.cryptocurrency.discovery.coinpaprika_view.display_search_results crypto.disc.top_dapps,openbb_terminal.cryptocurrency.discovery.dappradar_model.get_top_dapps,openbb_terminal.cryptocurrency.discovery.dappradar_view.display_top_dapps crypto.disc.top_dexes,openbb_terminal.cryptocurrency.discovery.dappradar_model.get_top_dexes,openbb_terminal.cryptocurrency.discovery.dappradar_view.display_top_dexes @@ -186,23 +186,19 @@ crypto.onchain.whales,openbb_terminal.cryptocurrency.onchain.whale_alert_model.g crypto.ov.altindex,openbb_terminal.cryptocurrency.overview.blockchaincenter_model.get_altcoin_index,openbb_terminal.cryptocurrency.overview.blockchaincenter_view.display_altcoin_index crypto.ov.btcrb,openbb_terminal.cryptocurrency.overview.glassnode_model.get_btc_rainbow,openbb_terminal.cryptocurrency.overview.glassnode_view.display_btc_rainbow crypto.ov.cbpairs,openbb_terminal.cryptocurrency.overview.coinbase_model.get_trading_pairs,openbb_terminal.cryptocurrency.overview.coinbase_view.display_trading_pairs -crypto.ov.platforms1,openbb_terminal.cryptocurrency.overview.coinpaprika_model.get_all_contract_platforms,openbb_terminal.cryptocurrency.overview.coinpaprika_view.display_all_platforms +crypto.ov.platforms,openbb_terminal.cryptocurrency.overview.coinpaprika_model.get_all_contract_platforms,openbb_terminal.cryptocurrency.overview.coinpaprika_view.display_all_platforms crypto.ov.info,openbb_terminal.cryptocurrency.overview.coinpaprika_model.get_coins_info,openbb_terminal.cryptocurrency.overview.coinpaprika_view.display_all_coins_info -crypto.ov.cpmarkets,openbb_terminal.cryptocurrency.overview.coinpaprika_model.get_coins_market_info,openbb_terminal.cryptocurrency.overview.coinpaprika_view.display_all_coins_market_info +crypto.ov.markets,openbb_terminal.cryptocurrency.overview.coinpaprika_model.get_coins_market_info,openbb_terminal.cryptocurrency.overview.coinpaprika_view.display_all_coins_market_info crypto.ov.contracts,openbb_terminal.cryptocurrency.overview.coinpaprika_model.get_contract_platform,openbb_terminal.cryptocurrency.overview.coinpaprika_view.display_contracts crypto.ov.exmarkets,openbb_terminal.cryptocurrency.overview.coinpaprika_model.get_exchanges_market,openbb_terminal.cryptocurrency.overview.coinpaprika_view.display_exchange_markets -crypto.ov.cpglobal,openbb_terminal.cryptocurrency.overview.coinpaprika_model.get_global_market,openbb_terminal.cryptocurrency.overview.coinpaprika_view.display_global_market -crypto.ov.cpexchanges,openbb_terminal.cryptocurrency.overview.coinpaprika_model.get_list_of_exchanges,openbb_terminal.cryptocurrency.overview.coinpaprika_view.display_all_exchanges crypto.ov.news,openbb_terminal.cryptocurrency.overview.cryptopanic_model.get_news,openbb_terminal.cryptocurrency.overview.cryptopanic_view.display_news crypto.ov.cr,openbb_terminal.cryptocurrency.overview.loanscan_model.get_rates,openbb_terminal.cryptocurrency.overview.loanscan_view.display_crypto_rates crypto.ov.derivatives,openbb_terminal.cryptocurrency.overview.pycoingecko_model.get_derivatives,openbb_terminal.cryptocurrency.overview.pycoingecko_view.display_derivatives crypto.ov.exrates,openbb_terminal.cryptocurrency.overview.pycoingecko_model.get_exchange_rates,openbb_terminal.cryptocurrency.overview.pycoingecko_view.display_exchange_rates -crypto.ov.exchanges,openbb_terminal.cryptocurrency.overview.pycoingecko_model.get_exchanges,openbb_terminal.cryptocurrency.overview.pycoingecko_view.display_exchanges +crypto.ov.exchanges,openbb_terminal.cryptocurrency.overview.sdk_helpers.exchanges, crypto.ov.products,openbb_terminal.cryptocurrency.overview.pycoingecko_model.get_finance_products,openbb_terminal.cryptocurrency.overview.pycoingecko_view.display_products -crypto.ov.platforms,openbb_terminal.cryptocurrency.overview.pycoingecko_model.get_financial_platforms,openbb_terminal.cryptocurrency.overview.pycoingecko_view.display_platforms crypto.ov.defi,openbb_terminal.cryptocurrency.overview.pycoingecko_model.get_global_defi_info,openbb_terminal.cryptocurrency.overview.pycoingecko_view.display_global_defi_info -crypto.ov.global_info,openbb_terminal.cryptocurrency.overview.pycoingecko_model.get_global_info, -crypto.ov.global,openbb_terminal.cryptocurrency.overview.pycoingecko_model.get_global_markets_info,openbb_terminal.cryptocurrency.overview.pycoingecko_view.display_global_market_info +crypto.ov.globe,openbb_terminal.cryptocurrency.overview.sdk_helpers.globe, crypto.ov.hold,openbb_terminal.cryptocurrency.overview.pycoingecko_model.get_holdings_overview,openbb_terminal.cryptocurrency.overview.pycoingecko_view.display_holdings_overview crypto.ov.indexes,openbb_terminal.cryptocurrency.overview.pycoingecko_model.get_indexes,openbb_terminal.cryptocurrency.overview.pycoingecko_view.display_indexes crypto.ov.stables,openbb_terminal.cryptocurrency.overview.pycoingecko_model.get_stable_coins,openbb_terminal.cryptocurrency.overview.pycoingecko_view.display_stablecoins @@ -256,9 +252,7 @@ economy.fred,openbb_terminal.economy.fred_model.get_aggregated_series_data,openb economy.fred_ids,openbb_terminal.economy.fred_model.get_series_ids, economy.fred_notes,openbb_terminal.economy.fred_model.get_series_notes, 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.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, @@ -363,15 +357,13 @@ portfolio.po.get_properties,openbb_terminal.portfolio.portfolio_optimization.opt portfolio.po.plot,openbb_terminal.portfolio.portfolio_optimization.po_view.display_plot,openbb_terminal.portfolio.portfolio_optimization.po_view.display_plot stocks.ba.cnews,openbb_terminal.stocks.behavioural_analysis.finnhub_model.get_company_news, stocks.ba.snews,openbb_terminal.stocks.behavioural_analysis.finnhub_model.get_headlines_sentiment,openbb_terminal.stocks.behavioural_analysis.finnhub_view.display_stock_price_headlines_sentiment +stocks.ca.similar,openbb_terminal.stocks.comparison_analysis.sdk_helpers.get_similar, stocks.ca.sentiment,openbb_terminal.stocks.comparison_analysis.finbrain_model.get_sentiments,openbb_terminal.stocks.comparison_analysis.finbrain_view.display_sentiment_compare stocks.ca.scorr,openbb_terminal.stocks.comparison_analysis.finbrain_model.get_sentiment_correlation,openbb_terminal.stocks.comparison_analysis.finbrain_view.display_sentiment_correlation -stocks.ca.finnhub_peers,openbb_terminal.stocks.comparison_analysis.finnhub_model.get_similar_companies, stocks.ca.screener,openbb_terminal.stocks.comparison_analysis.finviz_compare_model.get_comparison_data, -stocks.ca.finviz_peers,openbb_terminal.stocks.comparison_analysis.finviz_compare_model.get_similar_companies, stocks.ca.balance,openbb_terminal.stocks.comparison_analysis.marketwatch_model.get_balance_comparison, stocks.ca.cashflow,openbb_terminal.stocks.comparison_analysis.marketwatch_model.get_cashflow_comparison, stocks.ca.income,openbb_terminal.stocks.comparison_analysis.marketwatch_model.get_income_comparison,openbb_terminal.stocks.comparison_analysis.marketwatch_view.display_income_comparison -stocks.ca.polygon_peers,openbb_terminal.stocks.comparison_analysis.polygon_model.get_similar_companies, stocks.ca.hist,openbb_terminal.stocks.comparison_analysis.yahoo_finance_model.get_historical,openbb_terminal.stocks.comparison_analysis.yahoo_finance_view.display_historical stocks.ca.hcorr,openbb_terminal.stocks.comparison_analysis.yahoo_finance_model.get_correlation,openbb_terminal.stocks.comparison_analysis.yahoo_finance_view.display_correlation stocks.ca.volume,openbb_terminal.stocks.comparison_analysis.yahoo_finance_model.get_volume,openbb_terminal.stocks.comparison_analysis.yahoo_finance_view.display_volume @@ -414,7 +406,7 @@ stocks.dd.rot,openbb_terminal.stocks.due_diligence.finnhub_model.get_rating_over stocks.dd.analyst,openbb_terminal.stocks.due_diligence.finviz_model.get_analyst_data, 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.dd.sec,openbb_terminal.stocks.due_diligence.marketwatch_model.get_sec_filings, stocks.fa.dupont,openbb_terminal.stocks.fundamental_analysis.av_model.get_dupont, stocks.fa.fraud,openbb_terminal.stocks.fundamental_analysis.av_model.get_fraud_ratios, stocks.fa.income,openbb_terminal.stocks.fundamental_analysis.sdk_helpers.get_income_statement, @@ -468,7 +460,7 @@ stocks.options.unu,openbb_terminal.stocks.options.fdscanner_model.unusual_option stocks.options.screen.check_presets,openbb_terminal.stocks.options.screen.syncretism_model.check_presets, stocks.options.grhist,openbb_terminal.stocks.options.screen.syncretism_model.get_historical_greeks,openbb_terminal.stocks.options.screen.syncretism_view.view_historical_greeks stocks.options.screen.screener_output,openbb_terminal.stocks.options.screen.syncretism_model.get_screener_output,openbb_terminal.stocks.options.screen.syncretism_view.view_screener_output -stocks.options.hist_tr,openbb_terminal.stocks.options.tradier_model.get_historical_options,openbb_terminal.stocks.options.tradier_view.display_historical +stocks.options.hist,openbb_terminal.stocks.options.options_sdk_helper.hist, stocks.options.chains,openbb_terminal.stocks.options.options_sdk_helper.get_full_option_chain, stocks.options.last_price,openbb_terminal.stocks.options.tradier_model.last_price, stocks.options.expirations,openbb_terminal.stocks.options.options_sdk_helper.get_option_expirations, diff --git a/openbb_terminal/reports/templates/forecast.ipynb b/openbb_terminal/reports/templates/forecast.ipynb index e68a828b3447..719469043892 100644 --- a/openbb_terminal/reports/templates/forecast.ipynb +++ b/openbb_terminal/reports/templates/forecast.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "driven-billion", "metadata": {}, "outputs": [], @@ -39,7 +39,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "c3fe7db5-ec6a-42cf-9e66-52dc1de22370", "metadata": {}, "outputs": [], @@ -53,7 +53,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "9c3ae3e3-2b91-43a6-aa44-7b10986fd369", "metadata": {}, "outputs": [], @@ -83,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "intended-sherman", "metadata": { "tags": [ @@ -100,7 +100,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "e1f87190", "metadata": {}, "outputs": [], @@ -110,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "a441ddbc-d75b-4a18-84d4-e01b677674d3", "metadata": {}, "outputs": [], @@ -123,37 +123,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "1be26dae-cafe-4a22-80aa-eff296fc1a9b", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
Loading Daily data for VTI with starting period 2021-10-12.\n",
-       "
\n" - ], - "text/plain": [ - "Loading Daily data for VTI with starting period 2021-10-12.\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "('FORECAST RESEARCH REPORT ON VTI',\n", - " '16 November, 2022',\n", - " '10:28',\n", - " datetime.timezone(datetime.timedelta(days=-1, seconds=68400), 'EST'))" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "ticker_data = openbb.stocks.load(\n", " symbol=ticker, start_date=datetime.datetime.now() - datetime.timedelta(days=400)\n", @@ -179,21 +152,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "cb31e9ee-e7ae-4e1b-89b4-bb6f571cfdfa", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n \n 2022-11-16T10:28:51.895217\n image/svg+xml\n \n \n Matplotlib v3.5.3, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "local_fig, ax = plt.subplots(dpi=20)\n", "column = \"close\"\n", @@ -209,131 +171,30 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "d8bb53c1-147e-4342-af61-0d0a9cc56e59", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n \n 2022-11-16T10:28:54.048198\n image/svg+xml\n \n \n Matplotlib v3.5.3, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "corr_chart = get_image(openbb.forecast.corr_chart, None, ticker_data)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "74b914a1-ed32-4a17-a943-7879bc8f00df", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n \n 2022-11-16T10:29:00.609594\n image/svg+xml\n \n \n Matplotlib v3.5.3, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "season_chart = get_image(openbb.forecast.season_chart, \"Seasonality Data\", ticker_data)" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "53568c9b-aa06-4ba0-ad86-ede6732e3187", "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "004841e51d934f72b6e69c9fa0cb0e9f", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/40 [00:00Exponential smoothing obtains MAPE: 3.24% \n", - "\n", - "\n" - ], - "text/plain": [ - "Exponential smoothing obtains MAPE: 3.24% \n", - "\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
   Actual price: 200.36    \n",
-       "┏━━━━━━━━━━━━┳━━━━━━━━━━━━┓\n",
-       "┃ Datetime    Prediction ┃\n",
-       "┡━━━━━━━━━━━━╇━━━━━━━━━━━━┩\n",
-       "│ 2022-11-16 │ 200.76     │\n",
-       "├────────────┼────────────┤\n",
-       "│ 2022-11-17 │ 199.85     │\n",
-       "├────────────┼────────────┤\n",
-       "│ 2022-11-18 │ 200.72     │\n",
-       "├────────────┼────────────┤\n",
-       "│ 2022-11-21 │ 200.98     │\n",
-       "├────────────┼────────────┤\n",
-       "│ 2022-11-22 │ 200.85     │\n",
-       "└────────────┴────────────┘\n",
-       "
\n" - ], - "text/plain": [ - "\u001b[3m Actual price: \u001b[0m\u001b[3;33m200.36\u001b[0m\u001b[3m \u001b[0m\n", - "┏━━━━━━━━━━━━┳━━━━━━━━━━━━┓\n", - "┃\u001b[1m \u001b[0m\u001b[1mDatetime \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mPrediction\u001b[0m\u001b[1m \u001b[0m┃\n", - "┡━━━━━━━━━━━━╇━━━━━━━━━━━━┩\n", - "│ 2022-11-16 │ \u001b[38;2;0;170;255m200.76 \u001b[0m │\n", - "├────────────┼────────────┤\n", - "│ 2022-11-17 │ \u001b[38;2;0;170;255m199.85 \u001b[0m │\n", - "├────────────┼────────────┤\n", - "│ 2022-11-18 │ \u001b[38;2;0;170;255m200.72 \u001b[0m │\n", - "├────────────┼────────────┤\n", - "│ 2022-11-21 │ \u001b[38;2;0;170;255m200.98 \u001b[0m │\n", - "├────────────┼────────────┤\n", - "│ 2022-11-22 │ \u001b[38;2;0;170;255m200.85 \u001b[0m │\n", - "└────────────┴────────────┘\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/svg+xml": "\n\n\n \n \n \n \n 2022-11-16T10:29:35.374187\n image/svg+xml\n \n \n Matplotlib v3.5.3, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "expo_chart = get_image(openbb.forecast.expo_chart, None, ticker_data)" ] diff --git a/openbb_terminal/stocks/comparison_analysis/sdk_helpers.py b/openbb_terminal/stocks/comparison_analysis/sdk_helpers.py new file mode 100644 index 000000000000..7a709b9d4b94 --- /dev/null +++ b/openbb_terminal/stocks/comparison_analysis/sdk_helpers.py @@ -0,0 +1,51 @@ +"""CA SDK Helpers.""" +__docformat__ = "numpy" + +from typing import List + + +from openbb_terminal.stocks.comparison_analysis import ( + finviz_compare_model, + polygon_model, + finnhub_model, + yahoo_finance_model, +) + + +def get_similar(symbol: str, source="Finviz") -> List[str]: + """Find similar tickers to a given symbol. + + Parameters + ---------- + symbol : str + Symbol to find similar tickers to. + source : str, optional + Source to get data for, by default "Finviz". Can be "Finviz", "Polygon", "Finnhub", or "TSNE" + + Returns + ------- + List[str] + List of similar tickers. + + Examples + -------- + To get similar tickers to AAPL from Finviz: + >>> from openbb_terminal.sdk import openbb + >>> similar_tickers = openbb.stocks.ca.similar("AAPL) + + To use our custom TSNE model for similar tickers in the SP500: + >>> similar_tickers = openbb.stocks.ca.similar("AAPL", source="TSNE") + """ + if source.lower() == "finviz": + return finviz_compare_model.get_similar_companies(symbol) + + if source.lower() == "polygon": + return polygon_model.get_similar_companies(symbol) + + if source.lower() == "finnhub": + return finnhub_model.get_similar_companies(symbol) + + if source.lower() == "tsne": + return yahoo_finance_model.get_sp500_comps_tsne(symbol).index.to_list()[:10] + + return [] diff --git a/openbb_terminal/stocks/options/chartexchange_model.py b/openbb_terminal/stocks/options/chartexchange_model.py index fe8557b706f4..b2ca002a770f 100644 --- a/openbb_terminal/stocks/options/chartexchange_model.py +++ b/openbb_terminal/stocks/options/chartexchange_model.py @@ -1,5 +1,6 @@ """Chartexchange model""" -__docformat__ = "numpy" + +from __future__ import annotations import logging @@ -17,7 +18,10 @@ @log_start_end(log=logger) def get_option_history( - symbol: str = "GME", date: str = "2021-02-05", call: bool = True, price: str = "90" + symbol: str = "GME", + date: str = "2021-02-05", + call: bool = True, + price: str | int | float = "90", ) -> pd.DataFrame: """Historic prices for a specific option [chartexchange] @@ -25,7 +29,7 @@ def get_option_history( ---------- symbol : str Ticker symbol to get historical data from - date : str + date : str|int|float Date as a string YYYYMMDD call : bool Whether to show a call or a put diff --git a/openbb_terminal/stocks/options/options_controller.py b/openbb_terminal/stocks/options/options_controller.py index ce2773d8e6f8..a8cbd6070fb8 100644 --- a/openbb_terminal/stocks/options/options_controller.py +++ b/openbb_terminal/stocks/options/options_controller.py @@ -743,7 +743,9 @@ def call_hist(self, other_args: List[str]): ns_parser.export, ) - elif API_TRADIER_TOKEN != "REPLACE_ME": # nosec + elif ( + ns_parser.source == "Tradier" and API_TRADIER_TOKEN != "REPLACE_ME" + ): # nosec tradier_view.display_historical( symbol=self.ticker, expiry=self.selected_date, diff --git a/openbb_terminal/stocks/options/options_sdk_helper.py b/openbb_terminal/stocks/options/options_sdk_helper.py index 443fab7d2cc6..aafd87cc3d1f 100644 --- a/openbb_terminal/stocks/options/options_sdk_helper.py +++ b/openbb_terminal/stocks/options/options_sdk_helper.py @@ -1,10 +1,16 @@ """Options Functions For OpenBB SDK""" +from __future__ import annotations + import logging -from typing import List, Optional import pandas as pd -from openbb_terminal.stocks.options import nasdaq_model, tradier_model, yfinance_model +from openbb_terminal.stocks.options import ( + nasdaq_model, + tradier_model, + yfinance_model, + chartexchange_model, +) from openbb_terminal.decorators import log_start_end logger = logging.getLogger(__name__) @@ -12,7 +18,7 @@ @log_start_end(log=logger) def get_full_option_chain( - symbol: str, source: str = "Nasdaq", expiration: Optional[str] = None + symbol: str, source: str = "Nasdaq", expiration: str | None = None ) -> pd.DataFrame: """Get Option Chain For A Stock. No greek data is returned @@ -60,7 +66,7 @@ def get_full_option_chain( @log_start_end(log=logger) -def get_option_expirations(symbol: str, source: str = "Nasdaq") -> List: +def get_option_expirations(symbol: str, source: str = "Nasdaq") -> list: """Get Option Chain Expirations Parameters @@ -90,3 +96,46 @@ def get_option_expirations(symbol: str, source: str = "Nasdaq") -> List: logger.info("Invalid Source") return pd.DataFrame() + + +def hist( + symbol: str, + exp: str, + strike: int | float | str, + call: bool = True, + source="ChartExchange", +) -> pd.DataFrame: + """Get historical option pricing. + + Parameters + ---------- + symbol : str + Symbol to get data for + exp : str + Expiration date + strike : int | float | str + Strike price + call : bool, optional + Flag to indicate a call, by default True + source : str, optional + Source to get data from. Can be ChartExchange or Tradier, by default "ChartExchange" + + Returns + ------- + pd.DataFrame + DataFrame of historical option pricing + + Examples + -------- + >>> from openbb_terminal.sdk import openbb + >>> aapl_150_call = openbb.stocks.options.hist("AAPL", "2022-11-18", 150, call=True, source="ChartExchange") + + Because this generates a dataframe, we can easily plot the close price for a SPY put: + (Note that Tradier requires an API key) + >>> openbb.stocks.options.hist("SPY", "2022-11-18", 400, call=False, source="Tradier").plot(y="close) + """ + if source.lower() == "chartexchange": + return chartexchange_model.get_option_history(symbol, exp, call, strike) + if source.lower() == "tradier": + return tradier_model.get_historical_options(symbol, exp, strike, not call) + return pd.DataFrame()