You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何CCXT中load_markets().keys()与fetch_tickers()返回数量不一致?

问题分析与解决方案

核心原因

  • load_markets(True)会加载Bybit平台所有可交易市场,涵盖现货、永续合约、交割合约、期权、杠杆交易等全品类交易对,因此数量达到2542。
  • fetch_tickers()默认仅请求Bybit API返回的热门/主力交易对(通常是现货主流币种对),并非全量交易对——这是平台API的默认限制,CCXT的封装逻辑遵循该规则,演示模式也不例外。

解决方案

若需获取全量交易对的tickers,可采用以下两种方式:

  1. 指定目标交易对列表:加载全市场后,筛选出对应品类的交易对,再传入fetch_tickers:
    async def debug():
        exchange = ccxt.bybit({'enableRateLimit': True})  # 建议开启限速避免触发API限制
        markets = await exchange.load_markets(True)
        # 筛选出所有现货交易对(可替换为swap/future等品类)
        target_markets = [symbol for symbol, info in markets.items() if info['type'] == 'spot']
        tickers = await exchange.fetch_tickers(target_markets)
        print(len(target_markets))
        print(len(tickers))
        await exchange.close()
    asyncio.run(debug())
    
  2. 调用品类专属接口:CCXT针对不同交易品类提供了专门的ticker获取方法,例如:
    • 永续合约:fetch_tickers(exchange.symbols_by_type['swap'])
    • 交割合约:fetch_tickers(exchange.symbols_by_type['future'])
    • 期权:fetch_option_tickers()

补充说明

Bybit公开API对无参数的tickers接口调用有返回数量限制,仅返回流动性较好的热门交易对,目的是降低API负载与数据传输量。若需全量数据,必须明确指定交易对列表或品类。

内容的提问来源于stack exchange,提问作者kapedalex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 21:20:59