-
-
Notifications
You must be signed in to change notification settings - Fork 8.7k
build ohlcv many symbols
github-actions[bot] edited this page Jun 11, 2026
·
2 revisions
'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();(If the page is not being rendered for you, you can refer to the mirror at https://docs.ccxt.com/)
- Install
- Examples
- Manual
- CCXT Pro
- Contributing
- Supported Exchanges
- Exchanges By Country
- API Spec By Method
- FAQ
- Changelog
- Awesome
- API Spec by Exchange
- fetchCurrencies
- alpaca
- apex
- ascendex
- aster
- backpack
- bigone
- binance
- bingx
- bit2c
- bitbank
- bitbns
- bitfinex
- bitflyer
- bitget
- bithumb
- bitmart
- bitmex
- bitopro
- bitrue
- bitso
- bitstamp
- bitteam
- bittrade
- bitvavo
- blockchaincom
- blofin
- btcbox
- btcmarkets
- btcturk
- bullish
- bybit
- bydfi
- cex
- coinbase
- coinbaseexchange
- coinbaseinternational
- coincheck
- coinex
- coinmate
- coinmetro
- coinone
- coinsph
- coinspot
- cryptocom
- cryptomus
- deepcoin
- delta
- deribit
- derive
- digifinex
- dydx
- exmo
- extended
- foxbit
- gate
- gemini
- grvt
- hashkey
- hibachi
- hitbtc
- hollaex
- htx
- hyperliquid
- independentreserve
- indodax
- kraken
- krakenfutures
- kucoin
- fetchBidsAsks
- latoken
- lbank
- lighter
- luno
- mercado
- mexc
- modetrade
- ndax
- novadax
- okx
- onetrading
- p2b
- pacifica
- paradex
- paymium
- phemex
- poloniex
- tokocrypto
- toobit
- upbit
- weex
- whitebit
- woo
- woofipro
- xt
- zaif
- fetchStatus