Skip to content

Cryptocurrency Exchange Websocket Data Feed Handler

License

Notifications You must be signed in to change notification settings

maxmon/cryptofeed

 
 

Repository files navigation

Cryptocurrency Exchange Feed Handler

License Python Build Status 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.

Installation

Note: cryptofeed requires Python 3.7+

pip install cryptofeed

or a safer installation:

python3 -m pip install --user --upgrade cryptofeed

To install Cryptofeed along with all its optional dependencies in one bundle:

pip install cryptofeed[all]

See more options, explanations and Pipenv usage in INSTALL.md.

Examples

Please see the examples for more code samples and the documentation for more information about the library usage. The FAQ contains a few oddities/gotchas as well as answers to common questions.

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), L2_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(pairs=['BTC-USDT'], channels=[TRADES], callbacks=trade_cb))
fh.add_feed(Gemini(pairs=['BTC-USD', 'ETH-USD'], channels=[TRADES, L2_BOOK], callbacks=gemini_cb))

fh.run()

To see an example of an application using cryptofeed to aggregate and store cryptocurrency data to a database, please look at Cryptostore.

Supported exchanges

Supported aggregated crypto data providers

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(pair, bid, bid_size, ask, ask_size, bid_feed, ask_feed):
    print(f'Pair: {pair} 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:

  • 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
  • VOLUME
  • FUNDING
  • 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 receive both create two feedhandler objects. Not all exchanges are supported, as some exchanges send complete books on every update.
  • OPEN_INTEREST - Open interest data.

Aggregated data from provider is available in channel:

  • TRANSACTIONS - On-chain transactions.
  • MARKET_INFO - current aggregated price, market cap, volume (in USD, BTC or ETH currency), total and circulating supply, as well as community data (twitter, reddit, facebook...) and scores (coingecko, developper, community...)

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 (v1 and v2)
  • MongoDB
  • Kafka
  • Elastic Search
  • RabbitMQ
  • PostgreSQL
  • GCP Pub/Sub

Rest API

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

Future Work

There are a lot of planned features, new exchanges, etc planned! If you'd like to discuss ongoing development please join the slack 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 contribtors my thanks!

About

Cryptocurrency Exchange Websocket Data Feed Handler

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%