diff options
author | James Maslek <jmaslek11@gmail.com> | 2023-03-06 13:57:32 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-06 13:57:32 -0500 |
commit | f0d8fa65e5116ca7c536cdfade2d4a43d811fc84 (patch) | |
tree | 813a5ef765e9b50d0edc688e4a2b9be034dab740 | |
parent | 324dcb77e6dba4c2422de907ce98ec8097e8f23b (diff) |
Make the UI a little cleaner (#4405)
* Make the UI a little cleaner
* ta load
---------
Co-authored-by: Henrique Joaquim <h.joaquim@campus.fct.unl.pt>
16 files changed, 365 insertions, 270 deletions
diff --git a/openbb_terminal/miscellaneous/i18n/en.yml b/openbb_terminal/miscellaneous/i18n/en.yml index 6e56e1c5726..74887da3e25 100644 --- a/openbb_terminal/miscellaneous/i18n/en.yml +++ b/openbb_terminal/miscellaneous/i18n/en.yml @@ -412,6 +412,7 @@ en: stocks/bt/rsi: buy when RSI < low and sell when RSI > high stocks/bt/load: load a specific stock ticker for analysis stocks/ta/_ticker: Ticker + stocks/ta/load: load a specific stock ticker for analysis stocks/ta/view: view historical data and trendlines stocks/ta/summary: technical summary report stocks/ta/recom: recommendation based on technical indicators diff --git a/openbb_terminal/stocks/backtesting/bt_controller.py b/openbb_terminal/stocks/backtesting/bt_controller.py index 6bf94957bdc..12904fb0df6 100644 --- a/openbb_terminal/stocks/backtesting/bt_controller.py +++ b/openbb_terminal/stocks/backtesting/bt_controller.py @@ -63,15 +63,16 @@ class BacktestingController(StockBaseController): def print_help(self): """Print help""" mt = MenuText("stocks/bt/") + mt.add_raw("") + mt.add_param("_ticker", self.ticker.upper() or "No Ticker Loaded") mt.add_raw("\n") - mt.add_param("_ticker", self.ticker.upper()) mt.add_cmd("load") mt.add_raw("\n") - mt.add_cmd("whatif") + mt.add_cmd("whatif", self.ticker) mt.add_raw("\n") - mt.add_cmd("ema") - mt.add_cmd("emacross") - mt.add_cmd("rsi") + mt.add_cmd("ema", self.ticker) + mt.add_cmd("emacross", self.ticker) + mt.add_cmd("rsi", self.ticker) console.print(text=mt.menu_text, menu="Stocks - Backtesting") def custom_reset(self): diff --git a/openbb_terminal/stocks/comparison_analysis/ca_controller.py b/openbb_terminal/stocks/comparison_analysis/ca_controller.py index 5c6fee46e10..57de3392c4a 100644 --- a/openbb_terminal/stocks/comparison_analysis/ca_controller.py +++ b/openbb_terminal/stocks/comparison_analysis/ca_controller.py @@ -346,7 +346,8 @@ class ComparisonAnalysisController(BaseController): ) else: console.print( - "You need to 'set' a ticker to get similar companies from first!" + "You need to 'set' a ticker to get similar companies from first! This is " + "for example done by running 'ticker aapl'" ) @log_start_end(log=logger) diff --git a/openbb_terminal/stocks/fundamental_analysis/fa_controller.py b/openbb_terminal/stocks/fundamental_analysis/fa_controller.py index 73a3d75ec75..a4f026e0aa4 100644 --- a/openbb_terminal/stocks/fundamental_analysis/fa_controller.py +++ b/openbb_terminal/stocks/fundamental_analysis/fa_controller.py @@ -44,6 +44,10 @@ from openbb_terminal.terminal_helper import suppress_stdout logger = logging.getLogger(__name__) +no_ticker_message = ( + "No ticker loaded. Use 'load' command to load a ticker or use the -t flag." +) + class FundamentalAnalysisController(StockBaseController): """Fundamental Analysis Controller class""" @@ -199,6 +203,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return eclect_us_view.display_analysis( symbol=self.ticker, export=ns_parser.export, @@ -235,6 +242,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return business_insider_view.display_management( symbol=self.ticker, export=ns_parser.export, @@ -270,6 +280,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return if ns_parser.source == "Finviz": finviz_view.display_screen_data( symbol=self.ticker, @@ -338,7 +351,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) - + if not self.ticker: + console.print(no_ticker_message) + return fmp_view.valinvest_score( self.ticker, ns_parser.years, @@ -405,6 +420,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return if ns_parser.source == "FinancialModelingPrep": fmp_view.display_enterprise( @@ -485,6 +503,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return if ns_parser.source == "FinancialModelingPrep": fmp_view.display_key_metrics( @@ -565,6 +586,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return fmp_view.display_financial_ratios( symbol=self.ticker, @@ -632,6 +656,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return fmp_view.display_financial_statement_growth( symbol=self.ticker, @@ -668,6 +695,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return seeking_alpha_view.display_eps_estimates( self.ticker, @@ -702,6 +732,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return seeking_alpha_view.display_rev_estimates( self.ticker, @@ -735,6 +768,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return yahoo_finance_view.display_splits( self.ticker, @@ -780,6 +816,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return if not self.suffix: yahoo_finance_view.display_shareholders( @@ -833,6 +872,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return if not self.suffix: yahoo_finance_view.display_dividends( @@ -910,6 +952,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return ns_parser.plot = list_from_str(ns_parser.plot) # TODO: Switch to actually getting data @@ -1053,6 +1098,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return ns_parser.plot = list_from_str(ns_parser.plot) # TODO: Switch to actually getting data @@ -1200,6 +1248,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return ns_parser.plot = list_from_str(ns_parser.plot) # TODO: Switch to actually getting data @@ -1318,6 +1369,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return if ns_parser.source == "AlphaVantage": av_view.display_earnings( @@ -1412,6 +1466,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return av_view.display_fraud( symbol=self.ticker, @@ -1453,6 +1510,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return av_view.display_dupont( self.ticker, raw=ns_parser.raw, export=ns_parser.export @@ -1555,6 +1615,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return if self.ticker: dcf = dcf_view.CreateExcelFA( @@ -1615,6 +1678,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return fmp_view.display_discounted_cash_flow( symbol=self.ticker, @@ -1732,6 +1798,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return business_insider_view.price_target_from_analysts( symbol=self.ticker, @@ -1777,6 +1846,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return business_insider_view.estimates( symbol=self.ticker, @@ -1831,6 +1903,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return finnhub_view.rating_over_time( symbol=self.ticker, @@ -1882,6 +1957,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return if ns_parser.source == "Finviz": finviz_view.analyst( @@ -1949,6 +2027,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return if ns_parser.source == "MarketWatch": marketwatch_view.sec_filings( @@ -1994,6 +2075,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return csimarket_view.suppliers( symbol=self.ticker, @@ -2027,6 +2111,9 @@ class FundamentalAnalysisController(StockBaseController): if ns_parser.ticker: self.ticker = ns_parser.ticker self.custom_load_wrapper([self.ticker]) + if not self.ticker: + console.print(no_ticker_message) + return csimarket_view.customers( symbol=self.ticker, diff --git a/openbb_terminal/stocks/quantitative_analysis/qa_controller.py b/openbb_terminal/stocks/quantitative_analysis/qa_controller.py index c34a4c53958..a7588e10584 100644 --- a/openbb_terminal/stocks/quantitative_analysis/qa_controller.py +++ b/openbb_terminal/stocks/quantitative_analysis/qa_controller.py @@ -114,40 +114,42 @@ class QaController(StockBaseController): mt = MenuText("stocks/qa/") mt.add_cmd("load") - mt.add_cmd("pick") + mt.add_cmd("pick", not self.stock.empty) mt.add_raw("\n") - mt.add_param("_ticker", stock_str) + mt.add_param( + "_ticker", stock_str if not self.stock.empty else "No ticker loaded" + ) mt.add_param("_target", self.target) mt.add_raw("\n") mt.add_info("_statistics_") - mt.add_cmd("summary") - mt.add_cmd("normality") - mt.add_cmd("unitroot") + mt.add_cmd("summary", not self.stock.empty) + mt.add_cmd("normality", not self.stock.empty) + mt.add_cmd("unitroot", not self.stock.empty) mt.add_info("_plots_") - mt.add_cmd("line") - mt.add_cmd("hist") - mt.add_cmd("cdf") - mt.add_cmd("bw") - mt.add_cmd("acf") - mt.add_cmd("qqplot") + mt.add_cmd("line", not self.stock.empty) + mt.add_cmd("hist", not self.stock.empty) + mt.add_cmd("cdf", not self.stock.empty) + mt.add_cmd("bw", not self.stock.empty) + mt.add_cmd("acf", not self.stock.empty) + mt.add_cmd("qqplot", not self.stock.empty) mt.add_info("_rolling_metrics_") - mt.add_cmd("rolling") - mt.add_cmd("spread") - mt.add_cmd("quantile") - mt.add_cmd("skew") - mt.add_cmd("kurtosis") + mt.add_cmd("rolling", not self.stock.empty) + mt.add_cmd("spread", not self.stock.empty) + mt.add_cmd("quantile", not self.stock.empty) + mt.add_cmd("skew", not self.stock.empty) + mt.add_cmd("kurtosis", not self.stock.empty) mt.add_info("_risk_") - mt.add_cmd("var") - mt.add_cmd("es") - mt.add_cmd("sh") - mt.add_cmd("so") - mt.add_cmd("om") + mt.add_cmd("var", not self.stock.empty) + mt.add_cmd("es", not self.stock.empty) + mt.add_cmd("sh", not self.stock.empty) + mt.add_cmd("so", not self.stock.empty) + mt.add_cmd("om", not self.stock.empty) mt.add_info("_other_") - mt.add_cmd("raw") - mt.add_cmd("decompose") - mt.add_cmd("cusum") - mt.add_cmd("capm") - mt.add_cmd("beta") + mt.add_cmd("raw", not self.stock.empty) + mt.add_cmd("decompose", not self.stock.empty) + mt.add_cmd("cusum", not self.stock.empty) + mt.add_cmd("capm", not self.stock.empty) + mt.add_cmd("beta", not self.stock.empty) console.print(text=mt.menu_text, menu="Stocks - Quantitative Analysis") def custom_reset(self): diff --git a/openbb_terminal/stocks/technical_analysis/ta_controller.py b/openbb_terminal/stocks/technical_analysis/ta_controller.py index fb1af48480d..930add3a099 100644 --- a/openbb_terminal/stocks/technical_analysis/ta_controller.py +++ b/openbb_terminal/stocks/technical_analysis/ta_controller.py @@ -129,7 +129,11 @@ class TechnicalAnalysisController(StockBaseController): stock_str = f"{s_intraday} {self.ticker}" mt = MenuText("stocks/ta/", 90) - mt.add_param("_ticker", stock_str) + mt.add_param( + "_ticker", stock_str if not self.stock.empty else "No ticker loaded" + ) + mt.add_raw("\n") + mt.add_cmd("load") mt.add_raw("\n") mt.add_cmd("recom") mt.add_cmd("summary") @@ -137,38 +141,38 @@ class TechnicalAnalysisController(StockBaseController): mt.add_cmd("view") mt.add_raw("\n") mt.add_info("_overlap_") - mt.add_cmd("ema") - mt.add_cmd("hma") - mt.add_cmd("sma") - mt.add_cmd("wma") - mt.add_cmd("vwap") - mt.add_cmd("zlma") + mt.add_cmd("ema", not self.stock.empty) + mt.add_cmd("hma", not self.stock.empty) + mt.add_cmd("sma", not self.stock.empty) + mt.add_cmd("wma", not self.stock.empty) + mt.add_cmd("vwap", not self.stock.empty) + mt.add_cmd("zlma", not self.stock.empty) mt.add_info("_momentum_") - mt.add_cmd("cci") - mt.add_cmd("cg") - mt.add_cmd("clenow") - mt.add_cmd("demark") - mt.add_cmd("macd") - mt.add_cmd("fisher") - mt.add_cmd("rsi") - mt.add_cmd("rsp") - mt.add_cmd("stoch") + mt.add_cmd("cci", not self.stock.empty) + mt.add_cmd("cg", not self.stock.empty) + mt.add_cmd("clenow", not self.stock.empty) + mt.add_cmd("demark", not self.stock.empty) + mt.add_cmd("macd", not self.stock.empty) + mt.add_cmd("fisher", not self.stock.empty) + mt.add_cmd("rsi", not self.stock.empty) + mt.add_cmd("rsp", not self.stock.empty) + mt.add_cmd("stoch", not self.stock.empty) mt.add_info("_trend_") - mt.add_cmd("adx") - mt.add_cmd("aroon") + mt.add_cmd("adx", not self.stock.empty) + mt.add_cmd("aroon", not self.stock.empty) mt.add_info("_volatility_") - mt.add_cmd("atr") - mt.add_cmd("bbands") - mt.add_cmd("cones") - mt.add_cmd("donchian") - mt.add_cmd("kc") + mt.add_cmd("atr", not self.stock.empty) + mt.add_cmd("bbands", not self.stock.empty) + mt.add_cmd("cones", not self.stock.empty) + mt.add_cmd("donchian", not self.stock.empty) + mt.add_cmd("kc", not self.stock.empty) mt.add_info("_volume_") - mt.add_cmd("ad") - mt.add_cmd("adosc") - mt.add_cmd("obv") + mt.add_cmd("ad", not self.stock.empty) + mt.add_cmd("adosc", not self.stock.empty) + mt.add_cmd("obv", not self.stock.empty) mt.add_info("_custom_") - mt.add_cmd("fib") - mt.add_cmd("multi") + mt.add_cmd("fib", not self.stock.empty) + mt.add_cmd("multi", not self.stock.empty) console.print(text=mt.menu_text, menu="Stocks - Technical Analysis") def custom_reset(self): diff --git a/tests/openbb_terminal/stocks/backtesting/txt/test_bt_controller/test_print_help.txt b/tests/openbb_terminal/stocks/backtesting/txt/test_bt_controller/test_print_help.txt index c247476712b..617e7e3c90c 100644 --- a/tests/openbb_terminal/stocks/backtesting/txt/test_bt_controller/test_print_help.txt +++ b/tests/openbb_terminal/stocks/backtesting/txt/test_bt_controller/test_print_help.txt @@ -1,5 +1,5 @@ - Ticker: TSLA + load load a specific stock ticker for analysis [YahooFinance, AlphaVantage, Polygon, EODHD] whatif what if you had bought X shares on day Y [YahooFinance] diff --git a/tests/openbb_terminal/stocks/behavioural_analysis/txt/test_cramer_view/test_cramer_ticker[True].txt b/tests/openbb_terminal/stocks/behavioural_analysis/txt/test_cramer_view/test_cramer_ticker[True].txt index 187cc6535e3..73110e66d29 100644 --- a/tests/openbb_terminal/stocks/behavioural_analysis/txt/test_cramer_view/test_cramer_ticker[True].txt +++ b/tests/openbb_terminal/stocks/behavioural_analysis/txt/test_cramer_view/test_cramer_ticker[True].txt @@ -1,16 +1,16 @@ - Company Date Price Symbol Recommendation InverseCramer
-0 Apple 2022-01-03 182.01 AAPL Buy Sell
-1 Apple 2022-01-05 174.92 AAPL Buy Sell
-2 Apple 2022-01-07 172.17 AAPL Buy Sell
-3 Apple 2022-01-11 175.08 AAPL Buy Sell
-4 Apple 2022-01-21 162.41 AAPL Buy Sell
-5 Apple 2022-01-27 159.22 AAPL Buy Sell
-6 Apple 2022-01-28 170.33 AAPL Buy Sell
-7 Apple 2022-01-31 174.78 AAPL Buy Sell
-8 Apple 2022-02-03 172.90 AAPL Buy Sell
-9 Apple 2022-03-25 174.72 AAPL Buy Sell
-10 Apple 2022-04-11 165.75 AAPL Sell Buy
-11 Apple 2022-04-12 167.66 AAPL Buy Sell
-12 Apple 2022-04-28 163.64 AAPL Buy Sell
-13 Apple 2022-05-17 149.24 AAPL Buy Sell
-14 Apple 2022-05-19 137.35 AAPL Buy Sell
+ Company Date Price Symbol Recommendation InverseCramer +0 Apple 2022-01-03 182.01 AAPL Buy Sell +1 Apple 2022-01-05 174.92 AAPL Buy Sell +2 Apple 2022-01-07 172.17 AAPL Buy Sell +3 Apple 2022-01-11 175.08 AAPL Buy Sell +4 Apple 2022-01-21 162.41 AAPL Buy Sell +5 Apple 2022-01-27 159.22 AAPL Buy Sell +6 Apple 2022-01-28 170.33 AAPL Buy Sell +7 Apple 2022-01-31 174.78 AAPL Buy Sell +8 Apple 2022-02-03 172.90 AAPL Buy Sell +9 Apple 2022-03-25 174.72 AAPL Buy Sell +10 Apple 2022-04-11 165.75 AAPL Sell Buy +11 Apple 2022-04-12 167.66 AAPL Buy Sell +12 Apple 2022-04-28 163.64 AAPL Buy Sell +13 Apple 2022-05-17 149.24 AAPL Buy Sell +14 Apple 2022-05-19 137.35 AAPL Buy Sell diff --git a/tests/openbb_terminal/stocks/dark_pool_shorts/txt/test_quandl_view/test_short_interest[False-True].txt b/tests/openbb_terminal/stocks/dark_pool_shorts/txt/test_quandl_view/test_short_interest[False-True].txt index afa202e68c6..ee901728832 100644 --- a/tests/openbb_terminal/stocks/dark_pool_shorts/txt/test_quandl_view/test_short_interest[False- |