all files / technicalindicators/lib/directionalmovement/ PlusDM.js

91.67% Statements 33/36
81.25% Branches 13/16
100% Functions 5/5
91.67% Lines 33/36
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65                        114× 111× 111× 111×   114× 114×         76×       76× 74×                     38×    
/**
 * Created by AAravindan on 5/8/16.
 */
"use strict"
const nf = require('../Utils/NumberFormatter');
 
let PDM;
 
module.exports = PDM = function(input) {
 
  var lows = input.low
  var highs = input.high;
  var format = input.format || nf;
 
  if(Ilows.length != highs.length) {
    throw ('Inputs(low,high) not of equal size');
  }
 
  this.result = [];
 
  this.generator = (function* (){
    var plusDm;
    var current = yield;
    var last;
    while (true) {
      if(last) {
        let upMove = (current.high  - last.high)
        let downMove = (last.low - current.low)
        plusDm = format((upMove > downMove && upMove > 0) ? upMove : 0);
      }
      last = current;
      current = yield plusDm;
    }
  })();
 
  this.generator.next();
 
  lows.forEach((tick, index) => {
    var result = this.generator.next({
      high : highs[index],
      low  : lows[index]
    });
    if(result.value!==undefined)
      this.result.push(result.value);
  });
};
 
PDM.calculate = function(input) {
  if(Iinput.reversedInput) {
    input.high.reverse();
    input.low.reverse();
  }
  let result = (new PDM(input)).result;
  input.reversedInput ? result.reverse():undefined;
  return result;
};
 
PDM.prototype.getResult = function () {
  return this.result;
};
 
PDM.prototype.nextValue = function (price) {
  return this.generator.next(price).value;
};