UNPKG

ccxt-compiled

Version:

A JavaScript / Python / PHP cryptocurrency trading library with support for 90+ exchanges

100 lines (67 loc) 3.06 kB
"use strict"; const asTable = require ('as-table') , log = require ('ololog').noLocate , ansi = require ('ansicolor').nice , ccxt = require ('../../ccxt.js') let printSupportedExchanges = function () { log ('Supported exchanges:', ccxt.exchanges.join (', ').green) } let printUsage = function () { log ('Usage: node', process.argv[1], 'exchange'.green, 'symbol'.yellow, 'depth'.cyan) printSupportedExchanges () } let printOrderBook = async (id, symbol, depth) => { // check if the exchange is supported by ccxt let exchangeFound = ccxt.exchanges.indexOf (id) > -1 if (exchangeFound) { log ('Instantiating', id.green, 'exchange') // instantiate the exchange by id let exchange = new ccxt[id] ({ enableRateLimit: true }) // load all markets from the exchange let markets = await exchange.loadMarkets () // // output a list of all market symbols // log (id.green, 'has', exchange.symbols.length, 'symbols:', exchange.symbols.join (', ').yellow) if (symbol in exchange.markets) { const market = exchange.markets[symbol] const pricePrecision = market.precision ? market.precision.price : 8 const amountPrecision = market.precision ? market.precision.amount : 8 // Object.values (markets).forEach (market => log (market)) // make a table of all markets // const table = asTable.configure ({ delimiter: ' | ' }) (Object.values (markets)) // log (table) const priceVolumeHelper = color => ([price, amount]) => ({ price: price.toFixed (pricePrecision)[color], amount: amount.toFixed (amountPrecision)[color], }) const cursorUp = '\u001b[1A' const tableHeight = depth * 2 + 4 // bids + asks + headers log (' ') // empty line while (true) { const orderbook = await exchange.fetchOrderBook (symbol) log (symbol.green, exchange.iso8601 (exchange.milliseconds ())) log (asTable.configure ({ delimiter: ' | '.dim, right: true }) ([ ... orderbook.asks.slice (0, depth).reverse ().map (priceVolumeHelper ('red')), // { price: '--------'.dim, amount: '--------'.dim }, ... orderbook.bids.slice (0, depth).map (priceVolumeHelper ('green')), ])) log (cursorUp.repeat (tableHeight)) } } else { log.error ('Symbol', symbol.bright, 'not found') } } else { log ('Exchange ' + id.red + ' not found') printSupportedExchanges () } } (async function main () { if (process.argv.length > 4) { const id = process.argv[2] const symbol = process.argv[3].toUpperCase () const depth = parseInt (process.argv[4]) await printOrderBook (id, symbol, depth) } else { printUsage () } process.exit () }) ()