@thuantan2060/technicalindicators
Version:
Techincal Indicators written in javascript
98 lines (97 loc) • 2.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.BollingerBandsOutput = exports.BollingerBandsInput = exports.BollingerBands = void 0;
exports.bollingerbands = bollingerbands;
var _indicator = require("../indicator/indicator");
var _SMA = require("../moving_averages/SMA");
var _SD = require("../Utils/SD");
class BollingerBandsInput extends _indicator.IndicatorInput {
period;
stdDev;
values;
}
exports.BollingerBandsInput = BollingerBandsInput;
;
class BollingerBandsOutput extends _indicator.IndicatorInput {
middle;
upper;
lower;
pb;
}
exports.BollingerBandsOutput = BollingerBandsOutput;
;
class BollingerBands extends _indicator.Indicator {
generator;
constructor(input) {
super(input);
var period = input.period;
var priceArray = input.values;
var stdDev = input.stdDev;
var format = this.format;
var sma, sd;
this.result = [];
sma = new _SMA.SMA({
period: period,
values: [],
format: v => {
return v;
}
});
sd = new _SD.SD({
period: period,
values: [],
format: v => {
return v;
}
});
this.generator = function* () {
var result;
var tick;
var calcSMA;
var calcsd;
tick = yield;
while (true) {
calcSMA = sma.nextValue(tick);
calcsd = sd.nextValue(tick);
if (calcSMA) {
let middle = format(calcSMA);
let upper = format(calcSMA + calcsd * stdDev);
let lower = format(calcSMA - calcsd * stdDev);
let pb = format((tick - lower) / (upper - lower));
result = {
middle: middle,
upper: upper,
lower: lower,
pb: pb
};
}
tick = yield result;
}
}();
this.generator.next();
priceArray.forEach(tick => {
var result = this.generator.next(tick);
if (result.value != undefined) {
this.result.push(result.value);
}
});
}
static calculate = bollingerbands;
nextValue(price) {
return this.generator.next(price).value;
}
}
exports.BollingerBands = BollingerBands;
function bollingerbands(input) {
_indicator.Indicator.reverseInputs(input);
var result = new BollingerBands(input).result;
if (input.reversedInput) {
result.reverse();
}
_indicator.Indicator.reverseInputs(input);
return result;
}
;
//# sourceMappingURL=BollingerBands.js.map