A Node.js toolkit with various indicators and oscillators for the technical stock analysis. This package contains only the mathematical calculations.
$ npm install alphacate [--save]
//retrieve indicator module via accessor or alias
const LWMA = require('alphacate').LWMA;
const BB = require('alphacate').BollingerBands;
//do computation asynchronously
let run = async () => {
try{
//pass optional configuration object into the constructor
let lwma = new LWMA( {periods: 4} );
let bb = new BB( {periods: 4} );
let data = [25.5, 26.75, 27.0, 26.5, 27.25];
//set data series
lwma.setValues( data );
bb.setValues( data );
//invoke calculate() to compute and retrieve result collection
//an error will be throw if passed data serie or options are invalid
let lwmaResultCollection = await lwma.calculate();
let bbResultCollection = await bb.calculate();
for(let i=0, len=lwmaCollection.length; i<len; i++){
console.log(`Price: ${lwmaCollection[i].price}, LWMA: ${lwmaCollection[i].lwma}, BB Upper: ${bbCollection[i].upper}`);
}
}
catch( err ){
console.log(err.message);
}
};
run();
See the list below for all available indicators in the package. Retrieve the indicator module via the accessor property or with the alias.
Indicator | Module accessor | Alias |
---|---|---|
Average True Range | AverageTrueRange | ATR |
Bollinger Bands | BollingerBands | BB |
Exponential Moving Average | ExponentialMovingAverage | EMA |
Linearly Weighted Moving Average | LinearlyWeightedMovingAverage | LWMA |
Money Flow Index | MoneyFlowIndex | MFI |
Moving Average Convergence Divergence | MovingAverageConvergenceDivergence | MACD |
On Balance Volume | OnBalanceVolume | OBV |
Rate Of Change | RateOfChange | ROC |
Relative Strength Index | RelativeStrengthIndex | RSI |
Simple Moving Average | SimpleMovingAverage | SMA |
Smoothed Moving Average | SmoothedMovingAverage | SMMA |
Stochastic Oscillator | StochasticOscillator | SO |
Weighted Moving Average | WeightedMovingAverage | WMA |
The type of the item in the data serie that will be passed into the setValues
function
Indicator | Type | Usage |
---|---|---|
Average True Range | Number | |
Bollinger Bands | Number | |
Exponential Moving Average | Number | |
Linearly Weighted Moving Average | Number | |
Money Flow Index | Object | {high:<Number>, low:<Number>, close:<Number>, volume:<Number> }; |
Moving Average Convergence Divergence | Number | |
On Balance Volume | Object | {price:<Number>, volume:<Number>} |
Rate Of Change | Number | |
Relative Strength Index | Number | |
Simple Moving Average | Number | |
Smoothed Moving Average | Number | |
Stochastic Oscillator | Number | |
Weighted Moving Average | Number |
Each item in the result collection contains several object properties. See the list below which properties belongs to the particular indicator. All values are numbers except where noted.
Indicator | Collection Item properties |
---|---|
Average True Range | {tr, atr} |
Bollinger Bands | {upper:<Array>, middle:<Array>, lower:<Array>, price:<Array>} |
Exponential Moving Average | {price, ema} |
Linearly Weighted Moving Average | {price, lmwa} |
Moving Average Convergence Divergence | {slow_ema:<Array>, fast_ema:<Array>, signal_ema:<Array>, macd:<Array>, prices:<Array>} |
On Balance Volume | {price, obv} |
Rate Of Change | {price, roc} |
Relative Strength Index | {price, gain, loss, avg_gain, avg_loss, rs, rsi} |
Simple Moving Average | {price, sma} |
Smoothed Moving Average | {price, smma} |
Stochastic Oscillator | {k,v, price} |
Weighted Moving Average | {price, wma} |
To configure the indicator with different settings, you can pass an optional configuration object into the indicator constructor.
Indicator | Option properties |
---|---|
Average True Range | periods, startIndex, endIndex, lazyEvaluation, maxTickDuration |
Bollinger Bands | periods, startIndex, endIndex, sliceOffset, lazyEvaluation, maxTickDuration |
Exponential Moving Average | periods, startIndex, endIndex, sliceOffset, lazyEvaluation, maxTickDuration, emaResultsOnly, startWithFirst |
Linearly Weighted Moving Average | periods, startIndex, endIndex, sliceOffset, lazyEvaluation, maxTickDuration |
Money Flow Index | periods, startIndex, endIndex, sliceOffset, lazyEvaluation, maxTickDuration |
Moving Average Convergence Divergence | fastPeriods, slowPeriods, signalPeriods, sliceOffset, lazyEvaluation, maxTickDuration |
On Balance Volume | startIndex, endIndex, lazyEvaluation, maxTickDuration |
Rate Of Change | periods, startIndex, endIndex, sliceOffset, lazyEvaluation, maxTickDuration |
Relative Strength Index | periods, startIndex, endIndex, sliceOffset, lazyEvaluation, maxTickDuration |
Simple Moving Average | periods, startIndex, endIndex, sliceOffset, lazyEvaluation, maxTickDuration |
Smoothed Moving Average | periods, startIndex, endIndex, sliceOffset, lazyEvaluation, maxTickDuration |
Stochastic Oscillator | periods, startIndex, endIndex, smaPeriods, sliceOffset, lazyEvaluation, maxTickDuration |
Weighted Moving Average | periods, startIndex, endIndex, sliceOffset, lazyEvaluation, maxTickDuration |
See the table below for a description of the particular option property.
Option property | Type | Description |
---|---|---|
periods | Number | The time periods to calculate the indicator |
startIndex | Number | The index for the passed data serie to start the calulation |
endIndex | Number | The index for the passed data serie to end the calculation |
sliceOffset | Boolean | Omit items in result collection used for inital period calculation |
fastPeriods | Number | The time periods for the fast moving average |
slowPeriods | Number | The time periods for the slow moving average |
signalPeriods | Number | The time periods for the signal average |
smaPeriods | Number | The time periods for the simple moving average |
lazyEvaluation | Boolean | Do the computation of passed values in an asynchronous fashion |
maxTickDuration | Number | The computation tick duration in milliseconds. If the computation is not completed, it will be continued in the tick of the next event loop. |
All tests are inside test
folder
Run tests:
$ npm test
Run code coverage report:
$ npm run coverage
This project is under the MIT License. See the LICENSE file for the full license text.