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)