binance-historical
Version:
Download historical klines from binance api
49 lines (48 loc) • 2.06 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getKline = getKline;
const axios_1 = __importDefault(require("axios"));
const utils_1 = require("./utils");
async function getKline(pair, interval, startDate, endDate, source = 'api', version = 'v3', limit = 1000) {
try {
if (startDate.getTime() > endDate.getTime()) {
throw new Error('Start date must be before end date');
}
const numberOfCall = (0, utils_1.calculateNumberOfCall)(interval, startDate.getTime(), endDate.getTime());
const numOfIterations = Math.ceil(numberOfCall / limit);
const divisions = (0, utils_1.divideInterval)(numOfIterations, startDate.getTime(), endDate.getTime());
let data = [];
for (let i = 0; i < divisions.length; i++) {
if (i + 1 !== divisions.length) {
const start = divisions[i];
const end = divisions[i + 1];
const url = `https://${source}.binance.com/${source}/${version}/klines?symbol=${pair}&interval=${interval}&startTime=${start}&endTime=${end}&limit=${limit}`;
const response = await axios_1.default.get(url);
data = [...data, ...response.data];
}
}
if (data.length)
--data.length;
return data.map((item) => ({
openTime: item[0],
open: item[1],
high: item[2],
low: item[3],
close: item[4],
volume: item[5],
closeTime: item[6],
quoteAssetVolume: item[7],
trades: item[8],
takerBaseAssetVolume: item[9],
takerQuoteAssetVolume: item[10],
ignored: item[11],
}));
}
catch (error) {
console.error(error);
throw new Error('Error with binance-api, we cannot get klines for this period or pair 😅');
}
}