Back to Ccxt

Async Fetch Order Book From Many Exchanges

wiki/examples/py/async-fetch-order-book-from-many-exchanges.md

4.5.521.3 KB
Original Source
python
# -*- coding: utf-8 -*-

import asyncio
import os
import sys
from pprint import pprint


import ccxt.async_support as ccxt  # noqa: E402


exchange_ids = [ 'binance', 'kucoin', 'huobipro' ]
symbol = 'ETH/BTC'

async def loop(exchange_id, symbol):

   exchange_class = getattr(ccxt, exchange_id)
   exchange = exchange_class()
   orderbook = {}
   try:
       await exchange.load_markets()
       # exchange.verbose = True  # uncomment for debugging purposes
       orderbook = await exchange.fetch_order_book(symbol)
   except Exception as e:
       print(type(e).__name__, str(e))
   await exchange.close()
   return exchange.extend (orderbook, {
       'exchange_id': exchange_id,
       'symbol': symbol,
   })


async def run(exchange_ids, symbol):
   coroutines = [loop(exchange_id, symbol) for exchange_id in exchange_ids]
   return await asyncio.gather(*coroutines)


main = run(exchange_ids, symbol)
results = asyncio.run(main)
for result in results:
   bids = result['bids']
   asks = result['asks']
   print(
       result['exchange_id'],
       result['symbol'],
       'top bid', bids[0], 'of', len(bids), 'bids,',
       'top ask', asks[0], 'of', len(asks), 'asks'
   )