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")也就是说,触发该报错只有两种情况,排查时应逐一对应:
- 交易所市场列表里根本没有这个 pair——通常是命名格式写错(例如把现货 pair 当成期货 pair 写,或 base/quote 顺序颠倒);
- 市场存在但
active标志为 False——即交易所当前暂停交易该市场。
后面两个小节分别针对这两种情况给出核对方法。
先核对交易对的命名格式
bot-basics 给出了两种市场的标准命名:
| 交易模式 | 命名格式 | 示例 |
|---|---|---|
| Spot(现货) | base/quote | ETH/USDT |
| Futures(期货) | base/quote:settle | ETH/USDT:USDT |
把配置pairs里的每个条目对照上表检查一遍:
- 如果你的 bot 跑在现货模式,条目必须是
base/quote,不能带:USDT后缀; - 如果跑在期货模式,条目必须带结算币后缀,例如
ETH/USDT:USDT; - 注意区分 quote 和 base:
XRP/USDT中XRP是 base,USDT是 quote,顺序写反会得到一个不存在于市场列表的字符串,落入上述第一种情况。
另外要交叉检查 quote 币种:Freqtrade 中 pair 的 quote 币种由配置项stake_currency决定(见 utils.md 的 “List pairs/list markets” 一节)。如果stake_currency是USDT,而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-11(0.00000000001)时,pair 可能以 untradeable 形式列出。若list-pairs结果中该 pair 处于这种状态,说明它实际无法用于下单。 - 动态 pairlist 配置问题:如果
pairs不是手写而是由动态 pairlist 插件生成,可以先用test-pairlist子命令测试 pairlist 配置(utils.md 的 “Test pairlist” 一节),确认生成结果里是否包含目标 pair。
排查结论与验证
按上面的顺序走完,成功条件很明确:
pairs配置中的条目与list-pairs(不加-a的默认输出)中列出的 active pair 完全一致,命名格式与trading_mode匹配;- 重新运行原命令(
trade、download-data等),不再出现 “not available” 报错。
若默认列表查不到而-a能查到,则该市场当前不 active,属于交易所侧状态,无法通过改配置解决;若加-a也查不到,则必须更换 pair 名称或交易模式。list-pairs和list-markets的参数完全相同,后者列出的是全部 market(含不含/的符号),当需要确认交易所对该市场使用了什么符号形式时,可以用list-markets对照查看。
【免费下载链接】freqtradeFree, open source crypto trading bot项目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考