# Technical Analysis (ta.py)
ta.py is a Python package for dealing with financial technical analysis.
## Installation
#### pip
Use the package manager pip to install ta.py.
```bash
pip install ta_py
```
## Usage
```python
import ta_py as ta;
```
## Examples
#### Moving Averages
- [Simple Moving Average](#sma)
- [Smoothed Moving Average](#smma)
- [Weighted Moving Average](#wma)
- [Exponential Moving Average](#ema)
- [Hull Moving Average](#hull)
- [Least Squares Moving Average](#lsma)
- [Volume Weighted Moving Average](#vwma)
- [Volume Weighted Weighted Moving Average](#vwwma)
- [Wilder's Smoothing Moving Average](#wsma)
- [Parabolic Weighted Moving Average](#pwma)
- [Hyperbolic Weighted Moving Average](#hwma)
- [Kaufman Adaptive Moving Average](#kama)
- [Custom Weighted Moving Average](#cwma)
#### Indicators
- [Moving Average Convergence / Divergence](#macd)
- [Relative Strength Index](#rsi)
- [Wilder's Relative Strength Index](#wrsi)
- [True Strength Index](#tsi)
- [Balance Of Power](#bop)
- [Force Index](#fi)
- [Accumulative Swing Index](#asi)
- [Alligator Indicator](#alli)
- [Williams %R](#pr)
- [Stochastics](#stoch)
- [Fibonacci Retracement](#fib)
- [Bollinger Bandwidth](#bandwidth)
- [Ichimoku Cloud](#ichi)
- [Average True Range](#atr)
- [Aroon Up](#aroon-up)
- [Aroon Down](#aroon-down)
- [Money Flow Index](#mfi)
- [Rate Of Change](#roc)
- [Coppock Curve](#cop)
- [Know Sure Thing](#kst)
- [On-Balance Volume](#obv)
- [Volume-Weighted Average Price](#vwap)
- [Fractals](#fractals)
- [Crossover](#cross)
- [Momentum](#mom)
- [HalfTrend](#half)
- [ZigZag](#zigzag)
- [Parabolic SAR](#psar)
- [SuperTrend](#supertrend)
- [Elder Ray Index](#elderray)
- [Historical Volatility](#hv)
- [Relative Vigor Index](#rvi)
- [Relative Vigor Index Signal](#rvi_signal)
- [RSI Divergence](#rsi_divergence)
- [Divergence](#divergence)
#### Oscillators
- [Alligator Oscillator](#gator)
- [Chande Momentum Oscillator](#mom_osc)
- [Chaikin Oscillator](#chaikin_osc)
- [Aroon Oscillator](#aroon-osc)
- [Awesome Oscillator](#ao)
- [Accelerator Oscillator](#ac)
- [Fisher Transform](#fish)
#### Bands
- [Bollinger Bands](#bands)
- [Keltner Channels](#kelt)
- [Donchian Channels](#don)
- [Fibonacci Bollinger Bands](#fibbands)
- [Envelope](#env)
#### Statistics
- [Standard Deviation](#std)
- [Variance](#variance)
- [Normal CDF](#ncdf)
- [Inverse Normal Distribution](#normsinv)
- [Monte Carlo Simulation](#sim)
- [Percentile](#perc)
- [Correlation](#cor)
- [Covariance](#cov)
- [Percentage Difference](#dif)
- [Expected Return](#er)
- [Abnormal Return](#ar)
- [Kelly Criterion](#kelly)
- [Permutations](#perm)
- [Winratio](#winratio)
- [Average Win](#avgwin)
- [Average Loss](#avgloss)
- [Drawdown](#drawdown)
- [Median](#median)
- [Recent High](#rh)
- [Recent Low](#rl)
- [Median Absolute Deviation](#mad)
- [Average Absolute Deviation](#aad)
- [Standard Error](#stderr)
- [Sum Squared Differences](#ssd)
- [Logarithm](#log)
- [Exponent](#exp)
- [Normalize](#norm)
- [Denormalize](#dnorm)
- [Normalize Pair](#normp)
- [Normalize From](#normf)
- [Standardize](#standard)
- [Z-Score](#zscore)
- [K-means Clustering](#kmeans)
- [Mean Squared Error](#mse)
- [Cumulative](#cum)
#### Chart Types
- [Heikin Ashi](#ha)
- [Renko](#ren)
#### Miscellaneous
- [Times Up](#times_up)
- [Times Down](#times_dn)
#### Experimental
- [Support Line](#sup)
- [Resistance Line](#res)
### Moving Averages
#### <a id="sma"></a>Simple Moving Average (SMA)
```python
data = [1, 2, 3, 4, 5, 6, 10];
length = 6; # default = 14
ta.sma(data, length);
# output (array)
# [3.5, 5]
```
#### <a id="smma"></a>Smoothed Moving Average (SMMA)
```python
data = [1, 2, 3, 4, 5, 6, 10];
length = 5; # default = 14
ta.smma(data, length);
# output (array)
# [3.4, 4.92]
```
#### <a id="wma"></a>Weighted Moving Average (WMA)
```python
data = [69, 68, 66, 70, 68];
length = 4; # default = 14
ta.wma(data, length);
# output (array)
# [68.3, 68.2]
```
#### <a id="ema"></a>Exponential Moving Average (EMA)
```python
data = [1, 2, 3, 4, 5, 6, 10];
length = 6; # default = 12
ta.ema(data, length);
# output (array)
# [3.5, 5.357]
```
#### <a id="hull"></a>Hull Moving Average
```python
data = [6, 7, 5, 6, 7, 4, 5, 7];
length = 6; # default = 14
ta.hull(data, length);
# output (array)
# [4.76, 5.48]
```
#### <a id="lsma"></a>Least Squares Moving Average (LSMA)
```python
data = [5, 6, 6, 3, 4, 6, 7];
length = 6; # default = 25
ta.lsma(data, length);
# output (array)
# [4.714, 5.761]
```
#### <a id="vwma"></a>Volume Weighted Moving Average (VWMA)
```python
data = [[1, 59], [1.1, 82], [1.21, 27], [1.42, 73], [1.32, 42]]; # [price, volume (quantity)]
length = 4; # default = 20
ta.vwma(data, length);
# output (array)
# [1.185, 1.259]
```
#### <a id="vwma"></a>Volume Weighted Weighted Moving Average (VWWMA)
```python
data = [[1,59],[1.1,82],[1.21,27],[1.42,73],[1.32,42]];
length = 4;
ta.vwwma(data, length);
# output (array)
# [1.262, 1.316]
```
#### <a id="wsma"></a>Wilder's Smoothing Moving Average
```python
data = [1, 2, 3, 4, 5, 6, 10];
length = 6; # default = 14
ta.wsma(data, length);
# output (array)
# [3.5, 4.58]
```
#### <a id="pwma"></a>Parabolic Weighted Moving Average
```python
data = [17, 26, 23, 29, 20];
length = 4; # default = 14
ta.pwma(data, length);
# output (array)
# [24.09, 25.18]
```
#### <a id="hwma"></a>Hyperbolic Weighted Moving Average
```python
data = [54, 51, 86, 42, 47];
length = 4; # default = 14
ta.hwma(data, length);
# output (array)
# [56.2, 55.0]
```
#### <a id="kama"></a>Kaufman Adaptive Moving Average (KAMA)
```python
data = [8, 7, 8, 9, 7, 9];
length1 = 2; # default = 10
length2 = 4; # default = 2
length3 = 8; # default = 30
ta.kama(data, length1, length2, length3);
# output (array)
# [8, 8.64, 8.57, 8.57]
```
#### <a id="cwma"></a>Custom Weighted Moving Average
```python
data = [69,68,66,70,68,69];
weights = [1,2,3,5,8];
ta.cwma(data, weights);
# output (array)
# [68.26315789473684, 68.52631578947368]
```
### Indicators
#### <a id="macd"></a>Moving Average Convergence / Divergence (MACD)
```python
data = [1, 2, 3, 4, 5, 6, 14];
length1 = 3; # default = 12
length2 = 6; # default = 26
ta.macd(data, length1, length2);
# output (array)
# [1.5, 3]
```
#### <a id="rsi"></a>Relative Strength Index (RSI)
```python
data = [1, 2, 3, 4, 5, 6, 7, 5];
length = 6; # default = 14
ta.rsi(data, length);
# output (array)
# [100, 100, 66.667]
```
#### <a id="wrsi"></a>Wilder's Relative Strength Index
```python
data = [1, 2, 3, 4, 5, 6, 7, 5, 6];
length = 6; # default = 14
ta.wrsi(data, length);
# output (array)
# [100, 71.43, 75.61]
```
#### <a id="tsi"></a>True Strength Index (TSI)
```python
data = [1.32, 1.27, 1.42, 1.47, 1.42, 1.45, 1.59];
longlength = 3; # default = 25
shortlength = 2; # default = 13
signallength = 2; # default = 13
ta.tsi(data, longlength, shortlength, signallength);
# output (array)
# [[0.327, 0.320], [0.579, 0.706]]
# [strength line, signal line]
```
#### <a id="bop"></a>Balance Of Power
```python
data = [[4, 5, 4, 5], [5, 6, 5, 6], [6, 8, 5, 6]]; # [open, high, low, close]
length = 2; # default = 14
ta.bop(data, length);
# output (array)
# [1, 0.5]
```
#### <a id="fi"></a>Force Index
```python
data = [[1.4, 200], [1.5, 240], [1.1, 300], [1.2, 240], [1.5, 400]]; # [close, volume]
length = 4; # default = 13
ta.fi(data, length);
# output (array)
# [0.0075]
```
#### <a id="asi"></a>Accumulative Swing Index
```python
data = [[7, 6, 4], [9, 7, 5], [9, 8, 6]]; # [high, close, low]
ta.asi(data);
# output (array)
# [0, -12.5]
```
#### <a id="alli"></a>Alligator Indicator
```python
data = [8,7,8,9,7,8,9,6,7,8,6,8,10,8,7,9,8,7,9,6,7,9];
# defaults shown
jawlength = 13;
teethlength = 8;
liplength = 5;
jawshift = 8;
teethshift = 5;
lipshift = 3;
ta.alligator(data, jawlength, teethlength, liplength, jawshift, teethshift, lipshift);
# output (array)
# [jaw, teeth, lips]
```
#### <a id="pr"></a>Williams %R
```python
data = [2, 1, 3, 1, 2];
length = 3; # default = 14
ta.pr(data, length);
# output (array)
# [-0, -100, -50]
```
#### <a id="stoch"></a>Stochastics
```python
data = [[3,2,1], [2,2,1], [4,3,1], [2,2,1]]; # [high, close, low]
length = 2; # default = 14
smoothd = 1; # default = 3
smoothk = 1; # default = 3
ta.stoch(data, length, smoothd, smoothk);
# output (array)
# [[66.667, 66.667], [33.336, 33.336]]
# [kline, dline]
```
#### <a id="fib"></a>Fibonacci Retracement
```python
start = 1;
end = 2;
ta.fib(start, end);
# output (array)
# [1, 1.236, 1.382, 1.5, 1.618, 1.786, 2, 2.618, 3.618, 4.618, 5.236]
```
#### <a id="bandwidth"></a>Bollinger Bandwidth
```python
data = [1, 2, 3, 4, 5, 6];
length = 5; # default = 14
deviations = 2; # default = 1
ta.bandwidth(data, length, deviations);
# output (array)
# [1.886, 1.344]
```
#### <a id="ichi"></a>Ichimoku Cloud
```python
data = [[6, 3, 2], [5, 4, 2], [5, 4, 3], [6, 4, 3], [7, 6, 4], [6, 5, 3]]; # [high, close, low]
length1 = 9; # default = 9
length2 = 26; # default = 26
length3 = 52; # default = 52
displacement = 26; # default = 26
ta.ichimoku(data, length1, length2, length3, displacement);
# output (array)
# [conversion line, base line, leading span A, leading span B, lagging span]
```
#### <a id="atr"></a>Average True Range (ATR)
```python
data = [[3,2,1], [2,2,1], [4,3,1], [2,2,1]]; # [high, close, low]
length = 3; # default = 14
ta.atr(data, length);
# output (array)
# [2, 1.667, 2.111, 1.741]
```
#### <a id="aroon-up"></a>Aroon Up
```python
data = [5, 4, 5, 2];
length = 3; # default = 10
ta.aroon_up(data, length);
# output (array)
# [100.0, 50.0]
```
#### <a id="aroon-down"></a>Aroon Down
```python
data = [2, 5, 4, 5];
length = 3; # default = 10
ta.aroon_down(data, length);
# output (array)
# [0.0, 50.0]
```
#### <a id="mfi"></a>Money Flow Index
```python
data = [[19, 13], [14, 38], [21, 25], [32, 17]]; # [buy volume, sell volume]
length = 3; # default = 14
ta.mfi(data, length);
# output (array)
# [41.54, 45.58]
```
#### <a id="roc"></a>Rate Of Change
```python
data = [1, 2, 3, 4];
length = 3; # default = 14
ta.roc(data, length);
# output (array)
# [2, 1]
```
#### <a id="cop"></a>Coppock Curve
```python
data = [3, 4, 5, 3, 4, 5, 6, 4, 7, 5, 4, 7, 5];
length1 = 4; # (ROC period 1) default = 11
length2 = 6; # (ROC period 2) default = 14
length3 = 5; # (WMA smoothing period) default = 10
ta.cop(data, length1, length2, length3);
# output (array)
# [0.376, 0.237]
```
#### <a id="kst"></a>Know Sure Thing
```python
data = [8, 6, 7, 6, 8, 9, 7, 5, 6, 7, 6, 8, 6, 7, 6, 8, 9, 9, 8, 6, 4, 6, 5, 6, 7, 8, 9];
# roc sma #1
r1 = 5; # default = 10
s1 = 5; # default = 10
# roc sma #2
r2 = 7; # default = 15
s2 = 5; # default = 10
# roc sma #3
r3 = 10; # default = 20
s3 = 5; # default = 10
# roc sma #4
r4 = 15; # default = 30
s4 = 7; # default = 15
# signal line
sig = 4; # default = 9
ta.kst(data, r1, s1, r2, s2, r3, s3, r4, s4, sig);
# output (array)
# [[-0.68, -0.52], [-0.29, -0.58], [0.35, -0.36]]
# [kst line, signal line]
```
#### <a id="obv"></a>On-Balance Volume
```python
data = [[25200, 10], [30000, 10.15], [25600, 10.17], [32000, 10.13]]; # [asset volume, close price]
ta.obv(data);
# output (array)
# [0, 30000, 55600, 23600]
```
#### <a id="vwap"></a>Volume-Weighted Average Price
```python
data = [[127.21, 89329], [127.17, 16137], [127.16, 23945]]; # [average price, volume (quantity)]
length = 2; # default = len(length)
ta.vwap(data, length);
# output (array)
# [127.204, 127.164]
```
#### <a id="fractals"></a>Fractals
```python
data = [[7,6],[8,6],[9,6],[8,5],[7,4],[6,3],[7,4],[8,5]]; # [high, low]
ta.fractals(data);
# output (array, same length as input)
# [[false, false],[false,false],[true,false],[false,false],[false,false],[false,true],[false,false],[false,false]]
# [upper fractal, lower fractal]
```
#### <a id="cross"></a>Crossover (golden cross)
```python
fastdata = [3,4,5,4,3]; # short period gets spliced when longer
slowdata = [4,3,2,3,4];
ta.cross(fastdata, slowdata);
# output (array)
# [{index: 1, cross True}, {index: 4, cross: False}]
# cross is true when fastdata is greater than the slowdata
```
#### <a id="mom"></a>Momentum
```python
data = [1, 1.1, 1.2, 1.24, 1.34];
length = 4; # default = 10
percentage = false; # default = false (true returns percentage)
ta.mom(data, length, percentage);
# output (array)
# [0.24, 0.24]
```
#### <a id="half"></a>HalfTrend
```python
# experimental (untested) function (may change in the future), ported from:
# https://www.tradingview.com/script/U1SJ8ubc-HalfTrend/
# data = [high, close, low]
data = [[100,97,90],[101,98,94],[103,96,92],[106,100,95],[110,101,100],[112,110,105],[110,100,90],[103,100,97],[95,90,85],[94,80,80],[90,82,81],[85,80,70]];
atrlen = 6;
amplitude = 3;
deviation = 2;
ta.halftrend(data, atrlen, amplitude, deviation);
# output (array)
# [
# [ 115.14, 105, 94.86, 'long' ],
# [ 100.77, 90, 79.22, 'long' ],
# [ 116.32, 105, 93.68, 'long' ],
# [ 101.1, 90, 78.89, 'long' ],
# [ 116.25, 105, 93.75, 'long' ],
# [ 99.77, 90, 80.23, 'long' ]
# ]
```
#### <a id="zigzag"></a>ZigZag
```python
# Based on high / low
data = [[10,9], [12,10], [14,12], [15,13], [16,15], [11,10], [18,15]]; # [high, low]
percentage = 0.25; # default = 0.05
ta.zigzag(data, percentage);
# output (array)
# [9, 10.75, 12.5, 14.25, 16, 10, 18]
```
```python
# Based on close
data = [6,7,8,9,10,12,9,8,5,3,3,3,5,7,8,9,11];
percentage = 0.05;
ta.zigzag(data, percentage);
# output (array)
# [6, 7.2, 8.4, 9.6, 10.8, 12.0, 10.5, 9.0, 7.5, 6.0, 4.5, 3.0, 4.6, 6.2, 7.8, 9.4, 11.0]
```
#### <a id="psar"></a>Parabolic SAR
```python
data = [[82.15,81.29],[81.89,80.64],[83.03,81.31],[83.30,82.65],[83.85,83.07],[83.90,83.11],[83.33,82.49],[84.30,82.3],[84.84,84.15],[85,84.11],[75.9,74.03],[76.58,75.39],[76.98,75.76],[78,77.17],[70.87,70.01]];
step = 0.02;
max = 0.2;
ta.psar(data, step, max);
# output (array)
# [81.29,82.15,80.64,80.64,80.7464,80.932616,81.17000672,81.3884061824,81.67956556416,82.0588176964608,85,85,84.7806,84.565588,84.35487624000001]
```
#### <a id="supertrend"></a>SuperTrend
```python
data = [[3,2,1], [2,2,1], [4,3,1], [2,2,1]]; # [high, close, low]
length = 3;
multiplier = 0.5;
ta.supertrend(data, length, multiplier);
# output (array)
# [[5.56,1.44],[3.37,0.63]]
# [up, down]
```
#### <a id="elderray"></a>Elder Ray Index
```python
data = [6,5,4,7,8,9,6,8];
length = 7;
ta.elderray(data, length);
# output (array)
# [[2.57,-2.43],[2.29,-2.71]]
# [bull, bear]
```
#### <a id="hv"></a>Historical Volatility
```python
data = [7,6,5,7,8,9,7,6,5];
length = 8;
ta.hv(data, length);
# output (array)
# [0.642, 0.682]
```
#### <a id="rvi"></a>Relative Vigor Index
```python
# data = [[open,high,low,close]] (requires at least 4 + length values)
data = [[4,6,3,3], [3,5,2,2], [2,5,2,4], [4,6,4,5], [5,7,4,4], [4,6,3,4], [4,7,3,5], [5,7,5,6], [6,8,6,6], [6,9,5,6], [6,8,6,7], [7,9,5,6],[6,7,4,5],[5,6,5,6],[6,8,5,5],[5,7,2,6]];
length = 8;
ta.rvi(data, length);
# output (array)
# [0.29,0.21,0.15,0.16,0.09,0.05]
```
#### <a id="rvi_signal"></a>Relative Vigor Index Signal
```python
rvi = [0.29,0.21,0.15,0.16,0.09,0.05]; # requires at least 4 values
ta.rvi_signal(rvi);
# output (array)
# [0.20,0.15,0.12]
```
#### <a id="rsi_divergence"></a>RSI Divergence
Experimental function: https://github.com/Bitvested/ta.js/issues/18
```python
data = [74,83,66,78,69,70,84,73,74,73,83];
rsi_length = 5;
rsi_function = ta.wrsi; # default (the tradingview rsi indicator)
ta.rsi_divergence(data, rsi_length, rsi_function);
# output (array)
# 1 = RSI is in divergence
# 0 = RSI is not in divergence
# [0, 0, 1, 0, 1, 0] (better to quantify if needed)
```
#### <a id="divergence"></a>Universal Divergence
```javascript
data1 = [48,34,43,54,56,64,43];
data2 = [76,74,43,55,34,32,45,47];
ta.divergence(data1, data2);
# output (array)
# 1 = RSI is in divergence
# 0 = RSI is not in divergence
# [0, 0, 1, 1, 0, 1] (better to quantify if needed)
```
### Oscillators
#### <a id="gator"></a>Alligator Oscillator
```python
data = [8,7,8,9,7,8,9,6,7,8,6,8,10,8,7,9,8,7,9,6,7,9];
# defaults shown
jawlength = 13;
teethlength = 8;
liplength = 5;
jawshift = 8;
teethshift = 5;
lipshift = 3;
ta.gator(data, jawlength, teethlength, liplength, jawshift, teethshift, lipshift);
# output (array)
# [upper gator, lower gator]
```
#### <a id="mom_osc"></a>Chande Momentum Oscillator
```python
data = [1, 1.2, 1.3, 1.3, 1.2, 1.4];
length = 4; # default = 9
ta.mom_osc(data, length);
# output (array)
# [0.0, 3.85]
```
#### <a id="chaikin_osc"></a>Chaikin Oscillator
```python
data = [[2,3,4,6],[5,5,5,4],[5,4,3,7],[4,3,3,4],[6,5,4,6],[7,4,3,6]]; # [high, close, low, volume]
length1 = 2; # default = 3
length2 = 4; # default = 10
ta.chaikin_osc(data, length1, length2);
# output (array)
# [-1.667, -0.289, -0.736]
```
#### <a id="aroon-osc"></a>Aroon Oscillator
```python
data = [2, 5, 4, 5];
length = 3; # default = 25
ta.aroon_osc(data, length);
# output (array)
# [50.0, 50.0]
```
#### <a id="ao"></a>Awesome Oscillator
```python
data = [[6, 5], [8, 6], [7, 4], [6, 5], [7, 6], [9, 8]]; # [high, low]
shortlength = 2; # default = 5
longlength = 5; # default = 35
ta.ao(data, shortlength, longlength);
# output (array)
# [0, 0.9]
```
#### <a id="ac"></a>Accelerator Oscillator
```python
data = [[6, 5], [8, 6], [7, 4], [6, 5], [7, 6], [9, 8]]; # [high, low]
shortlength = 2; # default = 5
longlength = 4; # default = 35
ta.ac(data, shortlength, longlength);
# output (array)
# [-5.875, -6.125, -6.5]
```
#### <a id="fish"></a>Fisher Transform
```python
data = [8,6,8,9,7,8,9,8,7,8,6,7]; # high + low / 2
length = 9;
ta.fisher(data, length);
# output (array)
# [[-0.318, -0.11], [-0.449, -0.318], [-0.616, -0.449]] # [fisher, trigger]
```
### Bands
#### <a id="bands"></a>Bollinger Bands
```python
data = [1, 2, 3, 4, 5, 6];
length = 5; # default = 14
deviations = 2; # default = 1
ta.bands(data, length, deviations);
# output (array)
# [[5.828, 3, 0.172], [6.828, 4, 1.172]]
# [upper band, middle band, lower band]
```
#### <a id="kelt"></a>Keltner Channels
```python
data = [[3,2,1], [2,2,1], [4,3,1], [2,2,1], [3,3,1]]; # [high, close, low]
length = 5; # default = 14
deviations = 1; # default = 1
ta.keltner(data, length, deviations);
# output (array)
# [[3.93, 2.06, 0.20]]
# [upper band, middle band, lower band]
```
#### <a id="don"></a>Donchian Channels
```python
data = [[6, 2], [5, 2], [5, 3], [6, 3], [7, 4], [6, 3]]; # [high, low]
length = 5; # default = 20
ta.don(data, length);
# output (array)
# [[7, 4.5, 2], [7, 4.5, 2]]
# [upper band, base line, lower band]
```
#### <a id="fibbands"></a>Fibonacci Bollinger Bands
```python
data = [[1,59],[1.1,82],[1.21,27],[1.42,73],[1.32,42]];
length = 4;
deviations = 3;
ta.fibbands(data, length, deviations);
# output (array)
# [[highest band -> fibonacci levels -> lowest band]]
```
#### <a id="env"></a>Envelope
```python
data = [6,7,8,7,6,7,8,7,8,7,8,7,8];
length = 11, # default = 10
percentage = 0.05; # default = 0.005
ta.envelope(data, length, percentage);
# output (array)
# [[7.541, 7.182, 6.823], [7.636, 7.273, 6.909]]
# [upper band, base line, lower band]
```
### Statistics
#### <a id="std"></a>Standard Deviation
```python
data = [1, 2, 3];
length = 3; # default = len(length)
ta.std(data, length);
# output (float)
# 0.81649658092773
```
#### <a id="variance"></a>Variance
```python
data = [6, 7, 2, 3, 5, 8, 6, 2];
length = 7; # default = len(data)
ta.variance(data, length);
# output (array)
# [3.918, 5.061]
```
#### <a id="ncdf"></a>Normal CDF
```python
sample = 13;
mean = 10;
stdv = 2;
ta.ncdf(sample, mean, stdv);
# output (float)
# 0.9331737996110652
```
```python
zscore = 1.5;
ta.ncdf(zscore);
# output (float)
# 0.9331737996110652
```
#### <a id="normsinv"></a>Inverse Normal Distribution
```python
data = 0.4732;
ta.normsinv(data);
# output (float)
# -0.06722824471054376
```
#### <a id="sim"></a>Monte Carlo Simulation
```python
data = [6, 4, 7, 8, 5, 6];
length = 2; # default = 50
simulations = 100; # default = 1000
percentile = 0.5; # default = -1 (returns all raw simulations)
ta.sim(data, length, simulations, percentile)
# output (array)
# [6, 4, 7, 8, 5, 6, 5.96, 5.7]
```
#### <a id="perc"></a>Percentile
```python
data = [[6,4,7], [5,3,6], [7,5,8]];
percentile = 0.5;
ta.percentile(data, percentile);
# output (array)
# [6, 4, 7]
```
#### <a id="cor"></a>Correlation
```python
data1 = [1, 2, 3, 4, 5, 2];
data2 = [1, 3, 2, 4, 6, 3];
ta.cor(data1, data2);
# output (float)
# 0.8808929232684737
```
#### <a id="cov"></a>Covariance
```python
data1 = [12,13,25,39];
data2 = [67,45,32,21];
length = 4;
ta.covariance(data1, data2, 4);
# output (array)
# [-165.8125]
```
#### <a id="dif"></a>Percentage Difference
```python
newval = 0.75;
oldval = 0.5;
ta.dif(newval, oldval);
# output (float)
# 0.5
```
#### <a id="er"></a>Expected Return
```python
data = [0.02, -0.01, 0.03, 0.05, -0.03]; # historical return data
ta.er(data);
# output (float)
# 0.0119
```
#### <a id="ar"></a>Abnormal Return
```python
data = [0.02, -0.01, 0.03, 0.05, -0.03]; # historical return data
length = 3;
ta.ar(data, length);
# output (array)
# [0.037, -0.053]
```
#### <a id="kelly"></a>Kelly Criterion
```python
data = [0.01, 0.02, -0.01, -0.03, -0.015, 0.045, 0.005];
ta.kelly(data);
# output (float)
# 0.1443
```
#### <a id="permutations"></a>Permutations
```python
data = [10,10,10];
ta.permutations(data);
# output (int)
# 1000
```
#### <a id="winratio"></a>Winratio
```python
var data = [0.01, 0.02, -0.01, -0.03, -0.015, 0.005];
ta.winratio(data);
# output (float)
# 0.5
```
#### <a id="avgwin"></a> Average Win
```python
data = [0.01, 0.02, -0.01, -0.03, -0.015, 0.005];
ta.avgwin(data);
# output (float)
# 0.012
```
#### <a id="avgloss"></a> Average Loss
```python
data = [0.01, 0.02, -0.01, -0.03, -0.015, 0.005];
ta.avgloss(data);
# output (float)
# -0.018
```
#### <a id="drawdown"></a>Drawdown
```python
data = [1, 2, 3, 4, 2, 3];
ta.drawdown([1,2,3,4,2,3]);
# output (float)
# -0.5
```
#### <a id="median"></a>Median
```python
data = [4, 6, 3, 1, 2, 5];
length = 4; # default = len(data)
ta.median(data, length);
# output (array)
# [3, 2, 2]
```
#### <a id="rh"></a>Recent High
```python
data = [4,5,6,7,8,9,8,7,8,9,10,3,2,1];
lookback = 3; # No higher values after 3 periods? resets after each new high
ta.recent_high(data, lookback);
# output (dictionary)
# {'index': 10, 'value': 10}
```
#### <a id="rl"></a>Recent Low
```python
data = [1,4,5,6,4,3,2,3,4,3,5,7,8,8,5];
lookback = 4; # No lower values after 4 periods? resets after each new low
ta.recent_low(data, lookback);
# output (dictionary)
# {'index': 6, 'value': 2}
```
#### <a id="mad"></a>Median Absolute Deviation
```python
data = [3, 7, 5, 4, 3, 8, 9];
length = 6; # default = len(data)
ta.mad(data, length);
# output (array)
# [1, 2]
```
#### <a id="aad"></a>Average Absolute Deviation
```python
data = [4, 6, 8, 6, 8, 9, 10, 11];
length = 7; # default = len(data)
ta.aad(data, length);
# output (array)
# [1.673, 1.469]
```
#### <a id="stderr"></a>Standard Error
```python
data = [34, 54, 45, 43, 57, 38, 49];
size = 10; # default = len(data)
ta.se(data, size);
# output (float)
# 2.424
```
#### <a id="ssd"></a>Sum Squared Differences
```python
data = [7, 6, 5, 7, 9, 8, 3, 5, 4];
length = 7; # default = len(length)
ta.ssd(data, length);
# output (array)
# [4.87, 4.986, 5.372]
```
#### <a id="log"></a>Logarithm
```python
data = [5, 14, 18, 28, 68, 103];
ta.log(data);
# output (array)
# [1.61, 2.64, 2.89, 3.33, 4.22, 4.63]
```
#### <a id="exp"></a>Exponent
```python
data = [1.6, 2.63, 2.89, 3.33, 4.22, 4.63];
ta.exp(data);
# output (array)
# [4.95, 13.87, 17.99, 27.94, 68.03, 102.51]
```
#### <a id="norm"></a>Normalize
```python
data = [5,4,9,4];
margin = 0.1; # margin % (default = 0)
ta.normalize(data, margin);
# output (array)
# [0.22, 0.06, 0.86, 0.06]
```
#### <a id="dnorm"></a>Denormalize
```python
data = [5,4,9,4]; # original data || [highest, lowest]
norm = [0.22, 0.06, 0.86, 0.06, 0.44]; # normalized data
margin = 0.1; # margin % (default = 0)
ta.denormalize(data, norm, margin);
# output (array)
# [5 ,4, 9, 4, 6.4]
```
#### <a id="normp"></a>Normalize Pair
```python
pair1 = [10,12,11,13];
pair2 = [100,130,100,140];
ta.normalize_pair(pair1, pair2);
# output (array)
# [[55, 55], [66, 71.5], [60.5, 54.99], [71.5, 76.99]]
```
#### <a id="normf"></a>Normalize From
```python
data = [8, 12, 10, 11];
baseline = 100;
ta.normalize_from(data, baseline);
# output (array)
# [100, 150, 125, 137.5]
```
#### <a id="standard"></a>Standardize
```python
data = [6,4,6,8,6];
ta.standardize(data);
# output (array)
# [0, -1.581, 0, 1.581, 0]
```
#### <a id="zscore"></a>Z-Score
```python
data = [34,54,45,43,57,38,49];
length = 5;
ta.zscore(data, length);
# output (array)
# [1.266, -1.331, 0.408]
```
#### <a id="kmeans"></a>K-means Clustering
```python
data = [2, 3, 4, 5, 3, 5, 7, 8, 6, 8, 6, 4, 2, 6];
length = 4;
ta.kmeans(data, length);
# output (array)
# [[ 4, 5, 5, 4 ], [ 7, 6, 6, 6 ], [ 8, 8 ], [ 2, 3, 3, 2 ]]
```
#### <a id="mse"></a>Mean Squared Error
```python
data1 = [7,8,7,8,6,9];
data2 = [6,8,8,9,6,8];
ta.mse(data1, data2);
# output (float)
# 0.6666666666666666
```
#### <a id="cum"></a>Cumulative
```python
data = [3,5,7,5,10];
length = 4;
ta.cum(data, length);
# output (array)
# [20, 27]
```
### Chart types
#### <a id="ha"></a>Heikin Ashi
```python
data = [[3, 4, 2, 3], [3, 6, 3, 5], [5, 5, 2, 3]]; # [open, high, low, close]
ta.ha(data);
# output (array)
# [open, high, low, close]
# first 7-10 candles are unreliable
```
#### <a id="ren"></a>Renko
```python
data = [[8, 6], [9, 7], [9, 8]]; # [high, low]
bricksize = 3;
ta.ren(data, bricksize);
# output (array)
# [open, high, low, close]
```
### Miscellaneous
#### <a id="times_up"></a>Times Up
```python
data = [5,6,7,8,7,6,5];
length = 3;
ta.times_up(data, length);
# output (array)
# [1, 0, 0, 0]
```
#### <a id="times_dn"></a>Times Down
```python
data = [5,6,7,8,7,6,5];
length = 3;
ta.times_down(data, length);
# output (array)
# [0, 0, 0, 1]
```
### Experimental Functions
#### <a id="sup"></a>Support Line
```python
data = [4,3,2,5,7,6,5,4,7,8,5,4,6,7,5];
start = {"index": 2, "value": 2}; # default = recent_low(data, 25)
support = ta.support(data, start);
# output (dictionary)
# ['calculate'] = function(x) // calculates line at position x from start['index'] (= 0)
# ['slope'] = delta y per x
# ['lowest'] = lowest (start) value at x = 0
# ['index'] = (start) index of lowest value
# to get the line at the current candle / chart period
current = support['calculate'](len(data)-support['index']);
```
#### <a id="res"></a>Resistance Line
```python
data = [5,7,5,5,4,6,5,4,6,5,4,3,2,4,3,2,1];
start = {"index": 1, "value": 7}; # default = recent_high(data, 25)
resistance = ta.resistance(data, start);
# output (dictionary)
# ['calculate'] = function(x) // calculates line at position x from start['index'] (= 0)
# ['slope'] = delta y per x
# ['highest'] = highest (start) value
# ['index'] = (start) index of highest value
# to get the line at the current candle / chart period
current = resistance['calculate'](len(data)-resistance['index']);
```
## Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
## License
[MIT](https:#choosealicense.com/licenses/mit/)
Raw data
{
"_id": null,
"home_page": "https://github.com/Bitvested/ta.py",
"name": "ta-py",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "financial,technical,analysis,ta,simple,weighted,exponential,sma,wma,ema,aroon,rsi,stochastics,macd,atr,vwap,lsma,least,squares,average,kama,variance,correlation,aad,mad,ssd,kmeans,monte,carlo",
"author": "Nino Kroesen",
"author_email": "ninokroesen@gmail.com",
"download_url": "",
"platform": null,
"description": "# Technical Analysis (ta.py)\n\nta.py is a Python package for dealing with financial technical analysis.\n\n## Installation\n\n#### pip\nUse the package manager pip to install ta.py.\n\n```bash\npip install ta_py\n```\n## Usage\n```python\nimport ta_py as ta;\n```\n## Examples\n#### Moving Averages\n- [Simple Moving Average](#sma)\n- [Smoothed Moving Average](#smma)\n- [Weighted Moving Average](#wma)\n- [Exponential Moving Average](#ema)\n- [Hull Moving Average](#hull)\n- [Least Squares Moving Average](#lsma)\n- [Volume Weighted Moving Average](#vwma)\n- [Volume Weighted Weighted Moving Average](#vwwma)\n- [Wilder's Smoothing Moving Average](#wsma)\n- [Parabolic Weighted Moving Average](#pwma)\n- [Hyperbolic Weighted Moving Average](#hwma)\n- [Kaufman Adaptive Moving Average](#kama)\n- [Custom Weighted Moving Average](#cwma)\n#### Indicators\n- [Moving Average Convergence / Divergence](#macd)\n- [Relative Strength Index](#rsi)\n- [Wilder's Relative Strength Index](#wrsi)\n- [True Strength Index](#tsi)\n- [Balance Of Power](#bop)\n- [Force Index](#fi)\n- [Accumulative Swing Index](#asi)\n- [Alligator Indicator](#alli)\n- [Williams %R](#pr)\n- [Stochastics](#stoch)\n- [Fibonacci Retracement](#fib)\n- [Bollinger Bandwidth](#bandwidth)\n- [Ichimoku Cloud](#ichi)\n- [Average True Range](#atr)\n- [Aroon Up](#aroon-up)\n- [Aroon Down](#aroon-down)\n- [Money Flow Index](#mfi)\n- [Rate Of Change](#roc)\n- [Coppock Curve](#cop)\n- [Know Sure Thing](#kst)\n- [On-Balance Volume](#obv)\n- [Volume-Weighted Average Price](#vwap)\n- [Fractals](#fractals)\n- [Crossover](#cross)\n- [Momentum](#mom)\n- [HalfTrend](#half)\n- [ZigZag](#zigzag)\n- [Parabolic SAR](#psar)\n- [SuperTrend](#supertrend)\n- [Elder Ray Index](#elderray)\n- [Historical Volatility](#hv)\n- [Relative Vigor Index](#rvi)\n- [Relative Vigor Index Signal](#rvi_signal)\n- [RSI Divergence](#rsi_divergence)\n- [Divergence](#divergence)\n#### Oscillators\n- [Alligator Oscillator](#gator)\n- [Chande Momentum Oscillator](#mom_osc)\n- [Chaikin Oscillator](#chaikin_osc)\n- [Aroon Oscillator](#aroon-osc)\n- [Awesome Oscillator](#ao)\n- [Accelerator Oscillator](#ac)\n- [Fisher Transform](#fish)\n#### Bands\n- [Bollinger Bands](#bands)\n- [Keltner Channels](#kelt)\n- [Donchian Channels](#don)\n- [Fibonacci Bollinger Bands](#fibbands)\n- [Envelope](#env)\n#### Statistics\n- [Standard Deviation](#std)\n- [Variance](#variance)\n- [Normal CDF](#ncdf)\n- [Inverse Normal Distribution](#normsinv)\n- [Monte Carlo Simulation](#sim)\n- [Percentile](#perc)\n- [Correlation](#cor)\n- [Covariance](#cov)\n- [Percentage Difference](#dif)\n- [Expected Return](#er)\n- [Abnormal Return](#ar)\n- [Kelly Criterion](#kelly)\n- [Permutations](#perm)\n- [Winratio](#winratio)\n- [Average Win](#avgwin)\n- [Average Loss](#avgloss)\n- [Drawdown](#drawdown)\n- [Median](#median)\n- [Recent High](#rh)\n- [Recent Low](#rl)\n- [Median Absolute Deviation](#mad)\n- [Average Absolute Deviation](#aad)\n- [Standard Error](#stderr)\n- [Sum Squared Differences](#ssd)\n- [Logarithm](#log)\n- [Exponent](#exp)\n- [Normalize](#norm)\n- [Denormalize](#dnorm)\n- [Normalize Pair](#normp)\n- [Normalize From](#normf)\n- [Standardize](#standard)\n- [Z-Score](#zscore)\n- [K-means Clustering](#kmeans)\n- [Mean Squared Error](#mse)\n- [Cumulative](#cum)\n#### Chart Types\n- [Heikin Ashi](#ha)\n- [Renko](#ren)\n#### Miscellaneous\n- [Times Up](#times_up)\n- [Times Down](#times_dn)\n#### Experimental\n- [Support Line](#sup)\n- [Resistance Line](#res)\n### Moving Averages\n#### <a id=\"sma\"></a>Simple Moving Average (SMA)\n```python\ndata = [1, 2, 3, 4, 5, 6, 10];\nlength = 6; # default = 14\nta.sma(data, length);\n# output (array)\n# [3.5, 5]\n```\n#### <a id=\"smma\"></a>Smoothed Moving Average (SMMA)\n```python\ndata = [1, 2, 3, 4, 5, 6, 10];\nlength = 5; # default = 14\nta.smma(data, length);\n# output (array)\n# [3.4, 4.92]\n```\n#### <a id=\"wma\"></a>Weighted Moving Average (WMA)\n```python\ndata = [69, 68, 66, 70, 68];\nlength = 4; # default = 14\nta.wma(data, length);\n# output (array)\n# [68.3, 68.2]\n```\n#### <a id=\"ema\"></a>Exponential Moving Average (EMA)\n```python\ndata = [1, 2, 3, 4, 5, 6, 10];\nlength = 6; # default = 12\nta.ema(data, length);\n# output (array)\n# [3.5, 5.357]\n```\n#### <a id=\"hull\"></a>Hull Moving Average\n```python\ndata = [6, 7, 5, 6, 7, 4, 5, 7];\nlength = 6; # default = 14\nta.hull(data, length);\n# output (array)\n# [4.76, 5.48]\n```\n#### <a id=\"lsma\"></a>Least Squares Moving Average (LSMA)\n```python\ndata = [5, 6, 6, 3, 4, 6, 7];\nlength = 6; # default = 25\nta.lsma(data, length);\n# output (array)\n# [4.714, 5.761]\n```\n#### <a id=\"vwma\"></a>Volume Weighted Moving Average (VWMA)\n```python\ndata = [[1, 59], [1.1, 82], [1.21, 27], [1.42, 73], [1.32, 42]]; # [price, volume (quantity)]\nlength = 4; # default = 20\nta.vwma(data, length);\n# output (array)\n# [1.185, 1.259]\n```\n#### <a id=\"vwma\"></a>Volume Weighted Weighted Moving Average (VWWMA)\n```python\ndata = [[1,59],[1.1,82],[1.21,27],[1.42,73],[1.32,42]];\nlength = 4;\nta.vwwma(data, length);\n# output (array)\n# [1.262, 1.316]\n```\n#### <a id=\"wsma\"></a>Wilder's Smoothing Moving Average\n```python\ndata = [1, 2, 3, 4, 5, 6, 10];\nlength = 6; # default = 14\nta.wsma(data, length);\n# output (array)\n# [3.5, 4.58]\n```\n#### <a id=\"pwma\"></a>Parabolic Weighted Moving Average\n```python\n data = [17, 26, 23, 29, 20];\n length = 4; # default = 14\nta.pwma(data, length);\n# output (array)\n# [24.09, 25.18]\n```\n#### <a id=\"hwma\"></a>Hyperbolic Weighted Moving Average\n```python\ndata = [54, 51, 86, 42, 47];\nlength = 4; # default = 14\nta.hwma(data, length);\n# output (array)\n# [56.2, 55.0]\n```\n#### <a id=\"kama\"></a>Kaufman Adaptive Moving Average (KAMA)\n```python\ndata = [8, 7, 8, 9, 7, 9];\nlength1 = 2; # default = 10\nlength2 = 4; # default = 2\nlength3 = 8; # default = 30\nta.kama(data, length1, length2, length3);\n# output (array)\n# [8, 8.64, 8.57, 8.57]\n```\n#### <a id=\"cwma\"></a>Custom Weighted Moving Average\n```python\ndata = [69,68,66,70,68,69];\nweights = [1,2,3,5,8];\nta.cwma(data, weights);\n# output (array)\n# [68.26315789473684, 68.52631578947368]\n```\n### Indicators\n#### <a id=\"macd\"></a>Moving Average Convergence / Divergence (MACD)\n```python\ndata = [1, 2, 3, 4, 5, 6, 14];\nlength1 = 3; # default = 12\nlength2 = 6; # default = 26\nta.macd(data, length1, length2);\n# output (array)\n# [1.5, 3]\n```\n#### <a id=\"rsi\"></a>Relative Strength Index (RSI)\n```python\ndata = [1, 2, 3, 4, 5, 6, 7, 5];\nlength = 6; # default = 14\nta.rsi(data, length);\n# output (array)\n# [100, 100, 66.667]\n```\n#### <a id=\"wrsi\"></a>Wilder's Relative Strength Index\n```python\ndata = [1, 2, 3, 4, 5, 6, 7, 5, 6];\nlength = 6; # default = 14\nta.wrsi(data, length);\n# output (array)\n# [100, 71.43, 75.61]\n```\n#### <a id=\"tsi\"></a>True Strength Index (TSI)\n```python\ndata = [1.32, 1.27, 1.42, 1.47, 1.42, 1.45, 1.59];\nlonglength = 3; # default = 25\nshortlength = 2; # default = 13\nsignallength = 2; # default = 13\nta.tsi(data, longlength, shortlength, signallength);\n# output (array)\n# [[0.327, 0.320], [0.579, 0.706]]\n# [strength line, signal line]\n```\n#### <a id=\"bop\"></a>Balance Of Power\n```python\ndata = [[4, 5, 4, 5], [5, 6, 5, 6], [6, 8, 5, 6]]; # [open, high, low, close]\nlength = 2; # default = 14\nta.bop(data, length);\n# output (array)\n# [1, 0.5]\n```\n#### <a id=\"fi\"></a>Force Index\n```python\ndata = [[1.4, 200], [1.5, 240], [1.1, 300], [1.2, 240], [1.5, 400]]; # [close, volume]\nlength = 4; # default = 13\nta.fi(data, length);\n# output (array)\n# [0.0075]\n```\n#### <a id=\"asi\"></a>Accumulative Swing Index\n```python\ndata = [[7, 6, 4], [9, 7, 5], [9, 8, 6]]; # [high, close, low]\nta.asi(data);\n# output (array)\n# [0, -12.5]\n```\n#### <a id=\"alli\"></a>Alligator Indicator\n```python\ndata = [8,7,8,9,7,8,9,6,7,8,6,8,10,8,7,9,8,7,9,6,7,9];\n# defaults shown\njawlength = 13;\nteethlength = 8;\nliplength = 5;\njawshift = 8;\nteethshift = 5;\nlipshift = 3;\nta.alligator(data, jawlength, teethlength, liplength, jawshift, teethshift, lipshift);\n# output (array)\n# [jaw, teeth, lips]\n```\n#### <a id=\"pr\"></a>Williams %R\n```python\ndata = [2, 1, 3, 1, 2];\nlength = 3; # default = 14\nta.pr(data, length);\n# output (array)\n# [-0, -100, -50]\n```\n#### <a id=\"stoch\"></a>Stochastics\n```python\ndata = [[3,2,1], [2,2,1], [4,3,1], [2,2,1]]; # [high, close, low]\nlength = 2; # default = 14\nsmoothd = 1; # default = 3\nsmoothk = 1; # default = 3\nta.stoch(data, length, smoothd, smoothk);\n# output (array)\n# [[66.667, 66.667], [33.336, 33.336]]\n# [kline, dline]\n```\n#### <a id=\"fib\"></a>Fibonacci Retracement\n```python\nstart = 1;\nend = 2;\nta.fib(start, end);\n# output (array)\n# [1, 1.236, 1.382, 1.5, 1.618, 1.786, 2, 2.618, 3.618, 4.618, 5.236]\n```\n#### <a id=\"bandwidth\"></a>Bollinger Bandwidth\n```python\ndata = [1, 2, 3, 4, 5, 6];\nlength = 5; # default = 14\ndeviations = 2; # default = 1\nta.bandwidth(data, length, deviations);\n# output (array)\n# [1.886, 1.344]\n```\n#### <a id=\"ichi\"></a>Ichimoku Cloud\n```python\ndata = [[6, 3, 2], [5, 4, 2], [5, 4, 3], [6, 4, 3], [7, 6, 4], [6, 5, 3]]; # [high, close, low]\nlength1 = 9; # default = 9\nlength2 = 26; # default = 26\nlength3 = 52; # default = 52\ndisplacement = 26; # default = 26\nta.ichimoku(data, length1, length2, length3, displacement);\n# output (array)\n# [conversion line, base line, leading span A, leading span B, lagging span]\n```\n#### <a id=\"atr\"></a>Average True Range (ATR)\n```python\ndata = [[3,2,1], [2,2,1], [4,3,1], [2,2,1]]; # [high, close, low]\nlength = 3; # default = 14\nta.atr(data, length);\n# output (array)\n# [2, 1.667, 2.111, 1.741]\n```\n#### <a id=\"aroon-up\"></a>Aroon Up\n```python\ndata = [5, 4, 5, 2];\nlength = 3; # default = 10\nta.aroon_up(data, length);\n# output (array)\n# [100.0, 50.0]\n```\n#### <a id=\"aroon-down\"></a>Aroon Down\n```python\ndata = [2, 5, 4, 5];\nlength = 3; # default = 10\nta.aroon_down(data, length);\n# output (array)\n# [0.0, 50.0]\n```\n#### <a id=\"mfi\"></a>Money Flow Index\n```python\ndata = [[19, 13], [14, 38], [21, 25], [32, 17]]; # [buy volume, sell volume]\nlength = 3; # default = 14\nta.mfi(data, length);\n# output (array)\n# [41.54, 45.58]\n```\n#### <a id=\"roc\"></a>Rate Of Change\n```python\ndata = [1, 2, 3, 4];\nlength = 3; # default = 14\nta.roc(data, length);\n# output (array)\n# [2, 1]\n```\n#### <a id=\"cop\"></a>Coppock Curve\n```python\ndata = [3, 4, 5, 3, 4, 5, 6, 4, 7, 5, 4, 7, 5];\nlength1 = 4; # (ROC period 1) default = 11\nlength2 = 6; # (ROC period 2) default = 14\nlength3 = 5; # (WMA smoothing period) default = 10\nta.cop(data, length1, length2, length3);\n# output (array)\n# [0.376, 0.237]\n```\n#### <a id=\"kst\"></a>Know Sure Thing\n```python\ndata = [8, 6, 7, 6, 8, 9, 7, 5, 6, 7, 6, 8, 6, 7, 6, 8, 9, 9, 8, 6, 4, 6, 5, 6, 7, 8, 9];\n# roc sma #1\nr1 = 5; # default = 10\ns1 = 5; # default = 10\n# roc sma #2\nr2 = 7; # default = 15\ns2 = 5; # default = 10\n# roc sma #3\nr3 = 10; # default = 20\ns3 = 5; # default = 10\n# roc sma #4\nr4 = 15; # default = 30\ns4 = 7; # default = 15\n# signal line\nsig = 4; # default = 9\nta.kst(data, r1, s1, r2, s2, r3, s3, r4, s4, sig);\n# output (array)\n# [[-0.68, -0.52], [-0.29, -0.58], [0.35, -0.36]]\n# [kst line, signal line]\n```\n#### <a id=\"obv\"></a>On-Balance Volume\n```python\ndata = [[25200, 10], [30000, 10.15], [25600, 10.17], [32000, 10.13]]; # [asset volume, close price]\nta.obv(data);\n# output (array)\n# [0, 30000, 55600, 23600]\n```\n#### <a id=\"vwap\"></a>Volume-Weighted Average Price\n```python\ndata = [[127.21, 89329], [127.17, 16137], [127.16, 23945]]; # [average price, volume (quantity)]\nlength = 2; # default = len(length)\nta.vwap(data, length);\n# output (array)\n# [127.204, 127.164]\n```\n#### <a id=\"fractals\"></a>Fractals\n```python\ndata = [[7,6],[8,6],[9,6],[8,5],[7,4],[6,3],[7,4],[8,5]]; # [high, low]\nta.fractals(data);\n# output (array, same length as input)\n# [[false, false],[false,false],[true,false],[false,false],[false,false],[false,true],[false,false],[false,false]]\n# [upper fractal, lower fractal]\n```\n#### <a id=\"cross\"></a>Crossover (golden cross)\n```python\nfastdata = [3,4,5,4,3]; # short period gets spliced when longer\nslowdata = [4,3,2,3,4];\nta.cross(fastdata, slowdata);\n# output (array)\n# [{index: 1, cross True}, {index: 4, cross: False}]\n# cross is true when fastdata is greater than the slowdata\n```\n#### <a id=\"mom\"></a>Momentum\n```python\ndata = [1, 1.1, 1.2, 1.24, 1.34];\nlength = 4; # default = 10\npercentage = false; # default = false (true returns percentage)\nta.mom(data, length, percentage);\n# output (array)\n# [0.24, 0.24]\n```\n#### <a id=\"half\"></a>HalfTrend\n```python\n# experimental (untested) function (may change in the future), ported from:\n# https://www.tradingview.com/script/U1SJ8ubc-HalfTrend/\n# data = [high, close, low]\ndata = [[100,97,90],[101,98,94],[103,96,92],[106,100,95],[110,101,100],[112,110,105],[110,100,90],[103,100,97],[95,90,85],[94,80,80],[90,82,81],[85,80,70]];\natrlen = 6;\namplitude = 3;\ndeviation = 2;\nta.halftrend(data, atrlen, amplitude, deviation);\n# output (array)\n# [\n# [ 115.14, 105, 94.86, 'long' ],\n# [ 100.77, 90, 79.22, 'long' ],\n# [ 116.32, 105, 93.68, 'long' ],\n# [ 101.1, 90, 78.89, 'long' ],\n# [ 116.25, 105, 93.75, 'long' ],\n# [ 99.77, 90, 80.23, 'long' ]\n# ]\n```\n#### <a id=\"zigzag\"></a>ZigZag\n```python\n# Based on high / low\ndata = [[10,9], [12,10], [14,12], [15,13], [16,15], [11,10], [18,15]]; # [high, low]\npercentage = 0.25; # default = 0.05\nta.zigzag(data, percentage);\n# output (array)\n# [9, 10.75, 12.5, 14.25, 16, 10, 18]\n```\n```python\n# Based on close\ndata = [6,7,8,9,10,12,9,8,5,3,3,3,5,7,8,9,11];\npercentage = 0.05;\nta.zigzag(data, percentage);\n# output (array)\n# [6, 7.2, 8.4, 9.6, 10.8, 12.0, 10.5, 9.0, 7.5, 6.0, 4.5, 3.0, 4.6, 6.2, 7.8, 9.4, 11.0]\n```\n#### <a id=\"psar\"></a>Parabolic SAR\n```python\ndata = [[82.15,81.29],[81.89,80.64],[83.03,81.31],[83.30,82.65],[83.85,83.07],[83.90,83.11],[83.33,82.49],[84.30,82.3],[84.84,84.15],[85,84.11],[75.9,74.03],[76.58,75.39],[76.98,75.76],[78,77.17],[70.87,70.01]];\nstep = 0.02;\nmax = 0.2;\nta.psar(data, step, max);\n# output (array)\n# [81.29,82.15,80.64,80.64,80.7464,80.932616,81.17000672,81.3884061824,81.67956556416,82.0588176964608,85,85,84.7806,84.565588,84.35487624000001]\n```\n#### <a id=\"supertrend\"></a>SuperTrend\n```python\ndata = [[3,2,1], [2,2,1], [4,3,1], [2,2,1]]; # [high, close, low]\nlength = 3;\nmultiplier = 0.5;\nta.supertrend(data, length, multiplier);\n# output (array)\n# [[5.56,1.44],[3.37,0.63]]\n# [up, down]\n```\n#### <a id=\"elderray\"></a>Elder Ray Index\n```python\ndata = [6,5,4,7,8,9,6,8];\nlength = 7;\nta.elderray(data, length);\n# output (array)\n# [[2.57,-2.43],[2.29,-2.71]]\n# [bull, bear]\n```\n#### <a id=\"hv\"></a>Historical Volatility\n```python\ndata = [7,6,5,7,8,9,7,6,5];\nlength = 8;\nta.hv(data, length);\n# output (array)\n# [0.642, 0.682]\n```\n#### <a id=\"rvi\"></a>Relative Vigor Index\n```python\n# data = [[open,high,low,close]] (requires at least 4 + length values)\ndata = [[4,6,3,3], [3,5,2,2], [2,5,2,4], [4,6,4,5], [5,7,4,4], [4,6,3,4], [4,7,3,5], [5,7,5,6], [6,8,6,6], [6,9,5,6], [6,8,6,7], [7,9,5,6],[6,7,4,5],[5,6,5,6],[6,8,5,5],[5,7,2,6]];\nlength = 8;\nta.rvi(data, length);\n# output (array)\n# [0.29,0.21,0.15,0.16,0.09,0.05]\n```\n#### <a id=\"rvi_signal\"></a>Relative Vigor Index Signal\n```python\nrvi = [0.29,0.21,0.15,0.16,0.09,0.05]; # requires at least 4 values\nta.rvi_signal(rvi);\n# output (array)\n# [0.20,0.15,0.12]\n```\n#### <a id=\"rsi_divergence\"></a>RSI Divergence\nExperimental function: https://github.com/Bitvested/ta.js/issues/18\n```python\ndata = [74,83,66,78,69,70,84,73,74,73,83];\nrsi_length = 5;\nrsi_function = ta.wrsi; # default (the tradingview rsi indicator)\nta.rsi_divergence(data, rsi_length, rsi_function);\n# output (array)\n# 1 = RSI is in divergence\n# 0 = RSI is not in divergence\n# [0, 0, 1, 0, 1, 0] (better to quantify if needed)\n```\n#### <a id=\"divergence\"></a>Universal Divergence\n```javascript\ndata1 = [48,34,43,54,56,64,43];\ndata2 = [76,74,43,55,34,32,45,47];\nta.divergence(data1, data2);\n# output (array)\n# 1 = RSI is in divergence\n# 0 = RSI is not in divergence\n# [0, 0, 1, 1, 0, 1] (better to quantify if needed)\n```\n### Oscillators\n#### <a id=\"gator\"></a>Alligator Oscillator\n```python\ndata = [8,7,8,9,7,8,9,6,7,8,6,8,10,8,7,9,8,7,9,6,7,9];\n# defaults shown\njawlength = 13;\nteethlength = 8;\nliplength = 5;\njawshift = 8;\nteethshift = 5;\nlipshift = 3;\nta.gator(data, jawlength, teethlength, liplength, jawshift, teethshift, lipshift);\n# output (array)\n# [upper gator, lower gator]\n```\n#### <a id=\"mom_osc\"></a>Chande Momentum Oscillator\n```python\ndata = [1, 1.2, 1.3, 1.3, 1.2, 1.4];\nlength = 4; # default = 9\nta.mom_osc(data, length);\n# output (array)\n# [0.0, 3.85]\n```\n#### <a id=\"chaikin_osc\"></a>Chaikin Oscillator\n```python\ndata = [[2,3,4,6],[5,5,5,4],[5,4,3,7],[4,3,3,4],[6,5,4,6],[7,4,3,6]]; # [high, close, low, volume]\nlength1 = 2; # default = 3\nlength2 = 4; # default = 10\nta.chaikin_osc(data, length1, length2);\n# output (array)\n# [-1.667, -0.289, -0.736]\n```\n#### <a id=\"aroon-osc\"></a>Aroon Oscillator\n```python\ndata = [2, 5, 4, 5];\nlength = 3; # default = 25\nta.aroon_osc(data, length);\n# output (array)\n# [50.0, 50.0]\n```\n#### <a id=\"ao\"></a>Awesome Oscillator\n```python\ndata = [[6, 5], [8, 6], [7, 4], [6, 5], [7, 6], [9, 8]]; # [high, low]\nshortlength = 2; # default = 5\nlonglength = 5; # default = 35\nta.ao(data, shortlength, longlength);\n# output (array)\n# [0, 0.9]\n```\n#### <a id=\"ac\"></a>Accelerator Oscillator\n```python\ndata = [[6, 5], [8, 6], [7, 4], [6, 5], [7, 6], [9, 8]]; # [high, low]\nshortlength = 2; # default = 5\nlonglength = 4; # default = 35\nta.ac(data, shortlength, longlength);\n# output (array)\n# [-5.875, -6.125, -6.5]\n```\n#### <a id=\"fish\"></a>Fisher Transform\n```python\ndata = [8,6,8,9,7,8,9,8,7,8,6,7]; # high + low / 2\nlength = 9;\nta.fisher(data, length);\n# output (array)\n# [[-0.318, -0.11], [-0.449, -0.318], [-0.616, -0.449]] # [fisher, trigger]\n```\n### Bands\n#### <a id=\"bands\"></a>Bollinger Bands\n```python\ndata = [1, 2, 3, 4, 5, 6];\nlength = 5; # default = 14\ndeviations = 2; # default = 1\nta.bands(data, length, deviations);\n# output (array)\n# [[5.828, 3, 0.172], [6.828, 4, 1.172]]\n# [upper band, middle band, lower band]\n```\n#### <a id=\"kelt\"></a>Keltner Channels\n```python\ndata = [[3,2,1], [2,2,1], [4,3,1], [2,2,1], [3,3,1]]; # [high, close, low]\nlength = 5; # default = 14\ndeviations = 1; # default = 1\nta.keltner(data, length, deviations);\n# output (array)\n# [[3.93, 2.06, 0.20]]\n# [upper band, middle band, lower band]\n```\n#### <a id=\"don\"></a>Donchian Channels\n```python\ndata = [[6, 2], [5, 2], [5, 3], [6, 3], [7, 4], [6, 3]]; # [high, low]\nlength = 5; # default = 20\nta.don(data, length);\n# output (array)\n# [[7, 4.5, 2], [7, 4.5, 2]]\n# [upper band, base line, lower band]\n```\n#### <a id=\"fibbands\"></a>Fibonacci Bollinger Bands\n```python\ndata = [[1,59],[1.1,82],[1.21,27],[1.42,73],[1.32,42]];\nlength = 4;\ndeviations = 3;\nta.fibbands(data, length, deviations);\n# output (array)\n# [[highest band -> fibonacci levels -> lowest band]]\n```\n#### <a id=\"env\"></a>Envelope\n```python\ndata = [6,7,8,7,6,7,8,7,8,7,8,7,8];\nlength = 11, # default = 10\npercentage = 0.05; # default = 0.005\nta.envelope(data, length, percentage);\n# output (array)\n# [[7.541, 7.182, 6.823], [7.636, 7.273, 6.909]]\n# [upper band, base line, lower band]\n```\n### Statistics\n#### <a id=\"std\"></a>Standard Deviation\n```python\ndata = [1, 2, 3];\nlength = 3; # default = len(length)\nta.std(data, length);\n# output (float)\n# 0.81649658092773\n```\n#### <a id=\"variance\"></a>Variance\n```python\ndata = [6, 7, 2, 3, 5, 8, 6, 2];\nlength = 7; # default = len(data)\nta.variance(data, length);\n# output (array)\n# [3.918, 5.061]\n```\n#### <a id=\"ncdf\"></a>Normal CDF\n```python\nsample = 13;\nmean = 10;\nstdv = 2;\nta.ncdf(sample, mean, stdv);\n# output (float)\n# 0.9331737996110652\n```\n```python\nzscore = 1.5;\nta.ncdf(zscore);\n# output (float)\n# 0.9331737996110652\n```\n#### <a id=\"normsinv\"></a>Inverse Normal Distribution\n```python\ndata = 0.4732;\nta.normsinv(data);\n# output (float)\n# -0.06722824471054376\n```\n#### <a id=\"sim\"></a>Monte Carlo Simulation\n```python\ndata = [6, 4, 7, 8, 5, 6];\nlength = 2; # default = 50\nsimulations = 100; # default = 1000\npercentile = 0.5; # default = -1 (returns all raw simulations)\nta.sim(data, length, simulations, percentile)\n# output (array)\n# [6, 4, 7, 8, 5, 6, 5.96, 5.7]\n```\n#### <a id=\"perc\"></a>Percentile\n```python\ndata = [[6,4,7], [5,3,6], [7,5,8]];\npercentile = 0.5;\nta.percentile(data, percentile);\n# output (array)\n# [6, 4, 7]\n```\n#### <a id=\"cor\"></a>Correlation\n```python\ndata1 = [1, 2, 3, 4, 5, 2];\ndata2 = [1, 3, 2, 4, 6, 3];\nta.cor(data1, data2);\n# output (float)\n# 0.8808929232684737\n```\n#### <a id=\"cov\"></a>Covariance\n```python\ndata1 = [12,13,25,39];\ndata2 = [67,45,32,21];\nlength = 4;\nta.covariance(data1, data2, 4);\n# output (array)\n# [-165.8125]\n```\n#### <a id=\"dif\"></a>Percentage Difference\n```python\nnewval = 0.75;\noldval = 0.5;\nta.dif(newval, oldval);\n# output (float)\n# 0.5\n```\n#### <a id=\"er\"></a>Expected Return\n```python\ndata = [0.02, -0.01, 0.03, 0.05, -0.03]; # historical return data\nta.er(data);\n# output (float)\n# 0.0119\n```\n#### <a id=\"ar\"></a>Abnormal Return\n```python\ndata = [0.02, -0.01, 0.03, 0.05, -0.03]; # historical return data\nlength = 3;\nta.ar(data, length);\n# output (array)\n# [0.037, -0.053]\n```\n#### <a id=\"kelly\"></a>Kelly Criterion\n```python\ndata = [0.01, 0.02, -0.01, -0.03, -0.015, 0.045, 0.005];\nta.kelly(data);\n# output (float)\n# 0.1443\n```\n#### <a id=\"permutations\"></a>Permutations\n```python\ndata = [10,10,10];\nta.permutations(data);\n# output (int)\n# 1000\n```\n#### <a id=\"winratio\"></a>Winratio\n```python\nvar data = [0.01, 0.02, -0.01, -0.03, -0.015, 0.005];\nta.winratio(data);\n# output (float)\n# 0.5\n```\n#### <a id=\"avgwin\"></a> Average Win\n```python\ndata = [0.01, 0.02, -0.01, -0.03, -0.015, 0.005];\nta.avgwin(data);\n# output (float)\n# 0.012\n```\n#### <a id=\"avgloss\"></a> Average Loss\n```python\ndata = [0.01, 0.02, -0.01, -0.03, -0.015, 0.005];\nta.avgloss(data);\n# output (float)\n# -0.018\n```\n#### <a id=\"drawdown\"></a>Drawdown\n```python\ndata = [1, 2, 3, 4, 2, 3];\nta.drawdown([1,2,3,4,2,3]);\n# output (float)\n# -0.5\n```\n#### <a id=\"median\"></a>Median\n```python\ndata = [4, 6, 3, 1, 2, 5];\nlength = 4; # default = len(data)\nta.median(data, length);\n# output (array)\n# [3, 2, 2]\n```\n#### <a id=\"rh\"></a>Recent High\n```python\ndata = [4,5,6,7,8,9,8,7,8,9,10,3,2,1];\nlookback = 3; # No higher values after 3 periods? resets after each new high\nta.recent_high(data, lookback);\n# output (dictionary)\n# {'index': 10, 'value': 10}\n```\n#### <a id=\"rl\"></a>Recent Low\n```python\ndata = [1,4,5,6,4,3,2,3,4,3,5,7,8,8,5];\nlookback = 4; # No lower values after 4 periods? resets after each new low\nta.recent_low(data, lookback);\n# output (dictionary)\n# {'index': 6, 'value': 2}\n```\n#### <a id=\"mad\"></a>Median Absolute Deviation\n```python\ndata = [3, 7, 5, 4, 3, 8, 9];\nlength = 6; # default = len(data)\nta.mad(data, length);\n# output (array)\n# [1, 2]\n```\n#### <a id=\"aad\"></a>Average Absolute Deviation\n```python\ndata = [4, 6, 8, 6, 8, 9, 10, 11];\nlength = 7; # default = len(data)\nta.aad(data, length);\n# output (array)\n# [1.673, 1.469]\n```\n#### <a id=\"stderr\"></a>Standard Error\n```python\ndata = [34, 54, 45, 43, 57, 38, 49];\nsize = 10; # default = len(data)\nta.se(data, size);\n# output (float)\n# 2.424\n```\n#### <a id=\"ssd\"></a>Sum Squared Differences\n```python\ndata = [7, 6, 5, 7, 9, 8, 3, 5, 4];\nlength = 7; # default = len(length)\nta.ssd(data, length);\n# output (array)\n# [4.87, 4.986, 5.372]\n```\n#### <a id=\"log\"></a>Logarithm\n```python\ndata = [5, 14, 18, 28, 68, 103];\nta.log(data);\n# output (array)\n# [1.61, 2.64, 2.89, 3.33, 4.22, 4.63]\n```\n#### <a id=\"exp\"></a>Exponent\n```python\ndata = [1.6, 2.63, 2.89, 3.33, 4.22, 4.63];\nta.exp(data);\n# output (array)\n# [4.95, 13.87, 17.99, 27.94, 68.03, 102.51]\n```\n#### <a id=\"norm\"></a>Normalize\n```python\ndata = [5,4,9,4];\nmargin = 0.1; # margin % (default = 0)\nta.normalize(data, margin);\n# output (array)\n# [0.22, 0.06, 0.86, 0.06]\n```\n#### <a id=\"dnorm\"></a>Denormalize\n```python\ndata = [5,4,9,4]; # original data || [highest, lowest]\nnorm = [0.22, 0.06, 0.86, 0.06, 0.44]; # normalized data\nmargin = 0.1; # margin % (default = 0)\nta.denormalize(data, norm, margin);\n# output (array)\n# [5 ,4, 9, 4, 6.4]\n```\n#### <a id=\"normp\"></a>Normalize Pair\n```python\npair1 = [10,12,11,13];\npair2 = [100,130,100,140];\nta.normalize_pair(pair1, pair2);\n# output (array)\n# [[55, 55], [66, 71.5], [60.5, 54.99], [71.5, 76.99]]\n```\n#### <a id=\"normf\"></a>Normalize From\n```python\ndata = [8, 12, 10, 11];\nbaseline = 100;\nta.normalize_from(data, baseline);\n# output (array)\n# [100, 150, 125, 137.5]\n```\n#### <a id=\"standard\"></a>Standardize\n```python\ndata = [6,4,6,8,6];\nta.standardize(data);\n# output (array)\n# [0, -1.581, 0, 1.581, 0]\n```\n#### <a id=\"zscore\"></a>Z-Score\n```python\ndata = [34,54,45,43,57,38,49];\nlength = 5;\nta.zscore(data, length);\n# output (array)\n# [1.266, -1.331, 0.408]\n```\n#### <a id=\"kmeans\"></a>K-means Clustering\n```python\ndata = [2, 3, 4, 5, 3, 5, 7, 8, 6, 8, 6, 4, 2, 6];\nlength = 4;\nta.kmeans(data, length);\n# output (array)\n# [[ 4, 5, 5, 4 ], [ 7, 6, 6, 6 ], [ 8, 8 ], [ 2, 3, 3, 2 ]]\n```\n#### <a id=\"mse\"></a>Mean Squared Error\n```python\ndata1 = [7,8,7,8,6,9];\ndata2 = [6,8,8,9,6,8];\nta.mse(data1, data2);\n# output (float)\n# 0.6666666666666666\n```\n#### <a id=\"cum\"></a>Cumulative\n```python\ndata = [3,5,7,5,10];\nlength = 4;\nta.cum(data, length);\n# output (array)\n# [20, 27]\n```\n### Chart types\n#### <a id=\"ha\"></a>Heikin Ashi\n```python\ndata = [[3, 4, 2, 3], [3, 6, 3, 5], [5, 5, 2, 3]]; # [open, high, low, close]\nta.ha(data);\n# output (array)\n# [open, high, low, close]\n# first 7-10 candles are unreliable\n```\n#### <a id=\"ren\"></a>Renko\n```python\ndata = [[8, 6], [9, 7], [9, 8]]; # [high, low]\nbricksize = 3;\nta.ren(data, bricksize);\n# output (array)\n# [open, high, low, close]\n```\n### Miscellaneous\n#### <a id=\"times_up\"></a>Times Up\n```python\ndata = [5,6,7,8,7,6,5];\nlength = 3;\nta.times_up(data, length);\n# output (array)\n# [1, 0, 0, 0]\n```\n#### <a id=\"times_dn\"></a>Times Down\n```python\ndata = [5,6,7,8,7,6,5];\nlength = 3;\nta.times_down(data, length);\n# output (array)\n# [0, 0, 0, 1]\n```\n### Experimental Functions\n#### <a id=\"sup\"></a>Support Line\n```python\ndata = [4,3,2,5,7,6,5,4,7,8,5,4,6,7,5];\nstart = {\"index\": 2, \"value\": 2}; # default = recent_low(data, 25)\nsupport = ta.support(data, start);\n# output (dictionary)\n# ['calculate'] = function(x) // calculates line at position x from start['index'] (= 0)\n# ['slope'] = delta y per x\n# ['lowest'] = lowest (start) value at x = 0\n# ['index'] = (start) index of lowest value\n# to get the line at the current candle / chart period\ncurrent = support['calculate'](len(data)-support['index']);\n```\n#### <a id=\"res\"></a>Resistance Line\n```python\ndata = [5,7,5,5,4,6,5,4,6,5,4,3,2,4,3,2,1];\nstart = {\"index\": 1, \"value\": 7}; # default = recent_high(data, 25)\nresistance = ta.resistance(data, start);\n# output (dictionary)\n# ['calculate'] = function(x) // calculates line at position x from start['index'] (= 0)\n# ['slope'] = delta y per x\n# ['highest'] = highest (start) value\n# ['index'] = (start) index of highest value\n# to get the line at the current candle / chart period\ncurrent = resistance['calculate'](len(data)-resistance['index']);\n```\n## Contributing\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\n\nPlease make sure to update tests as appropriate.\n\n## License\n[MIT](https:#choosealicense.com/licenses/mit/)\n\n\n",
"bugtrack_url": null,
"license": "",
"summary": "ta.py is a Python package for dealing with financial technical analysis",
"version": "1.6.0",
"split_keywords": [
"financial",
"technical",
"analysis",
"ta",
"simple",
"weighted",
"exponential",
"sma",
"wma",
"ema",
"aroon",
"rsi",
"stochastics",
"macd",
"atr",
"vwap",
"lsma",
"least",
"squares",
"average",
"kama",
"variance",
"correlation",
"aad",
"mad",
"ssd",
"kmeans",
"monte",
"carlo"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "66c251dc975bd04d973f3fd8fbe12dcfc738abb0bdfac1afa6270e119f121e51",
"md5": "8a74c3404e846ea7b0900173ec54eb45",
"sha256": "4bdb6c2764b0b9b19e0c4fac78fd3a63a477c4761e8b01008fa84c64e1581ee7"
},
"downloads": -1,
"filename": "ta_py-1.6.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8a74c3404e846ea7b0900173ec54eb45",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 20225,
"upload_time": "2023-01-15T00:39:10",
"upload_time_iso_8601": "2023-01-15T00:39:10.955636Z",
"url": "https://files.pythonhosted.org/packages/66/c2/51dc975bd04d973f3fd8fbe12dcfc738abb0bdfac1afa6270e119f121e51/ta_py-1.6.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-01-15 00:39:10",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "Bitvested",
"github_project": "ta.py",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "ta-py"
}