UNPKG

@sunrise1002/tats

Version:

Techincal Indicators written in javascript

56 lines (55 loc) 1.71 kB
"use strict"; import { Indicator } from '../indicator/indicator'; import { LinkedList } from '../Utils/LinkedList'; export class WMA extends Indicator { constructor(input) { super(input); var period = input.period; var priceArray = input.values; this.result = []; this.generator = (function* () { let data = new LinkedList(); let denominator = period * (period + 1) / 2; while (true) { if ((data.length) < period) { data.push(yield); } else { data.resetCursor(); let result = 0; for (let i = 1; i <= period; i++) { result = result + (data.next() * i / (denominator)); } var next = yield result; data.shift(); data.push(next); } } })(); this.generator.next(); priceArray.forEach((tick, index) => { var result = this.generator.next(tick); if (result.value != undefined) { this.result.push(this.format(result.value)); } }); } //STEP 5. REMOVE GET RESULT FUNCTION nextValue(price) { var result = this.generator.next(price).value; if (result != undefined) return this.format(result); } ; } WMA.calculate = wma; ; export function wma(input) { Indicator.reverseInputs(input); var result = new WMA(input).result; if (input.reversedInput) { result.reverse(); } Indicator.reverseInputs(input); return result; }