Freqtrade 提示交易对不可用(pair is not available)时怎么排查?
2026/9/9 13:23:46 网站建设 项目流程

Freqtrade 提示交易对不可用(pair is not available)时怎么排查?

【免费下载链接】freqtradeFree, open source crypto trading bot项目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade

在 Freqtrade 中运行 dry-run、live 或下载数据时,如果日志出现类似 “this pair is not available” / “Pair X not available” 的报错,说明 bot 没有把配置里写的交易对识别为交易所上可交易的市场。Freqtrade 遵循 ccxt 的命名约定,官方文档明确指出:在错误的市场类型下使用了错误的命名约定,通常就会导致 bot 无法识别交易对,并抛出 “this pair is not available” 之类的错误。排查的核心任务只有一件事:确认你写进配置的交易对,在对应交易所、对应交易模式下真实存在且处于 active 状态,并且命名格式与交易模式匹配。

报错的两个来源条件

在 exchange 实现中,fetch_ticker()等调用在访问市场前会做如下检查:

if pair not in self.markets or self.markets[pair].get("active", False) is False: raise ExchangeError(f"Pair {pair} not available")

也就是说,触发该报错只有两种情况,排查时应逐一对应:

  1. 交易所市场列表里根本没有这个 pair——通常是命名格式写错(例如把现货 pair 当成期货 pair 写,或 base/quote 顺序颠倒);
  2. 市场存在但active标志为 False——即交易所当前暂停交易该市场。

后面两个小节分别针对这两种情况给出核对方法。

先核对交易对的命名格式

bot-basics 给出了两种市场的标准命名:

交易模式命名格式示例
Spot(现货)base/quoteETH/USDT
Futures(期货)base/quote:settleETH/USDT:USDT

把配置pairs里的每个条目对照上表检查一遍:

  • 如果你的 bot 跑在现货模式,条目必须是base/quote,不能带:USDT后缀;
  • 如果跑在期货模式,条目必须带结算币后缀,例如ETH/USDT:USDT
  • 注意区分 quote 和 base:XRP/USDTXRP是 base,USDT是 quote,顺序写反会得到一个不存在于市场列表的字符串,落入上述第一种情况。

另外要交叉检查 quote 币种:Freqtrade 中 pair 的 quote 币种由配置项stake_currency决定(见 utils.md 的 “List pairs/list markets” 一节)。如果stake_currencyUSDT,而pairs里写了XRP/BTC,即使该市场在交易所存在,也不属于你配置的交易范围,应改成与 stake 一致的 quote。

用 list-pairs 确认 pair 是否存在且 active

命名核对无误后,用freqtrade list-pairs直接查询交易所实际可交易的 pair 列表。该子命令的完整参数见 commands/list-pairs.md,常用用法如下:

# 按配置文件中的交易所查询,按 quote 币种过滤,输出 JSON freqtrade list-pairs -c config_binance.json --quote USDT --print-json

不带配置文件时可以用--exchange直接指定交易所,并建议加上--trading-mode区分市场类型:

freqtrade list-pairs --exchange binance --trading-mode futures --quote USDT --print-list

判断结果:

  • 默认输出(只列 active pair)中能看到该 pair:pair 存在且可交易,报错多半来自配置里写错的命名——回到上一步,把pairs条目改成列表中的精确字符串(大小写、分隔符都要一致)。
  • 默认输出中看不到,但加上-a/--all后能看到:市场存在但当前非 active(即active为 False),这是实现中触发Pair {pair} not available的直接条件。此时属于交易所侧暂停交易,需要等市场恢复或更换交易对。
  • 加上-a仍然看不到:该命名在这家交易所/该交易模式下不存在,属于命名或交易所选错,回到命名核对。

-a选项的说明原文:“Print all pairs or market symbols. By default only active ones are shown.”

如果你通过 Docker 部署,不需要进入容器,可以直接运行只读查询(来自 docker_quickstart 的示例形式):

docker run --rm freqtradeorg/freqtrade:stable list-pairs --exchange binance --quote BTC --print-json

其他会影响该报错的已知情况

  • Hyperliquid 的 HIP-3 pair 命名不同:exchanges.md 指出 HIP-3 的 pair 名称与常规 pair 略有差异,并明确建议用list-pairs子命令获取指定 dex 下所有 pair 的正确命名。在 Hyperliquid 上遇到此类报错时,应以list-pairs输出为准,而不是按习惯拼写。
  • 极小价格的市场可能被标记为不可交易:utils.md 说明当市场最小可交易价格小于1e-110.00000000001)时,pair 可能以 untradeable 形式列出。若list-pairs结果中该 pair 处于这种状态,说明它实际无法用于下单。
  • 动态 pairlist 配置问题:如果pairs不是手写而是由动态 pairlist 插件生成,可以先用test-pairlist子命令测试 pairlist 配置(utils.md 的 “Test pairlist” 一节),确认生成结果里是否包含目标 pair。

排查结论与验证

按上面的顺序走完,成功条件很明确:

  1. pairs配置中的条目与list-pairs(不加-a的默认输出)中列出的 active pair 完全一致,命名格式与trading_mode匹配;
  2. 重新运行原命令(tradedownload-data等),不再出现 “not available” 报错。

若默认列表查不到而-a能查到,则该市场当前不 active,属于交易所侧状态,无法通过改配置解决;若加-a也查不到,则必须更换 pair 名称或交易模式。list-pairslist-markets的参数完全相同,后者列出的是全部 market(含不含/的符号),当需要确认交易所对该市场使用了什么符号形式时,可以用list-markets对照查看。

【免费下载链接】freqtradeFree, open source crypto trading bot项目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询