trading-signals
Version:
Technical indicators to run technical analysis with JavaScript / TypeScript.
55 lines • 1.96 kB
JavaScript
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