UNPKG

@sunrise1002/tats

Version:

Techincal Indicators written in javascript

55 lines (54 loc) 1.67 kB
import { Indicator } from '../indicator/indicator'; import { SMA } from './SMA'; export class WEMA extends Indicator { constructor(input) { super(input); var period = input.period; var priceArray = input.values; var exponent = 1 / period; var sma; this.result = []; sma = new SMA({ period: period, values: [] }); var genFn = (function* () { var tick = yield; var prevEma; while (true) { if (prevEma !== undefined && tick !== undefined) { prevEma = ((tick - prevEma) * exponent) + prevEma; tick = yield prevEma; } else { tick = yield; prevEma = sma.nextValue(tick); if (prevEma !== undefined) tick = yield prevEma; } } }); this.generator = genFn(); this.generator.next(); this.generator.next(); priceArray.forEach((tick) => { var result = this.generator.next(tick); if (result.value != undefined) { this.result.push(this.format(result.value)); } }); } nextValue(price) { var result = this.generator.next(price).value; if (result != undefined) return this.format(result); } ; } WEMA.calculate = wema; export function wema(input) { Indicator.reverseInputs(input); var result = new WEMA(input).result; if (input.reversedInput) { result.reverse(); } Indicator.reverseInputs(input); return result; }