MAINT refactoring inits

This commit is contained in:
Kevin Johnson
2020-05-22 15:35:06 -07:00
parent b297955457
commit badfc1fcc0
10 changed files with 213 additions and 221 deletions
+1 -115
View File
@@ -18,118 +18,4 @@ except DistributionNotFound:
else:
__version__ = _dist.version
# Momentum
from .momentum.ao import ao
from .momentum.apo import apo
from .momentum.bias import bias
from .momentum.bop import bop
from .momentum.brar import brar
from .momentum.cci import cci
from .momentum.cg import cg
from .momentum.cmo import cmo
from .momentum.coppock import coppock
from .momentum.fisher import fisher
from .momentum.kdj import kdj
from .momentum.kst import kst
from .momentum.macd import macd
from .momentum.mom import mom
from .momentum.ppo import ppo
from .momentum.psl import psl
from .momentum.roc import roc
from .momentum.rsi import rsi
from .momentum.rvi import rvi
from .momentum.slope import slope
from .momentum.stoch import stoch
from .momentum.trix import trix
from .momentum.tsi import tsi
from .momentum.uo import uo
from .momentum.willr import willr
# Overlap
from .overlap.dema import dema
from .overlap.ema import ema
from .overlap.fwma import fwma
from .overlap.hl2 import hl2
from .overlap.hlc3 import hlc3
from .overlap.hma import hma
from .overlap.kama import kama
from .overlap.ichimoku import ichimoku
from .overlap.linreg import linreg
from .overlap.midpoint import midpoint
from .overlap.midprice import midprice
from .overlap.ohlc4 import ohlc4
from .overlap.pwma import pwma
from .overlap.rma import rma
from .overlap.sinwma import sinwma
from .overlap.sma import sma
from .overlap.swma import swma
from .overlap.t3 import t3
from .overlap.tema import tema
from .overlap.trima import trima
from .overlap.vwap import vwap
from .overlap.vwma import vwma
from .overlap.wcp import wcp
from .overlap.wma import wma
from .overlap.zlma import zlma
# Performance
from .performance.log_return import log_return
from .performance.percent_return import percent_return
from .performance.trend_return import trend_return
# Statistics
from .statistics.kurtosis import kurtosis
from .statistics.mad import mad
from .statistics.median import median
from .statistics.quantile import quantile
from .statistics.skew import skew
from .statistics.stdev import stdev
from .statistics.variance import variance
from .statistics.zscore import zscore
# Trend
from .trend.adx import adx
from .trend.amat import amat
from .trend.aroon import aroon
from .trend.chop import chop
from .trend.cksp import cksp
from .trend.decreasing import decreasing
from .trend.dpo import dpo
from .trend.increasing import increasing
from .trend.linear_decay import linear_decay
from .trend.long_run import long_run
from .trend.psar import psar
from .trend.qstick import qstick
from .trend.short_run import short_run
from .trend.vortex import vortex
# Volatility
from .volatility.aberration import aberration
from .volatility.accbands import accbands
from .volatility.atr import atr
from .volatility.bbands import bbands
from .volatility.donchian import donchian
from .volatility.kc import kc
from .volatility.massi import massi
from .volatility.pdist import pdist
from .volatility.natr import natr
from .volatility.true_range import true_range
# Volume
from .volume.ad import ad
from .volume.adosc import adosc
from .volume.aobv import aobv
from .volume.cmf import cmf
from .volume.efi import efi
from .volume.eom import eom
from .volume.mfi import mfi
from .volume.nvi import nvi
from .volume.obv import obv
from .volume.pvi import pvi
from .volume.pvol import pvol
from .volume.pvt import pvt
from .volume.vp import vp
# DataFrame Extension
from .core import *
from pandas_ta.core import *
+106 -98
View File
@@ -4,6 +4,14 @@ import pandas as pd
from pandas.core.base import PandasObject
from .utils import *
from pandas_ta.momentum import *
from pandas_ta.overlap import *
from pandas_ta.performance import *
from pandas_ta.statistics import *
from pandas_ta.trend import *
from pandas_ta.volatility import *
from pandas_ta.volume import *
class BasePandasObject(PandasObject):
"""Simple PandasObject Extension
@@ -280,7 +288,7 @@ class AnalysisIndicators(BasePandasObject):
def ao(self, high=None, low=None, fast=None, slow=None, offset=None, **kwargs):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
from pandas_ta.momentum.ao import ao
result = ao(high=high, low=low, fast=fast, slow=slow, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -288,7 +296,7 @@ class AnalysisIndicators(BasePandasObject):
def apo(self, close=None, fast=None, slow=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.apo import apo
result = apo(close=close, fast=fast, slow=slow, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -296,7 +304,7 @@ class AnalysisIndicators(BasePandasObject):
def bias(self, close=None, length=None, mamode=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.bias import bias
result = bias(close=close, length=length, mamode=mamode, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -307,7 +315,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.momentum.bop import bop
result = bop(open_=open_, high=high, low=low, close=close, percentage=percentage, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -318,7 +326,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.momentum.brar import brar
result = brar(open_=open_, high=high, low=low, close=close, length=length, scalar=scalar, drift=drift, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -328,7 +336,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.momentum.cci import cci
result = cci(high=high, low=low, close=close, length=length, c=c, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -336,7 +344,7 @@ class AnalysisIndicators(BasePandasObject):
def cg(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.cg import cg
result = cg(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -344,7 +352,7 @@ class AnalysisIndicators(BasePandasObject):
def cmo(self, close=None, length=None, scalar=None, drift=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.cmo import cmo
result = cmo(close=close, length=length, scalar=scalar, drift=drift, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -352,7 +360,7 @@ class AnalysisIndicators(BasePandasObject):
def coppock(self, close=None, length=None, fast=None, slow=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.coppock import coppock
result = coppock(close=close, length=length, fast=fast, slow=slow, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -361,7 +369,7 @@ class AnalysisIndicators(BasePandasObject):
def fisher(self, high=None, low=None, length=None, offset=None, **kwargs):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
from pandas_ta.momentum.fisher import fisher
result = fisher(high=high, low=low, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -371,7 +379,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.momentum.kdj import kdj
result = kdj(high=high, low=low, close=close, length=length, signal=signal, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -379,7 +387,7 @@ class AnalysisIndicators(BasePandasObject):
def kst(self, close=None, roc1=None, roc2=None, roc3=None, roc4=None, sma1=None, sma2=None, sma3=None, sma4=None, signal=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.kst import kst
result = kst(close=close, roc1=roc1, roc2=roc2, roc3=roc3, roc4=roc4, sma1=sma1, sma2=sma2, sma3=sma3, sma4=sma4, signal=signal, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -387,7 +395,7 @@ class AnalysisIndicators(BasePandasObject):
def macd(self, close=None, fast=None, slow=None, signal=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.macd import macd
result = macd(close=close, fast=fast, slow=slow, signal=signal, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -395,7 +403,7 @@ class AnalysisIndicators(BasePandasObject):
def mom(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.mom import mom
result = mom(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -403,7 +411,7 @@ class AnalysisIndicators(BasePandasObject):
def ppo(self, close=None, fast=None, slow=None, percentage=True, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.ppo import ppo
result = ppo(close=close, fast=fast, slow=slow, percentage=percentage, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -413,7 +421,7 @@ class AnalysisIndicators(BasePandasObject):
if open_ is not None:
open_ = self._get_column(open_, 'open')
close = self._get_column(close, 'close')
from pandas_ta.momentum.psl import psl
result = psl(close=close, open_=open_, length=length, scalar=scalar, drift=drift, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -421,7 +429,7 @@ class AnalysisIndicators(BasePandasObject):
def roc(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.roc import roc
result = roc(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -429,7 +437,7 @@ class AnalysisIndicators(BasePandasObject):
def rsi(self, close=None, length=None, scalar=None, drift=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.rsi import rsi
result = rsi(close=close, length=length, scalar=scalar, drift=drift, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -440,7 +448,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.momentum.rvi import rvi
result = rvi(open_=open_, high=high, low=low, close=close, length=length, swma_length=swma_length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -448,7 +456,7 @@ class AnalysisIndicators(BasePandasObject):
def slope(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.slope import slope
result = slope(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -458,7 +466,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.momentum.stoch import stoch
result = stoch(high=high, low=low, close=close, fast_k=fast_k, slow_k=slow_k, slow_d=slow_d, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -466,7 +474,7 @@ class AnalysisIndicators(BasePandasObject):
def trix(self, close=None, length=None, drift=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.trix import trix
result = trix(close=close, length=length, drift=drift, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -474,7 +482,7 @@ class AnalysisIndicators(BasePandasObject):
def tsi(self, close=None, fast=None, slow=None, drift=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.momentum.tsi import tsi
result = tsi(close=close, fast=fast, slow=slow, drift=drift, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -484,7 +492,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.momentum.uo import uo
result = uo(high=high, low=low, close=close, fast=fast, medium=medium, slow=slow, fast_w=fast_w, medium_w=medium_w, slow_w=slow_w, drift=drift, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -494,7 +502,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.momentum.willr import willr
result = willr(high=high, low=low, close=close, length=length, percentage=percentage, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -504,7 +512,7 @@ class AnalysisIndicators(BasePandasObject):
# Overlap Indicators
def dema(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.dema import dema
result = dema(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -512,7 +520,7 @@ class AnalysisIndicators(BasePandasObject):
def ema(self, close=None, length=None, offset=None, adjust=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.ema import ema
result = ema(close=close, length=length, offset=offset, adjust=adjust, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -520,7 +528,7 @@ class AnalysisIndicators(BasePandasObject):
def fwma(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.fwma import fwma
result = fwma(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -529,7 +537,7 @@ class AnalysisIndicators(BasePandasObject):
def hl2(self, high=None, low=None, offset=None, **kwargs):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
from pandas_ta.overlap.hl2 import hl2
result = hl2(high=high, low=low, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -539,7 +547,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.overlap.hlc3 import hlc3
result = hlc3(high=high, low=low, close=close, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -547,7 +555,7 @@ class AnalysisIndicators(BasePandasObject):
def hma(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.hma import hma
result = hma(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -555,7 +563,7 @@ class AnalysisIndicators(BasePandasObject):
def kama(self, close=None, length=None, fast=None, slow=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.kama import kama
result = kama(close=close, length=length, fast=fast, slow=slow, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -565,7 +573,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.overlap.ichimoku import ichimoku
result, span = ichimoku(high=high, low=low, close=close, tenkan=tenkan, kijun=kijun, senkou=senkou, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -573,7 +581,7 @@ class AnalysisIndicators(BasePandasObject):
def linreg(self, close=None, length=None, offset=None, adjust=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.linreg import linreg
result = linreg(close=close, length=length, offset=offset, adjust=adjust, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -581,7 +589,7 @@ class AnalysisIndicators(BasePandasObject):
def midpoint(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.midpoint import midpoint
result = midpoint(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -590,7 +598,7 @@ class AnalysisIndicators(BasePandasObject):
def midprice(self, high=None, low=None, length=None, offset=None, **kwargs):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
from pandas_ta.overlap.midprice import midprice
result = midprice(high=high, low=low, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -601,7 +609,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.overlap.ohlc4 import ohlc4
result = ohlc4(open_=open_, high=high, low=low, close=close, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -609,7 +617,7 @@ class AnalysisIndicators(BasePandasObject):
def pwma(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.pwma import pwma
result = pwma(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -617,7 +625,7 @@ class AnalysisIndicators(BasePandasObject):
def rma(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.rma import rma
result = rma(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -625,7 +633,7 @@ class AnalysisIndicators(BasePandasObject):
def sinwma(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.sinwma import sinwma
result = sinwma(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -633,7 +641,7 @@ class AnalysisIndicators(BasePandasObject):
def sma(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.sma import sma
result = sma(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -641,7 +649,7 @@ class AnalysisIndicators(BasePandasObject):
def swma(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.swma import swma
result = swma(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -649,7 +657,7 @@ class AnalysisIndicators(BasePandasObject):
def t3(self, close=None, length=None, a=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.t3 import t3
result = t3(close=close, length=length, a=a, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -657,7 +665,7 @@ class AnalysisIndicators(BasePandasObject):
def tema(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.tema import tema
result = tema(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -665,7 +673,7 @@ class AnalysisIndicators(BasePandasObject):
def trima(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.trima import trima
result = trima(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -676,7 +684,7 @@ class AnalysisIndicators(BasePandasObject):
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.overlap.vwap import vwap
result = vwap(high=high, low=low, close=close, volume=volume, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -685,7 +693,7 @@ class AnalysisIndicators(BasePandasObject):
def vwma(self, close=None, volume=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.overlap.vwma import vwma
result = vwma(close=close, volume=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -695,14 +703,14 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.overlap.wcp import wcp
result = wcp(high=high, low=low, close=close, offset=offset, **kwargs)
self._append(result, **kwargs)
return result
def wma(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.wma import wma
result = wma(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -710,7 +718,7 @@ class AnalysisIndicators(BasePandasObject):
def zlma(self, close=None, length=None, mamode=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.overlap.zlma import zlma
result = zlma(close=close, length=length, mamode=mamode, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -720,7 +728,7 @@ class AnalysisIndicators(BasePandasObject):
# Performance Indicators
def log_return(self, close=None, length=None, cumulative=False, percent=False, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.performance.log_return import log_return
result = log_return(close=close, length=length, cumulative=cumulative, percent=percent, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -728,7 +736,7 @@ class AnalysisIndicators(BasePandasObject):
def percent_return(self, close=None, length=None, cumulative=False, percent=False, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.performance.percent_return import percent_return
result = percent_return(close=close, length=length, cumulative=cumulative, percent=percent, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -737,7 +745,7 @@ class AnalysisIndicators(BasePandasObject):
def trend_return(self, close=None, trend=None, log=True, cumulative=None, offset=None, trend_reset=None, **kwargs):
close = self._get_column(close, 'close')
trend = self._get_column(trend, f"{trend}")
from pandas_ta.performance.trend_return import trend_return
result = trend_return(close=close, trend=trend, log=log, cumulative=cumulative, offset=offset, trend_reset=trend_reset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -747,7 +755,7 @@ class AnalysisIndicators(BasePandasObject):
# Statistics Indicators
def kurtosis(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.statistics.kurtosis import kurtosis
result = kurtosis(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -755,7 +763,7 @@ class AnalysisIndicators(BasePandasObject):
def mad(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.statistics.mad import mad
result = mad(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -763,7 +771,7 @@ class AnalysisIndicators(BasePandasObject):
def median(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.statistics.median import median
result = median(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -771,7 +779,7 @@ class AnalysisIndicators(BasePandasObject):
def quantile(self, close=None, length=None, q=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.statistics.quantile import quantile
result = quantile(close=close, length=length, q=q, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -779,7 +787,7 @@ class AnalysisIndicators(BasePandasObject):
def skew(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.statistics.skew import skew
result = skew(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -787,7 +795,7 @@ class AnalysisIndicators(BasePandasObject):
def stdev(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.statistics.stdev import stdev
result = stdev(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -795,7 +803,7 @@ class AnalysisIndicators(BasePandasObject):
def variance(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.statistics.variance import variance
result = variance(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -803,7 +811,7 @@ class AnalysisIndicators(BasePandasObject):
def zscore(self, close=None, length=None, std=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.statistics.zscore import zscore
result = zscore(close=close, length=length, std=std, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -816,7 +824,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.trend.adx import adx
result = adx(high=high, low=low, close=close, drift=drift, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -824,7 +832,7 @@ class AnalysisIndicators(BasePandasObject):
def amat(self, close=None, fast=None, slow=None, mamode=None, lookback=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.trend.amat import amat
result = amat(close=close, fast=fast, slow=slow, mamode=mamode, lookback=lookback, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -833,7 +841,7 @@ class AnalysisIndicators(BasePandasObject):
def aroon(self, high=None, low=None, length=None, scalar=None, offset=None, **kwargs):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
from pandas_ta.trend.aroon import aroon
result = aroon(high=high, low=low, length=length, scalar=scalar, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -843,7 +851,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(close, 'high')
low = self._get_column(close, 'low')
close = self._get_column(close, 'close')
from pandas_ta.trend.chop import chop
result = chop(high=high, low=low, close=close, length=length, atr_length=atr_length, scalar=scalar, drift=drift, offset=offset, **kwargs)
self._append(result, **kwargs)
return result
@@ -852,14 +860,14 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.trend.cksp import cksp
result = cksp(high=high, low=low, close=close, p=p, x=x, q=q, offset=offset, **kwargs)
self._append(result, **kwargs)
return result
def decreasing(self, close=None, length=None, asint=True, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.trend.decreasing import decreasing
result = decreasing(close=close, length=length, asint=asint, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -867,7 +875,7 @@ class AnalysisIndicators(BasePandasObject):
def dpo(self, close=None, length=None, centered=True, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.trend.dpo import dpo
result = dpo(close=close, length=length, centered=centered, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -875,7 +883,7 @@ class AnalysisIndicators(BasePandasObject):
def increasing(self, close=None, length=None, asint=True, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.trend.increasing import increasing
result = increasing(close=close, length=length, asint=asint, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -883,7 +891,7 @@ class AnalysisIndicators(BasePandasObject):
def linear_decay(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.trend.linear_decay import linear_decay
result = linear_decay(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -894,7 +902,7 @@ class AnalysisIndicators(BasePandasObject):
else:
fast = self._get_column(fast, f"{fast}")
slow = self._get_column(slow, f"{slow}")
from pandas_ta.trend.long_run import long_run
result = long_run(fast=fast, slow=slow, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -905,7 +913,7 @@ class AnalysisIndicators(BasePandasObject):
low = self._get_column(low, 'low')
if close is not None:
close = self._get_column(close, 'close')
from pandas_ta.trend.psar import psar
result = psar(high=high, low=low, close=close, af=af, max_af=max_af, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -914,7 +922,7 @@ class AnalysisIndicators(BasePandasObject):
def qstick(self, open_=None, close=None, length=None, offset=None, **kwargs):
open_ = self._get_column(open_, 'open')
close = self._get_column(close, 'close')
from pandas_ta.trend.qstick import qstick
result = qstick(open_=open_, close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -925,7 +933,7 @@ class AnalysisIndicators(BasePandasObject):
else:
fast = self._get_column(fast, f"{fast}")
slow = self._get_column(slow, f"{slow}")
from pandas_ta.trend.short_run import short_run
result = short_run(fast=fast, slow=slow, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -935,7 +943,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.trend.vortex import vortex
result = vortex(high=high, low=low, close=close, drift=drift, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -995,7 +1003,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.volatility.aberration import aberration
result = aberration(high=high, low=low, close=close, length=length, atr_length=atr_length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1005,7 +1013,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.volatility.accbands import accbands
result = accbands(high=high, low=low, close=close, length=length, c=c, mamode=mamode, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1015,7 +1023,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.volatility.atr import atr
result = atr(high=high, low=low, close=close, length=length, mamode=mamode, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1023,7 +1031,7 @@ class AnalysisIndicators(BasePandasObject):
def bbands(self, close=None, length=None, stdev=None, mamode=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.volatility.bbands import bbands
result = bbands(close=close, length=length, stdev=stdev, mamode=mamode, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1031,7 +1039,7 @@ class AnalysisIndicators(BasePandasObject):
def donchian(self, close=None, length=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
from pandas_ta.volatility.donchian import donchian
result = donchian(close=close, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1041,7 +1049,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.volatility.kc import kc
result = kc(high=high, low=low, close=close, length=length, scalar=scalar, mamode=mamode, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1050,7 +1058,7 @@ class AnalysisIndicators(BasePandasObject):
def massi(self, high=None, low=None, fast=None, slow=None, offset=None, **kwargs):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
from pandas_ta.volatility.massi import massi
result = massi(high=high, low=low, fast=fast, slow=slow, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1060,7 +1068,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.volatility.natr import natr
result = natr(high=high, low=low, close=close, length=length, mamode=mamode, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1071,7 +1079,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.volatility.pdist import pdist
result = pdist(open_=open_, high=high, low=low, close=close, drift=drift, offset=offset, **kwargs)
self._append(result, **kwargs)
return result
@@ -1080,7 +1088,7 @@ class AnalysisIndicators(BasePandasObject):
high = self._get_column(high, 'high')
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
from pandas_ta.volatility.true_range import true_range
result = true_range(high=high, low=low, close=close, drift=drift, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1096,7 +1104,7 @@ class AnalysisIndicators(BasePandasObject):
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.volume.ad import ad
result = ad(high=high, low=low, close=close, volume=volume, open_=open_, signed=signed, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1109,7 +1117,7 @@ class AnalysisIndicators(BasePandasObject):
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.volume.adosc import adosc
result = adosc(high=high, low=low, close=close, volume=volume, open_=open_, fast=fast, slow=slow, signed=signed, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1118,7 +1126,7 @@ class AnalysisIndicators(BasePandasObject):
def aobv(self, close=None, volume=None, fast=None, slow=None, mamode=None, max_lookback=None, min_lookback=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.volume.aobv import aobv
result = aobv(close=close, volume=volume, fast=fast, slow=slow, mamode=mamode, max_lookback=max_lookback, min_lookback=min_lookback, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1131,7 +1139,7 @@ class AnalysisIndicators(BasePandasObject):
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.volume.cmf import cmf
result = cmf(high=high, low=low, close=close, volume=volume, open_=open_, length=length, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1140,7 +1148,7 @@ class AnalysisIndicators(BasePandasObject):
def efi(self, close=None, volume=None, length=None, mamode=None, offset=None, drift=None, **kwargs):
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.volume.efi import efi
result = efi(close=close, volume=volume, length=length, offset=offset, mamode=mamode, drift=drift, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1151,7 +1159,7 @@ class AnalysisIndicators(BasePandasObject):
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.volume.eom import eom
result = eom(high=high, low=low, close=close, volume=volume, length=length, divisor=divisor, offset=offset, drift=drift, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1162,7 +1170,7 @@ class AnalysisIndicators(BasePandasObject):
low = self._get_column(low, 'low')
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.volume.mfi import mfi
result = mfi(high=high, low=low, close=close, volume=volume, length=length, drift=drift, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1171,7 +1179,7 @@ class AnalysisIndicators(BasePandasObject):
def nvi(self, close=None, volume=None, length=None, initial=None, signed=True, offset=None, **kwargs):
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.volume.nvi import nvi
result = nvi(close=close, volume=volume, length=length, initial=initial, signed=signed, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1180,7 +1188,7 @@ class AnalysisIndicators(BasePandasObject):
def obv(self, close=None, volume=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.volume.obv import obv
result = obv(close=close, volume=volume, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1189,7 +1197,7 @@ class AnalysisIndicators(BasePandasObject):
def pvi(self, close=None, volume=None, length=None, initial=None, signed=True, offset=None, **kwargs):
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.volume.pvi import pvi
result = pvi(close=close, volume=volume, length=length, initial=initial, signed=signed, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1198,7 +1206,7 @@ class AnalysisIndicators(BasePandasObject):
def pvol(self, close=None, volume=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.volume.pvol import pvol
result = pvol(close=close, volume=volume, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1207,7 +1215,7 @@ class AnalysisIndicators(BasePandasObject):
def pvt(self, close=None, volume=None, offset=None, **kwargs):
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.volume.pvt import pvt
result = pvt(close=close, volume=volume, offset=offset, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
@@ -1216,7 +1224,7 @@ class AnalysisIndicators(BasePandasObject):
def vp(self, close=None, volume=None, width=None, percent=None, **kwargs):
close = self._get_column(close, 'close')
volume = self._get_column(volume, 'volume')
from pandas_ta.volume.vp import vp
result = vp(close=close, volume=volume, width=width, percent=percent, **kwargs)
self._add_prefix_suffix(result, **kwargs)
self._append(result, **kwargs)
+26 -1
View File
@@ -1 +1,26 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
from .ao import ao
from .apo import apo
from .bias import bias
from .bop import bop
from .brar import brar
from .cci import cci
from .cg import cg
from .cmo import cmo
from .coppock import coppock
from .fisher import fisher
from .kdj import kdj
from .kst import kst
from .macd import macd
from .mom import mom
from .ppo import ppo
from .psl import psl
from .roc import roc
from .rsi import rsi
from .rvi import rvi
from .slope import slope
from .stoch import stoch
from .trix import trix
from .tsi import tsi
from .uo import uo
from .willr import willr
+26 -1
View File
@@ -1 +1,26 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
from .dema import dema
from .ema import ema
from .fwma import fwma
from .hl2 import hl2
from .hlc3 import hlc3
from .hma import hma
from .kama import kama
from .ichimoku import ichimoku
from .linreg import linreg
from .midpoint import midpoint
from .midprice import midprice
from .ohlc4 import ohlc4
from .pwma import pwma
from .rma import rma
from .sinwma import sinwma
from .sma import sma
from .swma import swma
from .t3 import t3
from .tema import tema
from .trima import trima
from .vwap import vwap
from .vwma import vwma
from .wcp import wcp
from .wma import wma
from .zlma import zlma
+4 -1
View File
@@ -1 +1,4 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
from .log_return import log_return
from .percent_return import percent_return
from .trend_return import trend_return
+9 -1
View File
@@ -1 +1,9 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
from .kurtosis import kurtosis
from .mad import mad
from .median import median
from .quantile import quantile
from .skew import skew
from .stdev import stdev
from .variance import variance
from .zscore import zscore
+15 -1
View File
@@ -1 +1,15 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
from .adx import adx
from .amat import amat
from .aroon import aroon
from .chop import chop
from .cksp import cksp
from .decreasing import decreasing
from .dpo import dpo
from .increasing import increasing
from .linear_decay import linear_decay
from .long_run import long_run
from .psar import psar
from .qstick import qstick
from .short_run import short_run
from .vortex import vortex
+11 -1
View File
@@ -1 +1,11 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
from .aberration import aberration
from .accbands import accbands
from .atr import atr
from .bbands import bbands
from .donchian import donchian
from .kc import kc
from .massi import massi
from .pdist import pdist
from .natr import natr
from .true_range import true_range
+14 -1
View File
@@ -1 +1,14 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
from .ad import ad
from .adosc import adosc
from .aobv import aobv
from .cmf import cmf
from .efi import efi
from .eom import eom
from .mfi import mfi
from .nvi import nvi
from .obv import obv
from .pvi import pvi
from .pvol import pvol
from .pvt import pvt
from .vp import vp
+1 -1
View File
@@ -6,7 +6,7 @@ long_description = "An easy to use Python 3 Pandas Extension with 100+ Technical
setup(
name ="pandas_ta",
packages =['pandas_ta', 'pandas_ta.momentum', 'pandas_ta.overlap', 'pandas_ta.performance', 'pandas_ta.statistics', 'pandas_ta.trend', 'pandas_ta.volatility', 'pandas_ta.volume'],
version ="0.1.55b",
version ="0.1.56b",
description =long_description,
long_description =long_description,
author ="Kevin Johnson",