diff --git a/openbb_terminal/cryptocurrency/technical_analysis/ta_controller.py b/openbb_terminal/cryptocurrency/technical_analysis/ta_controller.py index 63ad4624bd6..36c4b2e30fe 100644 --- a/openbb_terminal/cryptocurrency/technical_analysis/ta_controller.py +++ b/openbb_terminal/cryptocurrency/technical_analysis/ta_controller.py @@ -1,6 +1,6 @@ """Crypto Technical Analysis Controller Module""" __docformat__ = "numpy" -# pylint:disable=too-many-lines +# pylint:disable=too-many-lines,R0904,C0201 import argparse import logging @@ -38,6 +38,9 @@ from openbb_terminal.rich_config import MenuText, console logger = logging.getLogger(__name__) +def no_ticker_message(): + """Print message when no ticker is loaded""" + console.print("[red]No data loaded. Use 'load' command to load a symbol[/red]") class TechnicalAnalysisController(CryptoBaseController): """Technical Analysis Controller class""" @@ -66,6 +69,9 @@ class TechnicalAnalysisController(CryptoBaseController): "obv", "fib", "tv", + "atr", + "demark", + "cones", ] PATH = "/crypto/ta/" @@ -128,22 +134,24 @@ class TechnicalAnalysisController(CryptoBaseController): mt.add_raw("\n") mt.add_info("_overlap_") mt.add_cmd("ema") - mt.add_cmd("sma") - mt.add_cmd("wma") mt.add_cmd("hma") - mt.add_cmd("zlma") + mt.add_cmd("sma") mt.add_cmd("vwap") + mt.add_cmd("wma") + mt.add_cmd("zlma") mt.add_info("_momentum_") mt.add_cmd("cci") + mt.add_cmd("cg") + mt.add_cmd("demark") + mt.add_cmd("fisher") mt.add_cmd("macd") mt.add_cmd("rsi") mt.add_cmd("stoch") - mt.add_cmd("fisher") - mt.add_cmd("cg") mt.add_info("_trend_") mt.add_cmd("adx") mt.add_cmd("aroon") mt.add_info("_volatility_") + mt.add_cmd("atr") mt.add_cmd("bbands") mt.add_cmd("donchian") mt.add_cmd("kc") @@ -1371,3 +1379,98 @@ class TechnicalAnalysisController(CryptoBaseController): if ns_parser.sheet_name else None, ) + + @log_start_end(log=logger) + def call_demark(self, other_args: List[str]): + """Process demark command""" + parser = argparse.ArgumentParser( + add_help=False, + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + prog="demark", + description="Calculates the Demark sequential indicator.", + ) + parser.add_argument( + "-m", + "--min", + help="Minimum value of indicator to show (declutters plot).", + dest="min_to_show", + type=check_positive, + default=5, + ) + + ns_parser = self.parse_known_args_and_warn( + parser, other_args, EXPORT_BOTH_RAW_DATA_AND_FIGURES + ) + if ns_parser: + if not self.coin: + no_ticker_message() + return + momentum_view.display_demark( + self.stock, + self.coin.upper(), + min_to_show=ns_parser.min_to_show, + export=ns_parser.export, + sheet_name=" ".join(ns_parser.sheet_name) + if ns_parser.sheet_name + else None, + ) + + @log_start_end(log=logger) + def call_atr(self, other_args: List[str]): + """Process atr command""" + parser = argparse.ArgumentParser( + add_help=False, + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + prog="atr", + description=""" + Averge True Range is used to measure volatility, especially volatility caused by + gaps or limit moves. + """, + ) + parser.add_argument( + "-l", + "--length", + action="store", + dest="n_length", + type=check_positive, + default=14, + help="Window length", + ) + parser.add_argument( + "-m", + "--mamode", + action="store", + dest="s_mamode", + default="ema", + choices=volatility_model.MAMODES, + help="mamode", + ) + parser.add_argument( + "-o", + "--offset", + action="store", + dest="n_offset", + type=int, + default=0, + help="offset", + ) + + ns_parser = self.parse_known_args_and_warn( + parser, other_args, EXPORT_BOTH_RAW_DATA_AND_FIGURES + ) + + if ns_parser: + if not self.coin: + no_ticker_message() + return + volatility_view.display_atr( + data=self.stock, + symbol=self.coin.upper(), + window=ns_parser.n_length, + mamode=ns_parser.s_mamode, + offset=ns_parser.n_offset, + export=ns_parser.export, + sheet_name=" ".join(ns_parser.sheet_name) + if ns_parser.sheet_name + else None, + ) diff --git a/openbb_terminal/miscellaneous/i18n/en.yml b/openbb_terminal/miscellaneous/i18n/en.yml index 28b7eb3e0fe..d44104e18db 100644 --- a/openbb_terminal/miscellaneous/i18n/en.yml +++ b/openbb_terminal/miscellaneous/i18n/en.yml @@ -641,6 +641,7 @@ en: crypto/ta/vwap: volume weighted average price crypto/ta/_momentum_: Momentum crypto/ta/cci: commodity channel index + crypto/ta/demark: Tom Demark's sequential indicator crypto/ta/macd: moving average convergence/divergence crypto/ta/rsi: relative strength index crypto/ta/stoch: stochastic oscillator @@ -650,6 +651,7 @@ en: crypto/ta/adx: average directional movement index crypto/ta/aroon: aroon indicator crypto/ta/_volatility_: Volatility + crypto/ta/atr: average true range crypto/ta/bbands: bollinger bands crypto/ta/donchian: donchian channels crypto/ta/kc: keltner channels diff --git a/openbb_terminal/miscellaneous/library/trail_map.csv b/openbb_terminal/miscellaneous/library/trail_map.csv index ca6cafd7ffc..421a0bf0877 100644 --- a/openbb_terminal/miscellaneous/library/trail_map.csv +++ b/openbb_terminal/miscellaneous/library/trail_map.csv @@ -539,4 +539,5 @@ ta.stoch,openbb_terminal.common.technical_analysis.momentum_model.stoch,openbb_t ta.vwap,openbb_terminal.common.technical_analysis.overlap_model.vwap,openbb_terminal.common.technical_analysis.overlap_view.view_vwap ta.wma,openbb_terminal.common.technical_analysis.overlap_model.wma, ta.zlma,openbb_terminal.common.technical_analysis.overlap_model.zlma, +ta.cones,openbb_terminal.common.technical_analysis.volatility_model.rvol,openbb_terminal.common.technical_analysis.volatility_view.display_rvol whoami,openbb_terminal.session.sdk_session.whoami, diff --git a/openbb_terminal/sdk_core/models/ta_sdk_model.py b/openbb_terminal/sdk_core/models/ta_sdk_model.py index 8e03253c13a..6b8a1c6bca5 100644 --- a/openbb_terminal/sdk_core/models/ta_sdk_model.py +++ b/openbb_terminal/sdk_core/models/ta_sdk_model.py @@ -46,8 +46,8 @@ class TaRoot(Category): `obv_chart`: Plots OBV technical indicator\n `rsi`: Relative strength index\n `rsi_chart`: Plots RSI Indicator\n - `rvol`: Realized Volatility Cones\n - `rvol_chart`: Plots Realized Volatility Cones\n + `cones`: Realized Volatility Cones\n + `cones_chart`: Plots Realized Volatility Cones\n `sma`: Gets simple moving average (SMA) for stock\n `stoch`: Stochastic oscillator\n `stoch_chart`: Plots stochastic oscillator signal\n @@ -99,8 +99,8 @@ class TaRoot(Category): self.obv_chart = lib.common_ta_volume_view.display_obv self.rsi = lib.common_ta_momentum_model.rsi self.rsi_chart = lib.common_ta_momentum_view.display_rsi - self.rvol = lib.common_ta_volatility_model.rvol - self.rvol_chart = lib.common_ta_volatility_view.display_rvol + self.cones = lib.common_ta_volatility_model.rvol + self.cones_chart = lib.common_ta_volatility_view.display_rvol self.sma = lib.common_ta_overlap_model.sma self.stoch = lib.common_ta_momentum_model.stoch self.stoch_chart = lib.common_ta_momentum_view.display_stoch