npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@wahack/technicalindicators

v3.1.1

Published

Techincal Indicators written in javascript

Downloads

745

Readme

TechnicalIndicators

A javascript technical indicators written in typescript.

A fork base on anandanand84/technicalindicators

Installation

Node.js versions >= 10

npm install --save git+https://github.com/wahack/technicalindicators.git
const SMA = require('technicalindicators').SMA;

Node.js versions < 10

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

Webpack

Make sure you have the following in your config file.

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

Browser

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

Pattern detection is removed from version 3.0, if you need pattern detection use v2.0

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});

or

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

Playground

Playground with code completion

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. Cross Up
  4. Cross Down
  5. Cross Over
  6. Highest
  7. Lowest
  8. Standard Deviation
  9. Sum

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 底部钳形线.

or

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

API

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

calculate

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})

or

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

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);
  if(result)
    results.push(result)
});

getResult

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.

Precision

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);

Contribute

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 [email protected]

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:

> [email protected] install /Users/balupton/Projects/trading/technicalindicators/node_modules/canvas
> node-gyp rebuild

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

Setup

git clone [email protected]:wahack/technicalindicators.git  # 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 README.md, 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"