Source code for pandas_ta.momentum.inertia

# -*- coding: utf-8 -*-
from pandas_ta.overlap import linreg
from pandas_ta.volatility import rvi
from pandas_ta.utils import get_drift, get_offset, verify_series


[docs]def inertia(close=None, high=None, low=None, length=None, rvi_length=None, scalar=None, refined=None, thirds=None, mamode=None, drift=None, offset=None, **kwargs): """Indicator: Inertia (INERTIA)""" # Validate Arguments length = int(length) if length and length > 0 else 20 rvi_length = int(rvi_length) if rvi_length and rvi_length > 0 else 14 scalar = float(scalar) if scalar and scalar > 0 else 100 refined = False if refined is None else True thirds = False if thirds is None else True mamode = mamode if isinstance(mamode, str) else "ema" _length = max(length, rvi_length) close = verify_series(close, _length) drift = get_drift(drift) offset = get_offset(offset) if close is None: return if refined or thirds: high = verify_series(high, _length) low = verify_series(low, _length) if high is None or low is None: return # Calculate Result if refined: _mode, rvi_ = "r", rvi(close, high=high, low=low, length=rvi_length, scalar=scalar, refined=refined, mamode=mamode) elif thirds: _mode, rvi_ = "t", rvi(close, high=high, low=low, length=rvi_length, scalar=scalar, thirds=thirds, mamode=mamode) else: _mode, rvi_ = "", rvi(close, length=rvi_length, scalar=scalar, mamode=mamode) inertia = linreg(rvi_, length=length) # Offset if offset != 0: inertia = inertia.shift(offset) # Handle fills if "fillna" in kwargs: inertia.fillna(kwargs["fillna"], inplace=True) if "fill_method" in kwargs: inertia.fillna(method=kwargs["fill_method"], inplace=True) # Name & Category _props = f"_{length}_{rvi_length}" inertia.name = f"INERTIA{_mode}{_props}" inertia.category = "momentum" return inertia
inertia.__doc__ = \ """Inertia (INERTIA) Inertia was developed by Donald Dorsey and was introduced his article in September, 1995. It is the Relative Vigor Index smoothed by the Least Squares Moving Average. Postive Inertia when values are greater than 50, Negative Inertia otherwise. Sources: https://www.investopedia.com/terms/r/relative_vigor_index.asp Calculation: Default Inputs: length=14, ma_length=20 LSQRMA = Least Squares Moving Average INERTIA = LSQRMA(RVI(length), ma_length) Args: open_ (pd.Series): Series of 'open's high (pd.Series): Series of 'high's low (pd.Series): Series of 'low's close (pd.Series): Series of 'close's length (int): It's period. Default: 20 rvi_length (int): RVI period. Default: 14 refined (bool): Use 'refined' calculation. Default: False thirds (bool): Use 'thirds' calculation. Default: False mamode (str): See ```help(ta.ma)```. Default: 'ema' drift (int): The difference period. Default: 1 offset (int): How many periods to offset the result. Default: 0 Kwargs: fillna (value, optional): pd.DataFrame.fillna(value) fill_method (value, optional): Type of fill method Returns: pd.Series: New feature generated. """