UNPKG

trading-signals

Version:

Technical indicators to run technical analysis with JavaScript / TypeScript.

52 lines 1.86 kB
import { TechnicalIndicator, TradingSignal } from '../../base/Indicator.js'; import { ATR } from '../../volatility/ATR/ATR.js'; export class VolatilityStop extends TechnicalIndicator { #atr; #previous = null; #previousSnapshot = null; interval; multiplier; constructor({ interval = 5, multiplier = 3.5 } = {}) { super(); this.interval = interval; this.multiplier = multiplier; this.#atr = new ATR(interval); } getRequiredInputs() { return this.#atr.getRequiredInputs(); } update(candle, replace) { if (replace) { this.#previous = this.#previousSnapshot; } else { this.#previousSnapshot = this.#previous; } const atr = this.#atr.update(candle, replace); if (atr === null) { return null; } const { close } = candle; const loss = this.multiplier * atr; const previous = this.#previous; let result; if (previous === null) { result = { signal: TradingSignal.BULLISH, stop: close - loss }; } else if (close > previous.stop && previous.close > previous.stop) { result = { signal: TradingSignal.BULLISH, stop: Math.max(previous.stop, close - loss) }; } else if (close < previous.stop && previous.close < previous.stop) { result = { signal: TradingSignal.BEARISH, stop: Math.min(previous.stop, close + loss) }; } else if (close > previous.stop) { result = { signal: TradingSignal.BULLISH, stop: close - loss }; } else { result = { signal: TradingSignal.BEARISH, stop: close + loss }; } this.#previous = { close, stop: result.stop }; return (this.result = result); } } //# sourceMappingURL=VolatilityStop.js.map