Skip to content
A javascript technical indicators written in typescript with pattern recognition right in the browser
JavaScript TypeScript HTML Other
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode Fix CCI and ATR declaration Apr 14, 2019
declarations Fix CCI and ATR declaration Apr 14, 2019
dist Fix CCI and ATR declaration Apr 14, 2019
images Add cryptotrading-hub Jan 22, 2018
lib Fix CCI and ATR declaration Apr 14, 2019
src Fix CCI and ATR declaration Apr 14, 2019
test Add Keltner channel and chandelier exit Oct 12, 2018
tf_model Move from kerasjs to tensorflowjs Sep 26, 2018
typings Kerasinclude (#105) Feb 14, 2018
.babelrc Use rollup and make babel-polyfill external dependency May 12, 2017
.dockerignore Add docker support for development Mar 22, 2018
.doclets.yml Add Ability to test docs Mar 15, 2017
.editorconfig Added note to the README about canvas dependencies (#60) Aug 2, 2017
.gitignore Add volume profile Apr 1, 2018
.npmignore add npmignore (#85) Dec 30, 2017
.travis.yml Update travis node version Sep 26, 2018
Dockerfile Add docker support for development Mar 22, 2018
LICENSE Initial commit May 2, 2016 Update (#184) Jun 28, 2019 Add docker support for development Mar 22, 2018
custom.js Add ability for custom build Nov 14, 2018
debug.js Add docker support for development Mar 22, 2018 fix duplicate declarations in generated.d.ts (#165) Feb 11, 2019
gulpfile.js Add fibonacci tool Mar 15, 2017
index.html Add ability for custom build Nov 14, 2018
index.js Add Keltner channel and chandelier exit Oct 12, 2018
new.js Add awesome oscillator Mar 15, 2018
newtemplatesrc.js Add awesome oscillator Mar 15, 2018
package-lock.json 2.0.8 Apr 14, 2019
package.json Update package.json (#182) Jun 24, 2019
rollup.js Add ability for custom build Nov 14, 2018
technicalindicators.html Remove polyfill dependency Jun 18, 2017 Add docker support for development Mar 22, 2018
testdocs.html Update playground Mar 20, 2017
testdocs.js Add Ability to test docs Mar 15, 2017
tsconfig.json Add docker support for development Mar 22, 2018
tslint.json Convert candlesticks to typescript Mar 6, 2017

Travis CI


A javascript technical indicators written in typescript.


Node.js versions >= 10

npm install --save technicalindicators
const SMA = require('technicalindicators').SMA;

Node.js versions < 10

For nodejs version below 10 use 1.x versions of this library.


Make sure you have the following in your config file.

module.exports = {
  resolve: {
    mainFields: ["module", "main"]


For browsers install using npm,

For ES6 browsers use

npm install --save technicalindicators
<script src="node_modules/technicalindicators/dist/browser.es6.js"></script>

For ES5 support it is necessary to include the babel-polyfill and respective file browser.js otherwise you will get an error. For example see index.html

npm install --save technicalindicators
npm install --save babel-polyfill
<script src="node_modules/babel-polyfill/browser.js"></script>
<script src="node_modules/technicalindicators/dist/browser.js"></script>

Pattern detection

If using pattern detection it is necessary to include the tensorflowjs library before this library is loaded and the model files present in tf_model dir in this repository should be accessible at location /tf_model/ in server.

For ES6

<script src=""></script>
<script src="node_modules/technicalindicators/dist/browser.es6.js"></script>

For ES5

<script src="node_modules/babel-polyfill/browser.js"></script>
<script src=""></script>
<script src="node_modules/technicalindicators/dist/browser.es6.js"></script>

All indicators will be available in window object. So you can just use

sma({period : 5, values : [1,2,3,4,5,6,7,8,9], reversedInput : true});


SMA.calculate({period : 5, values : [1,2,3,4,5,6,7,8,9]});


Playground with code completion

Crypto Trading hub

If you like this project. You'll love my other project crypto trading hub

  1. Its free
  2. Realtime price charts
  3. Unified trading experience across exchanges
  4. Price alerts
  5. Realtime crypto screening using javascript (Find coins making high and low in realtime or anything you can write using this library and javascript in realtime)
  6. Trading from charts,
  7. Modify orders and ability to trade and create studies using javascript.

Home Screener Trade

Available Indicators

  1. Accumulation Distribution Line (ADL).
  2. Average Directional Index (ADX).
  3. Average True Range (ATR).
  4. Awesome Oscillator (AO).
  5. Bollinger Bands (BB).
  6. Commodity Channel Index (CCI).
  7. Force Index (FI).
  8. Know Sure Thing (KST).
  9. Moneyflow Index (MFI).
  10. Moving Average Convergence Divergence (MACD).
  11. On Balance Volume (OBV).
  12. Parabolic Stop and Reverse (PSAR).
  13. Rate of Change (ROC).
  14. Relative Strength Index (RSI).
  15. Simple Moving Average (SMA).
  16. Stochastic Oscillator (KD).
  17. Stochastic RSI (StochRSI).
  18. Triple Exponentially Smoothed Average (TRIX).
  19. Typical Price.
  20. Volume Weighted Average Price (VWAP).
  21. Volume Profile (VP).
  22. Exponential Moving Average (EMA).
  23. Weighted Moving Average (WMA).
  24. Wilder’s Smoothing (Smoothed Moving Average, WEMA).
  25. WilliamsR (W%R).
  26. Ichimoku Cloud.

Other Utils

  1. Average Gain
  2. Average Loss
  3. Highest
  4. Lowest
  5. Standard Deviation
  6. Sum

Pattern Detection

  1. Pattern Detection

Finds pattern in the given set of data, patterns include, DB, DT, HS, IHS, TU, TD

  const hasHeadAndShoulder = require('technicalindicators').hasHeadAndShoulder;
  hasHeadAndShoulder({values : closes})
  isTrendingUp({values : closes})

When running in browser the dir /tf_model/ present in this respository should be accessible on your server at the location at /tf_model/. The model is trained using 400 count of values, so try to provide values close to 400 for a reliable prediction of DB(Double Bottom), DT(Double Top), HS(Head and Shoulders), IHS(Inverted Head and Shoulders) TD(Trending Down) and TU(Trending up) works fine even with lower values.

Chart Types

  1. Renko (renko)
  2. Heikin-Ashi (HA)

CandleStick Pattern

  1. Abandoned Baby.
  2. Bearish Engulfing Pattern.
  3. Bullish Engulfiing Pattern.
  4. Dark Cloud Cover.
  5. Downside Tasuki Gap.
  6. Doji.
  7. DragonFly Doji.
  8. GraveStone Doji.
  9. BullishHarami.
  10. Bearish Harami Cross.
  11. Bullish Harami Cross.
  12. Bullish Marubozu.
  13. Bearish Marubozu.
  14. Evening Doji Star.
  15. Evening Star.
  16. Bearish Harami.
  17. Piercing Line.
  18. Bullish Spinning Top.
  19. Bearish Spinning Top.
  20. Morning Doji Star.
  21. Morning Star.
  22. Three Black Crows.
  23. Three White Soldiers.
  24. Bullish Hammer.
  25. Bearish Hammer.
  26. Bullish Inverted Hammer.
  27. Bearish Inverted Hammer.
  28. Hammer Pattern.
  29. Hammer Pattern (Unconfirmed).
  30. Hanging Man.
  31. Hanging Man (Unconfirmed).
  32. Shooting Star.
  33. Shooting Star (Unconfirmed).
  34. Tweezer Top.
  35. Tweezer Bottom.


Search for all bullish or bearish using

var twoDayBullishInput = {
  open: [23.25,15.36],
  high: [25.10,30.87],
  close: [21.44,27.89],
  low: [20.82,14.93],

var bullish = require('technicalindicators').bullish;

bullish(twoDayBullishInput) //true


There are three ways you can use to get the indicator results.


Every indicator has a static method calculate which can be used to calculate the indicator without creating an object.

const sma = require('technicalindicators').sma;
var prices = [1,2,3,4,5,6,7,8,9,10,12,13,15];
var period = 10;
sma({period : period, values : prices})


const SMA = require('technicalindicators').SMA;
var prices = [1,2,3,4,5,6,7,8,9,10,12,13,15];
var period = 10;
SMA.calculate({period : period, values : prices})


nextValue method is used to get the next indicator value.

var sma = new SMA({period : period, values : []});
var results = [];
prices.forEach(price => {
  var result = sma.nextValue(price);


This a merge of calculate and nextValue. The usual use case would be

  1. Initialize indicator with available price value

  2. Get results for initialized values

  3. Use nextValue to get next indicator values for further tick.

    var sma = new SMA({period : period, values : prices});
    sma.getResult(); // [5.5, 6.6, 7.7, 8.9]
    sma.nextValue(16); // 10.1

    Note: Calling nextValue will not update getResult() value.


This uses regular javascript numbers, so there can be rounding errors which are negligible for a technical indicators, you can set precision by using the below config. By default there is no precision set.

const technicalIndicators = require('technicalindicators');
technicalIndicators.setConfig('precision', 10);


Create issues about anything you want to report, change of API's, or request for adding new indicators. You can also create pull request with new indicators.

Environment dependencies

Typescript: Use typescript 2.0.0 other you might get max call stack reached error.

npm install -g typescript@2.0.0

TechnicalIndicators depends on the canvas package, which requires some dependencies to be installed. You can find the instructions to do that here. If you do not install these dependencies, expect to get this error message during the installation of TechnicalIndicators:

> canvas@1.6.6 install /Users/balupton/Projects/trading/technicalindicators/node_modules/canvas
> node-gyp rebuild

./util/ line 31: pkg-config: command not found
gyp: Call to './util/ freetype' returned exit status 0 while in binding.gyp. while trying to load binding.gyp


git clone  # or use your fork
cd technicalindicators
npm run start

Running tests and getting coverage

npm test
npm run cover

Adding new indicators

  1. Add tests for the indicator and make them pass.
    (It would be better if a sample of the stockcharts excel is used for the test case.)
  2. Add the indicator to the index.js and src/index.ts
  3. Run build scripts: npm run build-lib && npm run generateDts && npm run start
  4. Add it to, with the link to the runkit url containing the sample.
  5. Add indicator it to keywords in package.json and bower.json
  6. Send a Pull Request.

Verify Documentation

node testdocs.js
open "http://localhost:5444/testdocs.html"


  1. XRB: xrb_1shh8i77upiq4bjzi3ajik9ofq14bbcucshoapi3m7f8d74dc5k31o56yj5r
  2. ETH: 0x0B56580Eb25f3F7e366dDA697161d314C17Bcb6a
  3. LTC: LLTUhKBRKs9sbW9F8MFQm7VVdZ1dJnXzGc
  4. BTC: 1FGeJHoj7tjeLrm4JNtyPWTdBKPJjcqP6Y
  5. BCH: 1AUFc8CEfHVjnoixbqTbX62WV8DZkpC1DU
You can’t perform that action at this time.