/ta-math

🔮 Technical analysis math. Library for technical indicators and overlays with price data in any format.

Primary LanguageJavaScriptMIT LicenseMIT

Technical analysis math bundlephobia Codecov Total alerts

Well tested library for calculating technical indicators and overlays. You can choose format of price data from provider and library will return result. It distributed with Typescript, ES6 and ES5.

btc-with-bollinger-bands

Check example with plotly library, ccxt data provider and BTC prices from Binance exchange.

Technical Overlays

Function Technical Overlay Tested Developed by Year
bb Bollinger Band ✔️️ John Bollinger 1980s
dema Double Exponential Moving Average ️ ✔️️ Patrick Mulloy 1994
ema Exponential Moving Average ✔️️
ebb Exponential Bollinger Band ✔️️ Based on Welford's
keltner Keltner Channels ✔️️ Chester Keltner 1960
psar Parabolic SAR :suspect: Welles Wilder 1978
sma Simple Moving Average ✔️️
tema Triple Exponential Moving Average ️ ✔️️ Patrick Mulloy 1994
vbp Volume by Price ✔️️
vwap Volume Weighted Average Price ✔️️ James Elkins 1984
zigzag ZigZag Indicator ✔️️ Arthur Merrill 1977

Technical Indicators

Function Technical Indicator Tested Developed by Year
adl Accumulation / Distribution line ✔️ Marc Chaikin 1970s
atr Average True Range ✔️ Welles Wilder 1978
adx Average Directional Index ✔️ Welles Wilder 1978
bbp Bollinger Bands Percent Bandwidth %B 👌
cci Commodity Channel Index ✔️ Donald Lambert 1980
cho Chaikin Oscillator 👌 Marc Chaikin
expdev Exponential Weighted Deviation ✔️
fi Force Index ✔️
kst Know Sure Thing ✔️
macd Moving Average Convergence/Divergence ✔️ Gerald Appel 1979
madev Mean Absolute Deviation ✔️
mfi Money Flow Index (volume-weighted RSI) ✔️ Gene Quong and Avrum Soudack 1989
obv On Balance Volume ✔️ Joseph Granville 1963
roc Rate-of-Change ✔️
rsi Relative Strength Index ✔️ Welles Wilder 1978
stdev Standard Deviation ✔️️
stoch Stochastic Oscillator (Slow/Fast/Full) ✔️ George Lane 1950s
stochRsi Combines Stochastics with the RSI ✔️ Welles Wilder 1994
vi Vortex Indicator ✔️ Etienne Botes and Douglas Siepman 2010
williams Williams %R ✔️

Error methods

Function Error methods Tested
mae Mean Absolute Error ✔️
mape Mean Absulute Percentage Error ✔️
nrmse Normalized Root-Mean-Square Error ✔️
rmse Root-Mean-Square Error ✔️

Price transformations

Function Price transformation Tested
trueRange True Range ✔️
typicalPrice Typical Price ✔️

Statistical methods

Function Statistical methods Tested
cov Covariation ✔️
cor Correlation ✔️
mean Mean (Average) ✔️
sd Standard deviation ✔️

Correlation matrix

correlation-matrix

Usage

  const ohlcv = [[t,o,h,l,c,v], [t2,o2,h2,l2,c2,v2],  ...  ,[tN,oN,hN,lN,cN,vN]];
  const ta = new TA(ohlcv, TA.exchangeFormat);
  const emaShort = ta.ema(10);
  const emaLong = ta.ema(21);
  const bband = ta.bb(15, 2);
  const bbUpper = bband.upper;
  const bbLower = bband.lower;
  const smaOpenPrice = TA.sma(ta.$open);

Installation

Install npm package npm i ta-math or add ta-math.js script file on web page.

2do list

  • basic indicators and overlays
  • unit tests
  • es5 with babel
  • coverage
  • good looking example
  • migrate to typescript
  • fix PSAR

Contributing

Feel free to contribute. Here reference how to implement new indicators. There are test samples in the .xls files, also you can generate testing data with 'generator.py' file. To convert columns into rows in .xls you can use this tool.