UNPKG

candlestick-convert

Version:

OHLCV Candlestick converter and batcher with Typescript support

73 lines 2.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.batchTicksToCandle = void 0; const batchTicksToCandle = (tradeData, interval = 60, includeOpenCandle = false, filterFn) => { interval *= Math.floor(1000); let result = []; // Tradedata Array check if (Array.isArray(tradeData)) { if (tradeData.length == 0) { return result; } } else { throw new Error("Tradedata is not an array!"); } // Sort Data to ascending tradeData.sort((a, b) => a.time - b.time); if (filterFn) { tradeData = tradeData.filter((e) => filterFn(e)); } // Buffer values let open = 0; let high = 0; let close = 0; let low = 0; let volume = 0; let timeOpen = 0; let previousClose = null; // TradeData [time,side,quantity,price,tradeId] // 0 1 2 3 4 5 for (let i = 0; i < tradeData.length; i++) { const trade = tradeData[i]; // Type convert trade.price = Number(trade.price); trade.quantity = Number(trade.quantity); trade.time = Number(trade.time) - (Number(trade.time) % interval); // First Trade if (i == 0) { timeOpen = trade.time; open = trade.price; low = trade.price; high = trade.price; close = trade.price; volume = trade.quantity; } // We are still in the CandleTime if (timeOpen == trade.time) { low = Math.min(trade.price, low); high = Math.max(trade.price, high); if (i > 0) { volume += trade.quantity; } close = trade.price; } else { result.push({ time: timeOpen, open, high, low, close, volume }); // Create new candle timeOpen = trade.time; open = previousClose || trade.price; low = trade.price; high = trade.price; close = trade.price; volume = trade.quantity; } previousClose = close; } if (previousClose && includeOpenCandle) { result.push({ time: timeOpen, open, high, low, close, volume }); } return result; }; exports.batchTicksToCandle = batchTicksToCandle; //# sourceMappingURL=tickToCandle.js.map