Cryptocurrency Exchange Feed Handler with synthetic NBBO
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
cryptofeed Add volume weighted average price to OHLCV aggregator Feb 20, 2019
docs Update Feb 10, 2019
examples Add volume weighted average price to OHLCV aggregator Feb 20, 2019
tests fix unit tests Feb 16, 2019
tools More clean up in tools and tests Jan 19, 2019
.gitignore Gdax api (#35) Sep 24, 2018
.travis.yml Update travis to test on 3.7 Feb 20, 2019 Update Feb 16, 2019
LICENSE Update copyrights Jan 4, 2019 Update Feb 16, 2019 version tweak Feb 10, 2019

Cryptocurrency Exchange Feed Handler

License Python Build Status Codacy Badge PyPi

Handles multiple cryptocurrency exchange data feeds and returns normalized and standardized results to client registered callbacks for events like trades, book updates, ticker updates, etc.

Please see the examples for more code samples.

from cryptofeed import FeedHandler

fh = FeedHandler()

# ticker, trade, and book are user defined functions that
# will be called when ticker, trade and book updates are received
ticker_cb = {TICKER: TickerCallback(ticker)}
trade_cb = {TRADES: TradeCallback(trade)}
gemini_cb = {TRADES: TradeCallback(trade), L3_BOOK: BookCallback(book)}

fh.add_feed(Coinbase(pairs=['BTC-USD'], channels=[TICKER], callbacks=ticker_cb)
fh.add_feed(Bitfinex(pairs=['BTC-USD'], channels=[TICKER], callbacks=ticker_cb)
fh.add_feed(Poloniex(channels=['USDT-BTC'], callbacks=trade_cb))
fh.add_feed(Gemini(pairs=['BTC-USD'], callbacks=gemini_cb)

Supports the following exchanges:

  • Bitfinex
  • Coinbase
  • Poloniex
  • Gemini
  • HitBTC
  • Bitstamp
  • BitMEX
  • Kraken
  • Binance
  • EXX
  • Huobi

Also provides a synthetic NBBO (National Best Bid/Offer) feed that aggregates the best bids and asks from the user specified feeds.

from cryptofeed.feedhandler import FeedHandler
from cryptofeed.exchanges import Coinbase, Bitfinex, HitBTC

def nbbo_ticker(pair, bid, ask, bid_feed, ask_feed):
    print('Pair: {} Bid: {} Bid Feed: {} Ask: {} Ask Feed: {}'.format(pair,

fh = FeedHandler()
fh.add_nbbo([Coinbase, Bitfinex, HitBTC], ['BTC-USD'], nbbo_ticker)

Supported Channels

Cryptofeed supports the following channels:

  • L2_BOOK - Price aggregated sizes. Some exchanges provide the entire depth, some provide a subset.
  • L3_BOOK - Price aggregated orders. Like the L2 book, some exchanges may only provide partial depth.
  • TRADES - Note this reports the taker's side, even for exchanges that report the maker side
  • BOOK_DELTA - Subscribed to with L2 or L3 books, receive book deltas rather than the entire book on updates. Full updates will be periodically sent on the L2 or L3 channel. If BOOK_DELTA is enabled, only L2 or L3 book can be enabled, not both. To received both create two feedhandler objects. Not all exchanges support, as some exchanges send complete books on every update.


Cryptofeeds supports backend callbacks that will write directly to storage or other interfaces

Supported Backends:

  • Redis
  • Arctic
  • ZeroMQ
  • UDP Sockets
  • TCP Sockets
  • Unix Domain Sockets
  • InfluxDB
  • MongoDB

Rest API

Cryptofeed supports some REST interfaces for retrieving historical data and placing orders. See the rest package.

Planned Work

Future Feeds

  • CEX
  • BTCC
  • Many more...


Continue to build out rest endpoints and standardize exchange interfaces and data

Additional Callback Methods / Backends

  • Postgres
  • RabbitMQ