UNPKG

trading-signals

Version:

Technical indicators to run technical analysis with JavaScript / TypeScript.

45 lines 1.72 kB
import { TradingSignal, TrendIndicatorSeries } from '../../base/Indicator.js'; import { getMaximum } from '../../util/getMaximum.js'; import { getMinimum } from '../../util/getMinimum.js'; import { pushUpdate } from '../../util/pushUpdate.js'; export class ER extends TrendIndicatorSeries { #closes = []; #highs = []; #lows = []; interval; #trending; constructor(interval, { trending = 0.5 } = {}) { super(); this.interval = interval; this.#trending = trending; } getRequiredInputs() { return this.interval; } update(candle, replace) { pushUpdate({ array: this.#closes, item: candle.close, maxLength: this.interval, replace: replace }); pushUpdate({ array: this.#highs, item: candle.high, maxLength: this.interval, replace: replace }); pushUpdate({ array: this.#lows, item: candle.low, maxLength: this.interval, replace: replace }); if (this.#closes.length < this.interval) { return null; } const netChange = Math.abs(this.#closes[this.#closes.length - 1] - this.#closes[0]); const highestHigh = getMaximum(this.#highs); const lowestLow = getMinimum(this.#lows); const range = highestHigh - lowestLow; if (range === 0) { return this.setResult(0, replace); } return this.setResult(netChange / range, replace); } calculateSignalState(result) { if (result === null || result === undefined) { return TradingSignal.UNKNOWN; } if (result >= this.#trending) { return TradingSignal.BULLISH; } return TradingSignal.SIDEWAYS; } } //# sourceMappingURL=ER.js.map