trading-signals
Version:
Technical indicators to run technical analysis with JavaScript / TypeScript.
45 lines • 1.72 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({ 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