Source code for pandas_ta.volatility.aberration

# -*- coding: utf-8 -*-
# from numpy import sqrt as npsqrt
from pandas import DataFrame
from .atr import atr
from pandas_ta.overlap import hlc3, sma
from pandas_ta.utils import get_offset, verify_series


[docs]def aberration(high, low, close, length=None, atr_length=None, offset=None, **kwargs): """Indicator: Aberration (ABER)""" # Validate arguments length = int(length) if length and length > 0 else 5 atr_length = int(atr_length) if atr_length and atr_length > 0 else 15 _length = max(atr_length, length) high = verify_series(high, _length) low = verify_series(low, _length) close = verify_series(close, _length) offset = get_offset(offset) if high is None or low is None or close is None: return # Calculate Result atr_ = atr(high=high, low=low, close=close, length=atr_length) jg = hlc3(high=high, low=low, close=close) zg = sma(jg, length) sg = zg + atr_ xg = zg - atr_ # Offset if offset != 0: zg = zg.shift(offset) sg = sg.shift(offset) xg = xg.shift(offset) atr_ = atr_.shift(offset) # Handle fills if "fillna" in kwargs: zg.fillna(kwargs["fillna"], inplace=True) sg.fillna(kwargs["fillna"], inplace=True) xg.fillna(kwargs["fillna"], inplace=True) atr_.fillna(kwargs["fillna"], inplace=True) if "fill_method" in kwargs: zg.fillna(method=kwargs["fill_method"], inplace=True) sg.fillna(method=kwargs["fill_method"], inplace=True) xg.fillna(method=kwargs["fill_method"], inplace=True) atr_.fillna(method=kwargs["fill_method"], inplace=True) # Name and Categorize it _props = f"_{length}_{atr_length}" zg.name = f"ABER_ZG{_props}" sg.name = f"ABER_SG{_props}" xg.name = f"ABER_XG{_props}" atr_.name = f"ABER_ATR{_props}" zg.category = sg.category = "volatility" xg.category = atr_.category = zg.category # Prepare DataFrame to return data = {zg.name: zg, sg.name: sg, xg.name: xg, atr_.name: atr_} aberdf = DataFrame(data) aberdf.name = f"ABER{_props}" aberdf.category = zg.category return aberdf
aberration.__doc__ = \ """Aberration A volatility indicator similar to Keltner Channels. Sources: Few internet resources on definitive definition. Request by Github user homily, issue #46 Calculation: Default Inputs: length=5, atr_length=15 ATR = Average True Range SMA = Simple Moving Average ATR = ATR(length=atr_length) JG = TP = HLC3(high, low, close) ZG = SMA(JG, length) SG = ZG + ATR XG = ZG - ATR Args: high (pd.Series): Series of 'high's low (pd.Series): Series of 'low's close (pd.Series): Series of 'close's length (int): The short period. Default: 5 atr_length (int): The short period. Default: 15 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.DataFrame: zg, sg, xg, atr columns. """