bmoscon/cryptofeed

Python

Cryptocurrency Exchange Websocket Data Feed Handler

pythontradingmarket-datacryptocurrencybitcoinexchangewebsocketscoinbasebinanceinfluxdbasynciowebsocket
Star Growth
Stars
2.9k
Forks
764
Weekly Growth
+6
Issues
1
1k2k
Jan 2018Nov 2020Oct 2023Sep 2026
ArtifactsPyPI
README

Cryptocurrency Exchange Feed Handler

License Python 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. 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 coroutine functions, each taking the
# normalized object and the timestamp cryptofeed received the message at:
#
#     async def trade(t, receipt_timestamp):
#         print(f'{t.exchange} {t.symbol} {t.side} {t.amount} @ {t.price}')
#
# a callback must be async - wrap a synchronous one in cryptofeed.callback.ExecutorCallback
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()

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


async 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 public data channels from exchanges

  • 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.

Backends

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

Supported Backends:

  • Redis (Sorted Sets, Streams and Keys)
  • ZeroMQ
  • UDP Sockets
  • TCP Sockets
  • Unix Domain Sockets
  • InfluxDB v2
  • MongoDB
  • Kafka
  • PostgreSQL
  • QuestDB

Data Capture and Replay

Cryptofeed can record data from data feeds to standard pcap files for later replay

from cryptofeed import FeedHandler

# `record` is a pcap file path or a directory
fh = FeedHandler(record='sample_data/')
fh.add_feed('COINBASE', symbols=['BTC-USD'], channels=[TRADES, L2_BOOK], callbacks=...)
fh.run()

examples/record.py wraps this into a small recording tool. The pcaps are zstandaard compressed by default. Wireshark and tshark open these files natively and playback decompresses transparently. Metadata is stored in .meta.json.

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 .

Performance

Measured on Python 3.14.6 based on throughput over real recorded exchange traffic.

Operation Result
Trade construct / to_dict / from_dict 102 ns / 214 ns / 277 ns
Ticker / Candle / Funding construct 70 ns / 118 ns / 141 ns
Book single level update / delete / top-of-book read 89 ns / 124 ns / 140 ns
Book to_dict, 10 / 100 levels per side 2.4 µs / 22.2 µs
Checksum, Kraken / OKX format (200 levels) 2.0 µs / 6.1 µs
JSON decode with Decimal (msgspec / stdlib fallback) 1.39M / 0.60M msg/s
JSON encode to str / bytes 4.65M / 5.25M msg/s
Message handler, Kraken / Bybit / KuCoin / Kraken Futures 161k / 134k / 122k / ~100k frames/s

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
Related repositories
donnemartin/system-design-primer

Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.

PythonPyPIinterviewOtherprogrammingdevelopment
368.6k58.3k
vinta/awesome-python

The definitive list that answers "I want to do X in Python, which tool should I use?"

PythonPyPIawesomeOtherawesomepython
awesome-python.com
319.2k28.7k
practical-tutorials/project-based-learning

Curated list of project-based tutorials

PythonPyPItutorialMIT Licensetutorialproject
282.5k36.2k
TheAlgorithms/Python

All Algorithms implemented in Python

PythonPyPIinterviewMIT Licensepythonalgorithm
thealgorithms.github.io/Python/
224.4k51k
tensorflow/tensorflow

An Open Source Machine Learning Framework for Everyone

C++Apache License 2.0tensorflowmachine-learning
tensorflow.org
199.3k76.3k
yt-dlp/yt-dlp

A feature-rich command-line audio/video downloader

PythonPyPIcliThe Unlicenseyoutube-dlpython
discord.gg/H5MNcFW63r
189.7k16.5k
Significant-Gravitas/AutoGPT

AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.

PythonPyPIOtheraiopenai
agpt.co
187.2k46k
CyC2018/CS-Notes

:books: 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计

interviewalgorithmleetcode
cyc2018.xyz
185.9k50.8k
521xueweihan/HelloGitHub

:octocat: 分享 GitHub 上有趣、入门级的开源项目。Share interesting, entry-level open source projects on GitHub.

PythonPyPIawesomegithubhellogithub
hellogithub.com
175.3k12.7k
huggingface/transformers

🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.

PythonPyPIApache License 2.0nlpnatural-language-processing
huggingface.co/transformers
165k34.5k
langgenius/dify

Build Agentic workflows, RAG pipelines, with rich AI model and tool support on one collaborative workspace. Deploy on cloud, VPC, or self-hosted, so teams move from prototype to production without rebuilding the stack.

TypeScriptnpmskillOtheraigpt
dify.ai
154.9k24.5k
langchain-ai/langchain

The agent engineering platform.

PythonPyPIlibraryMIT Licenseaianthropic
docs.langchain.com/langchain/
145.9k24.4k