Back to Ccxt

Build Ohlcv Many Symbols

wiki/examples/js/build-ohlcv-many-symbols.md

4.5.532.3 KB
Original Source
javascript
'use strict';
import asTable from 'as-table';
import ccxt from '../../js/ccxt.js';
console.log('CCXT Version:', ccxt.version);
asTable.configure({ 'delimiter': ' | ' });
async function loop(exchange, symbol, timeframe, completeCandlesOnly = false) {
   const durationInSeconds = exchange.parseTimeframe(timeframe);
   const durationInMs = durationInSeconds * 1000;
   while (true) {
       try {
           const trades = await exchange.watchTrades(symbol);
           if (trades.length > 0) {
               const currentMinute = Math.floor(exchange.milliseconds() / durationInMs);
               let ohlcvc = exchange.buildOHLCVC(trades, timeframe);
               if (completeCandlesOnly) {
                   ohlcvc = ohlcvc.filter((candle) => Math.floor(candle[0] / durationInMs) < currentMinute);
               }
               if (ohlcvc.length > 0) {
                   console.log('Symbol:', symbol, 'timeframe:', timeframe);
                   console.log('-----------------------------------------------------------');
                   console.log(asTable(ohlcvc));
                   console.log('-----------------------------------------------------------');
               }
           }
       }
       catch (e) {
           console.log(symbol, e);
           // do nothing and retry on next loop iteration
           // throw e // uncomment to break all loops in case of an error in any one of them
           // break // you can also break just this one loop if it fails
       }
   }
}
async function main() {
   // select the exchange
   const exchange = new ccxt.pro.okx();
   if (exchange.has['watchTrades']) {
       await exchange.loadMarkets();
       // Change this value accordingly
       const timeframe = '1m';
       // arbitrary n symbols
       const selectedSymbols = ['BTC/USDT', 'LTC/USDT']; // or random 3 pairs: exchange.symbols.slice(0, 3);
       console.log(selectedSymbols);
       // Use this variable to choose if only complete candles ;
       // should be considered
       const completeCandlesOnly = true;
       await Promise.all(selectedSymbols.map((symbol) => loop(exchange, symbol, timeframe, completeCandlesOnly)));
   }
   else {
       console.log(exchange.id, 'does not support watchTrades yet');
   }
}
main();