From ac4b239cae39f5d463c6f77756cd278ccbe3c390 Mon Sep 17 00:00:00 2001 From: Olaf Tomczak Date: Fri, 9 Jul 2021 19:59:28 +0200 Subject: [PATCH] Allow to use non TA-Lib way of calculating CMO with TA-Lib installed --- pandas_ta/momentum/cmo.py | 6 +++--- tests/test_indicator_momentum.py | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/pandas_ta/momentum/cmo.py b/pandas_ta/momentum/cmo.py index 6c02ced..69ab1ca 100644 --- a/pandas_ta/momentum/cmo.py +++ b/pandas_ta/momentum/cmo.py @@ -12,11 +12,12 @@ def cmo(close, length=None, scalar=None, drift=None, offset=None, **kwargs): close = verify_series(close, length) drift = get_drift(drift) offset = get_offset(offset) + talib_mode = kwargs.pop("talib", True) if close is None: return # Calculate Result - if Imports["talib"]: + if talib_mode and Imports["talib"]: from talib import CMO cmo = CMO(close, length) else: @@ -24,8 +25,7 @@ def cmo(close, length=None, scalar=None, drift=None, offset=None, **kwargs): positive = mom.copy().clip(lower=0) negative = mom.copy().clip(upper=0).abs() - talib = kwargs.pop("talib", True) - if talib: + if talib_mode: pos_ = rma(positive, length) neg_ = rma(negative, length) else: diff --git a/tests/test_indicator_momentum.py b/tests/test_indicator_momentum.py index 84e4b68..9517e2c 100644 --- a/tests/test_indicator_momentum.py +++ b/tests/test_indicator_momentum.py @@ -144,6 +144,13 @@ class TestMomentum(TestCase): except Exception as ex: error_analysis(result, CORRELATION, ex) + def test_cmo_no_talib(self): + result = pandas_ta.cmo(self.close, talib=False) + + talib_result = tal.CMO(self.close) + corr = pandas_ta.utils.df_error_analysis(result, talib_result, col=CORRELATION) + self.assertLess(corr, CORRELATION_THRESHOLD) + def test_coppock(self): result = pandas_ta.coppock(self.close) self.assertIsInstance(result, Series)