UNPKG

@sunrise1002/tats

Version:

Techincal Indicators written in javascript

68 lines (67 loc) 2.08 kB
import { Indicator, IndicatorInput } from '../indicator/indicator'; /** * Created by AAravindan on 5/8/16. */ /** * Created by AAravindan on 5/8/16. */ "use strict"; export class TrueRangeInput extends IndicatorInput { } ; export class TrueRange extends Indicator { constructor(input) { super(input); var lows = input.low; var highs = input.high; var closes = input.close; var format = this.format; if (lows.length != highs.length) { throw ('Inputs(low,high) not of equal size'); } this.result = []; this.generator = (function* () { var current = yield; var previousClose, result; while (true) { if (previousClose === undefined) { previousClose = current.close; current = yield result; } result = Math.max(current.high - current.low, isNaN(Math.abs(current.high - previousClose)) ? 0 : Math.abs(current.high - previousClose), isNaN(Math.abs(current.low - previousClose)) ? 0 : Math.abs(current.low - previousClose)); previousClose = current.close; if (result != undefined) { result = format(result); } current = yield result; } })(); this.generator.next(); lows.forEach((tick, index) => { var result = this.generator.next({ high: highs[index], low: lows[index], close: closes[index] }); if (result.value != undefined) { this.result.push(result.value); } }); } ; nextValue(price) { return this.generator.next(price).value; } ; } TrueRange.calculate = truerange; export function truerange(input) { Indicator.reverseInputs(input); var result = new TrueRange(input).result; if (input.reversedInput) { result.reverse(); } Indicator.reverseInputs(input); return result; } ;