trading-signals
Version:
Technical indicators to run technical analysis with JavaScript / TypeScript.
45 lines • 1.61 kB
JavaScript
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(this.#closes, replace, candle.close, this.interval);
pushUpdate(this.#highs, replace, candle.high, this.interval);
pushUpdate(this.#lows, replace, candle.low, this.interval);
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