Source code for pandas_ta.statistics.tos_stdevall

# -*- coding: utf-8 -*-
from numpy import array as npArray
from numpy import arange as npArange
from numpy import polyfit as npPolyfit
from numpy import std as npStd
from pandas import DataFrame, DatetimeIndex, Series
from .stdev import stdev as stdev
from pandas_ta.utils import get_offset, verify_series

[docs]def tos_stdevall(close, length=None, stds=None, ddof=None, offset=None, **kwargs): """Indicator: TD Ameritrade's Think or Swim Standard Deviation All""" # Validate Arguments stds = stds if isinstance(stds, list) and len(stds) > 0 else [1, 2, 3] if min(stds) <= 0: return if not all(i < j for i, j in zip(stds, stds[1:])): stds = stds[::-1] ddof = int(ddof) if ddof and ddof >= 0 and ddof < length else 1 offset = get_offset(offset) _props = f"TOS_STDEVALL" if length is None: length = close.size else: length = int(length) if isinstance(length, int) and length > 2 else 30 close = close.iloc[-length:] _props = f"{_props}_{length}" close = verify_series(close, length) if close is None: return # Calculate Result X = src_index = close.index if isinstance(close.index, DatetimeIndex): X = npArange(length) close = npArray(close) m, b = npPolyfit(X, close, 1) lr = Series(m * X + b, index=src_index) stdev = npStd(close, ddof=ddof) # Name and Categorize it df = DataFrame({f"{_props}_LR": lr}, index=src_index) for i in stds: df[f"{_props}_L_{i}"] = lr - i * stdev df[f"{_props}_U_{i}"] = lr + i * stdev df[f"{_props}_L_{i}"].name = df[f"{_props}_U_{i}"].name = f"{_props}" df[f"{_props}_L_{i}"].category = df[f"{_props}_U_{i}"].category = "statistics" # Offset if offset != 0: df = df.shift(offset) # Handle fills if "fillna" in kwargs: df.fillna(kwargs["fillna"], inplace=True) if "fill_method" in kwargs: df.fillna(method=kwargs["fill_method"], inplace=True) # Prepare DataFrame to return df.name = f"{_props}" df.category = "statistics" return df
tos_stdevall.__doc__ = \ """TD Ameritrade's Think or Swim Standard Deviation All (TOS_STDEV) A port of TD Ameritrade's Think or Swim Standard Deviation All indicator which returns the standard deviation of data for the entire plot or for the interval of the last bars defined by the length parameter. Sources: https://tlc.thinkorswim.com/center/reference/thinkScript/Functions/Statistical/StDevAll Calculation: Default Inputs: length=None (All), stds=[1, 2, 3], ddof=1 LR = Linear Regression STDEV = Standard Deviation LR = LR(close, length) STDEV = STDEV(close, length, ddof) for level in stds: LOWER = LR - level * STDEV UPPER = LR + level * STDEV Args: close (pd.Series): Series of 'close's length (int): Bars from current bar. Default: None stds (list): List of Standard Deviations in increasing order from the central Linear Regression line. Default: [1,2,3] ddof (int): Delta Degrees of Freedom. The divisor used in calculations is N - ddof, where N represents the number of elements. 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.DataFrame: Central LR, Pairs of Lower and Upper LR Lines based on mulitples of the standard deviation. Default: returns 7 columns. """