gdax-assistant
Version:
A library of useful tools and classes for working with information gathered via the Coinbase-Pro (Gdax) API
153 lines (128 loc) • 5.17 kB
JavaScript
const Candle = require("./GdaxCandle");
const Indicators = require("./Indicators");
class GdaxChart {
constructor(RawCandleData) {
//most recent is 0
this.candles = [];
for (let i = 0; i < RawCandleData.length; i++) {
let c;
if (i < RawCandleData.length - 1)
c = new Candle(RawCandleData[i], RawCandleData[i + 1]);
else c = new Candle(RawCandleData[i]);
this.candles.push(c);
}
}
Adx(length, look_back, offset) {
let lb = look_back === undefined ? Infinity : look_back;
let ofs = offset === undefined ? 0 : Math.abs(offset);
let targetTimeFrame = this.candles.slice(ofs, this.candles.length);
return Indicators.Adx(targetTimeFrame, length, lb);
}
Dmi(length, look_back, offset) {
return this.Adx(length, look_back, offset);
}
Aroon(length, offset) {
let targetTimeFrame = this.PreProcess(length, offset);
return Indicators.Aroon(targetTimeFrame);
}
Atr(length, look_back, offset) {
let lb = look_back === undefined ? Infinity : look_back;
let ofs = offset === undefined ? 0 : Math.abs(offset);
let targetTimeFrame = this.candles.slice(ofs, this.candles.length);
return Indicators.Atr(targetTimeFrame, length, lb);
}
BollingerBands(length, stdv, offset, lhoc) {
let targetTimeFrame = this.PreProcess(length, offset);
return Indicators.BollingerBands(targetTimeFrame, stdv, lhoc);
}
Ema(length, look_back, offset, lhoc) {
let lb = look_back === undefined ? Infinity : look_back;
let ofs = offset === undefined ? 0 : Math.abs(offset);
let targetTimeFrame = this.candles.slice(ofs, this.candles.length);
return Indicators.Ema(targetTimeFrame, length, lb, lhoc);
}
Highest(length, offset, lhoc) {
let targetTimeFrame = this.PreProcess(length, offset);
return Indicators.Highest(targetTimeFrame, lhoc);
}
Ichimoku(tenkanLength, kijunLength, periodLength, clouOffset) {
let targetTimeFrame = this.PreProcess(
Math.max(periodLength + clouOffset),
0,
);
return Indicators.Ichimoku(
targetTimeFrame,
tenkanLength,
kijunLength,
periodLength,
clouOffset,
);
}
KST(length, offset, lhoc) {
let targetTimeFrame = this.PreProcess(54, offset);
return Indicators.KST(targetTimeFrame, lhoc);
}
IndexOfHighest(length, offset, lhoc) {
let targetTimeFrame = this.PreProcess(length, offset);
return Indicators.IndexOfHighest(targetTimeFrame, lhoc);
}
IndexOfLowest(length, offset, lhoc) {
let targetTimeFrame = this.PreProcess(length, offset);
return Indicators.IndexOfLowest(targetTimeFrame, lhoc);
}
Lowest(length, offset, lhoc) {
let targetTimeFrame = this.PreProcess(length, offset);
return Indicators.Lowest(targetTimeFrame, lhoc);
}
Macd(short_length, long_length, signal, look_back, offset, lhoc) {
let sl = short_length === undefined ? 12 : short_length;
let ll = long_length === undefined ? 26 : long_length;
let sig = signal === undefined ? 9 : signal;
let lb = look_back === undefined ? Infinity : look_back;
let ofs = offset === undefined ? 0 : Math.abs(offset);
let targetTimeFrame = this.candles.slice(ofs, this.candles.length);
return Indicators.Macd(targetTimeFrame, sl, ll, sig, lb, lhoc);
}
Percentile(length, percentile, offset, lhoc) {
let targetTimeFrame = this.PreProcess(length, offset);
return Indicators.Percentile(targetTimeFrame, lhoc, percentile);
}
PivotPoints(offset) {
let targetTimeFrame = this.PreProcess(1, offset);
return Indicators.PivotPoints(targetTimeFrame);
}
Rsi(length, look_back, offset) {
let lb = look_back === undefined ? Infinity : look_back;
let ofs = offset === undefined ? 0 : Math.abs(offset);
let targetTimeFrame = this.candles.slice(ofs, this.candles.length);
return Indicators.Rsi(targetTimeFrame, length, lb);
}
Rms(length, offset, lhoc) {
let targetTimeFrame = this.PreProcess(length, offset);
return Indicators.Rms(targetTimeFrame, lhoc);
}
Roi(length, offset, lhoc) {
let targetTimeFrame = this.PreProcess(length, offset);
return Indicators.Roi(targetTimeFrame, lhoc);
}
Sma(length, offset, lhoc) {
let targetTimeFrame = this.PreProcess(length, offset);
return Indicators.Sma(targetTimeFrame, lhoc);
}
SrBands(smoothing, bucketSize, length, offset, lhoc) {
let targetTimeFrame = this.PreProcess(length, offset);
return Indicators.SrLevels(targetTimeFrame, smoothing, bucketSize, lhoc);
}
Vwap(length, offset) {
let targetTimeFrame = this.PreProcess(length, offset);
return Indicators.Vwap(targetTimeFrame);
}
PreProcess(length, ofs) {
if (length === undefined) length = this.candles.length;
if (length > this.candles.length) throw "Not enough candles";
let offset = ofs === undefined ? 0 : Math.abs(ofs);
let targetTimeFrame = this.candles.slice(offset, offset + length);
return targetTimeFrame;
}
}
module.exports = GdaxChart;