trading-signals
Version:
Technical indicators to run technical analysis with JavaScript / TypeScript.
51 lines • 1.68 kB
JavaScript
import { TradingSignal, TrendIndicatorSeries } from '../../base/Indicator.js';
import { SMA } from '../../trend/SMA/SMA.js';
import { pushUpdate } from '../../util/pushUpdate.js';
export class VWMA extends TrendIndicatorSeries {
#candles = [];
#signalLine;
interval;
constructor(interval, SignalIndicator = SMA, signalInterval = interval) {
super();
this.interval = interval;
this.#signalLine = new SignalIndicator(signalInterval);
}
getRequiredInputs() {
return this.interval;
}
update(candle, replace) {
pushUpdate(this.#candles, replace, candle, this.interval);
if (this.#candles.length < this.interval) {
return null;
}
let sumPriceVolume = 0;
let sumVolume = 0;
for (const c of this.#candles) {
sumPriceVolume += c.close * c.volume;
sumVolume += c.volume;
}
if (sumVolume === 0) {
return null;
}
const vwma = sumPriceVolume / sumVolume;
this.#signalLine.update(vwma, replace);
return this.setResult(vwma, replace);
}
calculateSignalState(result) {
if (result === null || result === undefined) {
return TradingSignal.UNKNOWN;
}
const signalValue = this.#signalLine.getResult();
if (signalValue === null) {
return TradingSignal.SIDEWAYS;
}
if (result > signalValue) {
return TradingSignal.BULLISH;
}
if (result < signalValue) {
return TradingSignal.BEARISH;
}
return TradingSignal.SIDEWAYS;
}
}
//# sourceMappingURL=VWMA.js.map