SuperAPI AI 工具集

cryptofeed

数据与分析

查看项目

更新于 10-15 08:56

技能介绍

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(完整概览与示例)。