Back to Ccxt

Many Exchanges Many Orderbooks Throttled

wiki/examples/py/many-exchanges-many-orderbooks-throttled.md

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

import ccxt.pro
from asyncio import run, gather, sleep


orderbooks = {}


def handle_all_orderbooks(orderbooks):
   print('We have the following orderbooks:')
   for exchange_id, orderbooks_by_symbol in orderbooks.items():
       for symbol in orderbooks_by_symbol.keys():
           orderbook = orderbooks_by_symbol[symbol]
           print(ccxt.pro.Exchange.iso8601(orderbook['timestamp']), exchange_id, symbol, orderbook['asks'][0], orderbook['bids'][0])


async def handling_loop(orderbooks):
   delay = 5
   while True:
       await sleep(delay)
       handle_all_orderbooks(orderbooks)


async def symbol_loop(exchange, symbol):
   while True:
       try:
           orderbook = await exchange.watch_order_book(symbol)
           orderbooks[exchange.id] = orderbooks.get(exchange.id, {})
           orderbooks[exchange.id][symbol] = orderbook
       except Exception as e:
           print(str(e))
           # raise e  # uncomment to break all loops in case of an error in any one of them
           break  # you can break just this one loop if it fails


async def exchange_loop(exchange_id, symbols):
   exchange = getattr(ccxt.pro, exchange_id)()
   loops = [symbol_loop(exchange, symbol) for symbol in symbols]
   await gather(*loops)
   await exchange.close()


async def main():
   symbols = ['BTC/USDT', 'ETH/BTC']
   # symbols = []
   exchanges = {
       'okex': symbols + ['ETH/USDT'],
       'binance': symbols,
   }
   loops = [exchange_loop(exchange_id, symbols) for exchange_id, symbols in exchanges.items()]
   loops += [handling_loop(orderbooks)]
   await gather(*loops)


run(main())