mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-09 16:28:06 +00:00
73 lines
2.5 KiB
JavaScript
73 lines
2.5 KiB
JavaScript
"use strict";
|
|
|
|
const ccxt = require ('../../ccxt')
|
|
|
|
const exchange = new ccxt.binance ();
|
|
|
|
const symbols = [ 'BTC/USDT', 'ETH/USDT', 'ADA/USDT'];
|
|
// start from i.e. 01 february 2022
|
|
// you can use milliseconds integer or also parse uniform datetime string, i.e. exchange.parse8601 ('2020-02-01T00:00:00Z')
|
|
const fromTimestamp = 1643659200000;
|
|
const tillTimestamp = exchange.milliseconds ();
|
|
const timeframe = '1h';
|
|
const itemsLimit = 1000;
|
|
const fetchMethod = 'fetchOHLCV'; // if using swap exchanges, you can also use fetchMarkOHLCV, fetchIndexOHLCV, fetchPremiumIndexOHLCV
|
|
|
|
async function myDataFetch (symbol) {
|
|
|
|
await exchange.loadMarkets ();
|
|
|
|
// get the duration of one timeframe period in milliseconds
|
|
const duration = exchange.parseTimeframe (timeframe) * 1000;
|
|
console.log ('Fetching', symbol, timeframe, 'candles', 'from', exchange.iso8601 (fromTimestamp), 'to', exchange.iso8601 (tillTimestamp), '...');
|
|
|
|
let result = [];
|
|
let since = fromTimestamp;
|
|
do {
|
|
|
|
try {
|
|
|
|
const candles = await exchange[fetchMethod] (symbol, timeframe, since, itemsLimit);
|
|
|
|
const message = '[' + symbol + '] Fetched ' + candles.length + ' ' + timeframe + ' candles since ' + exchange.iso8601 (since);
|
|
|
|
if (candles.length) {
|
|
|
|
const first = candles[0];
|
|
const last = candles[candles.length - 1];
|
|
console.log ( message, ' | first', exchange.iso8601 (first[0]), ' | last', exchange.iso8601 (last[0]) );
|
|
|
|
// store your candles to a database or to a file here
|
|
// ...
|
|
result = result.concat (candles);
|
|
since = last[0] + duration // next start from last candle timestamp + duration
|
|
|
|
} else {
|
|
console.log ( message, ' | moving into next period');
|
|
since = since + duration * itemsLimit; // next start from the current period's end
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
console.log (symbol, e.constructor.name, e.message, ' Taking small pause...');
|
|
await exchange.sleep (2000);
|
|
// retry on next iteration
|
|
}
|
|
|
|
} while (since + duration <= tillTimestamp)
|
|
|
|
console.log (symbol + ' completed !');
|
|
return result;
|
|
}
|
|
|
|
|
|
|
|
async function checkAllSymbols() {
|
|
// download in parallel
|
|
await Promise.all (symbols.map (symbol => myDataFetch (symbol)));
|
|
// you can also do one by one (but that is not much optimal)
|
|
//for (const symbol of symbols) {
|
|
// const data = await myDataFetch (symbol);
|
|
}
|
|
checkAllSymbols();
|