Cryptofeed 是一个用于处理加密货币交易所数据馈送的 Python 库,提供标准化、统一格式的实时市场数据。
用途
Cryptofeed 主要用于获取和处理来自加密货币交易所的实时市场数据,适用于构建算法交易系统、多交易所价格监控、订单簿深度分析、成交流分析等场景。它通过 WebSocket 流式传输数据,并在 WebSocket 不可用时回退到 REST 轮询,同时具备自动重连处理能力。
主要能力
多交易所支持:支持 40 多家交易所,包括 Binance(现货、期货、交割、美国)、Coinbase、Kraken(现货、期货)、Bitfinex、Gemini、OKX、Bybit、Huobi(现货、DM、Swap)、Gate.io(现货、期货)、KuCoin、Deribit、BitMEX、dYdX,以及 AscendEX、Bequant、bitFlyer、Bithumb、Bitstamp、Blockchain.com、Bit.com、Bitget、Crypto.com、Delta、EXX、FMFW.io、HitBTC、Independent Reserve、OKCoin、Phemex、Poloniex、ProBit、Upbit 等。
数据频道:
- 公开市场数据:L1_BOOK(订单簿最优档)、L2_BOOK(按价格聚合的数量)、L3_BOOK(按价格聚合的订单)、TRADES(已执行成交,吃单方)、TICKER(价格行情更新)、FUNDING(资金费率)、OPEN_INTEREST(持仓量统计)、LIQUIDATIONS(清算事件)、INDEX(指数价格)、CANDLES(K线数据)。
- 需认证的私有频道:ORDER_INFO(订单状态更新)、TRANSACTIONS(充值与提现)、BALANCES(钱包余额更新)、FILLS(用户已执行成交)。
数据标准化:Cryptofeed 对所有交易所的数据进行标准化,提供一致的符号格式、时间戳处理、数据结构和频道名称。
NBBO 聚合:可跨多个交易所聚合数据,创建合成的全国最优买卖报价(NBBO)馈送,用于发现套利机会。
后端集成:支持将数据直接写入多种存储系统,无需编写自定义集成代码,包括 Redis(Streams 和 Sorted Sets)、Arctic(时序数据库)、ZeroMQ、InfluxDB v2、MongoDB、Kafka、RabbitMQ、PostgreSQL、QuasarDB、GCP Pub/Sub、QuestDB 以及 UDP/TCP/Unix 套接字。
使用方式
安装:
# 基本安装
pip install cryptofeed
# 安装所有可选后端
pip install cryptofeed[all]
基本用法:
from cryptofeed import FeedHandler
from cryptofeed.exchanges import Coinbase, Bitfinex
from cryptofeed.defines import TICKER, TRADES, L2_BOOK
# 定义回调
def ticker_callback(data):
print(f"Ticker: {data}")
def trade_callback(data):
print(f"Trade: {data}")
# 创建 feed handler
fh = FeedHandler()
# 添加交易所馈送
fh.add_feed(Coinbase(
symbols=['BTC-USD'],
channels=[TICKER],
callbacks={TICKER: ticker_callback}
))
fh.add_feed(Bitfinex(
symbols=['BTC-USD'],
channels=[TRADES],
callbacks={TRADES: trade_callback}
))
# 开始接收数据
fh.run()
NBBO 用法:
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: {bid:.2f} ({bid_size:.6f}) from {bid_feed}')
print(f'Ask: {ask:.2f} ({ask_size:.6f}) from {ask_feed}')
f = FeedHandler()
f.add_nbbo([Coinbase, Kraken, Gemini], ['BTC-USD'], nbbo_update)
f.run()
多交易所价格监控示例:
fh = FeedHandler()
fh.add_feed(Binance(symbols=['BTC-USDT'], channels=[TICKER], callbacks=ticker_cb))
fh.add_feed(Coinbase(symbols=['BTC-USD'], channels=[TICKER], callbacks=ticker_cb))
fh.add_feed(Kraken(symbols=['BTC-USD'], channels=[TICKER], callbacks=ticker_cb))
fh.run()
订单簿深度分析示例:
def book_callback(book, receipt_timestamp):
print(f"Bids: {len(book.book.bids)} | Asks: {len(book.book.asks)}")
fh.add_feed(Coinbase(
symbols=['BTC-USD'],
channels=[L2_BOOK],
callbacks={L2_BOOK: book_callback}
))
成交流分析示例:
def trade_callback(trade, receipt_timestamp):
print(f"{trade.exchange} - {trade.symbol}: {trade.side} {trade.amount} @ {trade.price}")
fh.add_feed(Binance(
symbols=['BTC-USDT', 'ETH-USDT'],
channels=[TRADES],
callbacks={TRADES: trade_callback}
))
适用场景
- 实时加密货币市场数据获取
- 实现来自加密货币交易所的 WebSocket 流式传输
- 构建算法交易系统
- 处理订单簿更新、成交或行情数据
- 连接 40 多家加密货币交易所
- 使用标准化的交易所 API
- 实现市场数据后端(Redis、MongoDB、Kafka 等)
限制与要求
- 需要 Python 3.8 或更高版本。
- 通过 pip 或从源码安装。
- 可选依赖需按需安装对应后端。
- 主要使用 WebSocket 获取实时数据,WebSocket 不可用时回退到 REST 轮询。
参考资源
- 仓库:https://github.com/bmoscon/cryptofeed
- PyPI:https://pypi.python.org/pypi/cryptofeed
- 示例:https://github.com/bmoscon/cryptofeed/tree/master/examples
- 文档:https://github.com/bmoscon/cryptofeed/blob/master/docs/README.md
- Discord:https://discord.gg/zaBYaGAYfR
- 相关:Cryptostore(容器化数据存储)
该技能包含 references/ 目录下的文档:getting_started.md(安装与基本用法)、README.md(完整概览与示例)。