Package Exports
- technicalindicators
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (technicalindicators) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
TechnicalIndicators
A javascript technical indicators written in javascript.
Installation
Node.js versions >= 6.4
npm install --save technicalindicators
const SMA = require('technicalindicators').SMA;
Node.js versions < 6.4
npm install --save babel-polyfill
npm install --save technicalindicators
require('babel-polyfill');
const SMA = require('technicalindicators/dist/browser').SMA;
Webpack
Make sure you have the following in your config file.
module.exports = {
resolve: {
mainFields: ["module", "main"]
}
}
Browser
For browser install using bower or npm, but it is necessary to include the babel-polyfill otherwise you will get an error. For example see index.html
npm install --save technicalindicators
npm install --save babel-polyfill
bower install --save technicalindicators
<script src="node_modules/babel-polyfill/browser.js"></script>
<script src="bower_components/technicalindicators/browser.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});
or
SMA.calculate({period : 5, values : [1,2,3,4,5,6,7,8,9]});
Playground
Playground with code completion
Available Indicators
- Simple Moving Average (SMA).
- Exponential Moving Average (EMA).
- Weighted Moving Average (WMA).
- Moving Average Convergence Divergence (MACD).
- Bollinger Bands (BB).
- Average True Range (ATR).
- Relative Strength Index (RSI).
- Wilder’s Smoothing (Smoothed Moving Average, WEMA).
- Rate of Change (ROC).
- Know Sure Thing (KST).
- Stochastic Oscillator (KD).
- WilliamsR (W%R).
- Accumulation Distribution Line (ADL).
- On Balance Volume (OBV).
- Triple Exponentially Smoothed Average (TRIX).
- Average Directional Index (ADX).
- Commodity Channel Index (CCI).
- Volume Weighted Average Price (VWAP).
- Force Index (FI).
Chart Types
CandleStick Pattern
- Abandoned Baby.
- Bearish Engulfing Pattern.
- Bullish Engulfiing Pattern.
- Dark Cloud Cover.
- Downside Tasuki Gap.
- Doji.
- DragonFly Doji.
- GraveStone Doji.
- BullishHarami.
- Bearish Harami Cross.
- Bullish Harami Cross.
- Bullish Marubozu.
- Bearish Marubozu.
- Evening Doji Star.
- Evening Star.
- Bearish Harami.
- Piercing Line.
- Bullish Spinning Top.
- Bearish Spinning Top.
- Morning Doji Star.
- Morning Star.
- Three Black Crows.
- Three White Soldiers.
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
Initialize indicator with available price value
Get results for initialized values
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
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/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 git@github.com:anandanand84/technicalindicators.git # or use your fork
cd technicalindicators
npm install
gulp watch-test
Running tests and getting coverage
npm test
npm run cover
Adding new indicators.
- Add tests for the indicator. Make it pass. It would be better if a sample of the stockcharts excel is used for the test case.
- Add the indicator to the index.js
- Run
npm run build
so it adds the indicator to the browser.js - Add it to read me, with the link to the tonicdev url containing the sample.
- Add indicator it to keywords in package.json and bower.json
- Send a pull request.
Verify Documentation
node testdocs.js
open "http://localhost:5444/testdocs.html"
Donate
BTC: 12eGmnhPrGuqvLNVnPddTaXm74hX68auTV