Skip to main content

Cryptocurrency Exchange Feed Handler

License Python PyPi Codacy Badge

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. Utilizes websockets when possible, but can also poll data via REST endpoints if a websocket is not provided.

Supported exchanges

Basic Usage

Create a FeedHandler object and add subscriptions. For the various data channels that an exchange supports, you can supply callbacks for data events, or use provided backends (described below) to handle the data for you. Start the feed handler and you're done!

from cryptofeed import FeedHandler
# not all imports shown for clarity

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: ticker}
trade_cb = {TRADES: trade}
gemini_cb = {TRADES: trade, L2_BOOK: book}


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

fh.run()

Please see the examples for more code samples and the documentation for more information about the library usage.

For an example of a containerized application using cryptofeed to store data to a backend, please see Cryptostore.

National Best Bid/Offer (NBBO)

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

from cryptofeed import FeedHandler
from cryptofeed.exchanges import Coinbase, Gemini, Kraken


def nbbo_update(symbol, bid, bid_size, ask, ask_size, bid_feed, ask_feed):
    print(f'Pair: {symbol} Bid Price: {bid:.2f} Bid Size: {bid_size:.6f} Bid Feed: {bid_feed} Ask Price: {ask:.2f} Ask Size: {ask_size:.6f} Ask Feed: {ask_feed}')


def main():
    f = FeedHandler()
    f.add_nbbo([Coinbase, Kraken, Gemini], ['BTC-USD'], nbbo_update)
    f.run()

Supported Channels

Cryptofeed supports the following channels from exchanges:

Market Data Channels (Public)

  • L1_BOOK - Top of book
  • 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.
  • TICKER
  • FUNDING
  • OPEN_INTEREST - Open interest data.
  • LIQUIDATIONS
  • INDEX
  • CANDLES - Candlestick / K-Line data.

Authenticated Data Channels

  • ORDER_INFO - Order status updates
  • TRANSACTIONS - Real-time updates on account deposits and withdrawals
  • BALANCES - Updates on wallet funds
  • FILLS - User's executed trades

Backends

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

Supported Backends:

  • Redis (Streams and Sorted Sets)
  • Arctic
  • ZeroMQ
  • UDP Sockets
  • TCP Sockets
  • Unix Domain Sockets
  • InfluxDB v2
  • MongoDB
  • Kafka
  • RabbitMQ
  • PostgreSQL
  • QuasarDB
  • GCP Pub/Sub
  • QuestDB

Installation

Note: cryptofeed requires Python 3.12+

Cryptofeed can be installed from PyPi. (It's recommended that you install in a virtual environment of your choosing).

pip install cryptofeed

Cryptofeed has optional dependencies, depending on the backends used. You can install them individually, or all at once. To install Cryptofeed along with all its optional dependencies in one bundle:

pip install cryptofeed[all]

If you wish to clone the repository and work on it (development uses uv), run this from the root of the cloned repository:

uv sync

Alternatively, you can install from source in editable mode with pip:

pip install -e .

See more discussion of package installation in INSTALL.md.

Rest API

Cryptofeed supports some REST interfaces for retrieving real-time and historical data, as well as order placement and account management. These are integrated into the exchange classes directly. You can view the supported methods by calling the info() method on any exchange. The methods for interacting with the exchange RET endpoints exist in two flavors, the synchronous methods (suffixed with _sync) as well as the asynchronous which can be utilized with asyncio. For more information see the documentation.

Future Work

There are a lot of planned features, new exchanges, etc planned! If you'd like to discuss ongoing development, please join the discord or open a thread in the discussions in GitHub.

Contributing

Issues and PRs are welcomed!

Cryptofeed wouldn't be possible without the help of many contributors! I owe them and all other contributors my thanks!

Donations / Support

Support and donations are appreciated but not required. You can donate via GitHub Sponsors, or via the addresses below:

  • Bitcoin: bc1qm0kxz8hqacaglku5fjhfe9a5hjnuyfwk02lsyr
  • Ethereum: 0x690709FEe13eEce9E7852089BB2D53Ae5D073154

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cryptofeed-2.5.0.tar.gz (430.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

cryptofeed-2.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_34_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.34+ x86-64

cryptofeed-2.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_34_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.34+ x86-64

File details

Details for the file cryptofeed-2.5.0.tar.gz.

File metadata

  • Download URL: cryptofeed-2.5.0.tar.gz
  • Upload date:
  • Size: 430.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for cryptofeed-2.5.0.tar.gz
Algorithm Hash digest
SHA256 18d2f1e5d8d68854246925a989e21d2e9ee230fccbe0ff9906714ffcaf7153ee
MD5 774bac524d1537ba5365cf51de932134
BLAKE2b-256 3f9e2e49b5d1d3b5ee3b02ac90b5e98cc06d905a841cf27d5b4208c08ef17242

See more details on using hashes here.

File details

Details for the file cryptofeed-2.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for cryptofeed-2.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 32a5adee9fefcbb957b7a6ca53864c16ad6ab2d278a223d0fd7ed573ec7a2c1e
MD5 52187f7474bfd4c2c23f493c61a6dabf
BLAKE2b-256 6743a989b6d45e26d673b6d5eefbdfcb0c5f12a236a0327b6460d8464a83e643

See more details on using hashes here.

File details

Details for the file cryptofeed-2.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for cryptofeed-2.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 f535bfeb39b9fc316e367625772ae7f64164e3dc08d152e791090abdb28f82b5
MD5 5c01f656bdc08e527b7524cafa63b946
BLAKE2b-256 1fbdcdb858c4bcd5f3e0f15cf83c4912ef3fcda8f4635fca354782b06f876862

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2.5.0

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page