UNPKG

trading-signals

Version:

Technical indicators to run technical analysis with JavaScript / TypeScript.

55 lines 1.96 kB
import { SMA } from '../../trend/SMA/SMA.js'; import { TradingSignal, TrendIndicatorSeries } from '../../base/Indicator.js'; import { pushUpdate } from '../../util/pushUpdate.js'; export class CG extends TrendIndicatorSeries { signal; prices = []; get isStable() { return this.signal.isStable; } interval; signalInterval; constructor(interval, signalInterval) { super(); this.interval = interval; this.signalInterval = signalInterval; this.signal = new SMA(signalInterval); } getRequiredInputs() { return this.signal.getRequiredInputs(); } calculateSignalState(result) { const hasResult = result !== null && result !== undefined; const signalValue = this.signal.getResult(); const hasSignal = signalValue !== null; const isAboveSignal = hasResult && hasSignal && result > signalValue; const isBelowSignal = hasResult && hasSignal && result < signalValue; switch (true) { case !hasResult || !hasSignal: return TradingSignal.UNKNOWN; case isAboveSignal: return TradingSignal.BULLISH; case isBelowSignal: return TradingSignal.BEARISH; default: return TradingSignal.SIDEWAYS; } } update(price, replace) { pushUpdate(this.prices, replace, price, this.interval); let nominator = 0; let denominator = 0; for (let i = 0; i < this.prices.length; ++i) { const price = this.prices[i]; nominator = nominator + price * (i + 1); denominator = denominator + price; } const cg = denominator > 0 ? nominator / denominator : 0; this.signal.update(cg, replace); if (this.signal.isStable) { return this.setResult(cg, replace); } return null; } } //# sourceMappingURL=CG.js.map