Freqtrade list-exchanges 命令详解:如何查看与筛选可用交易所
Freqtrade 通过 list-exchanges 子命令展示当前环境中可用(或 ccxt 库已知)的所有交易所,并标注官方支持状态、缺失 API 能力与交易模式。本文完整覆盖该命令的全部选项与输出解读,并结合源码说明“一个交易所为何可用/被标记为不可用”的判定逻辑,读完你既能熟练使用该命令做环境体检,也能理解 Freqtrade 对交易所能力矩阵(ccxt has 标志)的底层校验机制。
命令与选项总览
list-exchanges 是一个不连接交易所、不需要 API 密钥的纯本地工具命令,其完整帮助输出如下(继承自 list-exchanges.md):
usage: freqtrade list-exchanges [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH] [-1] [-a]
[--trading-mode {spot,margin,futures}]
[--dex-exchanges]
options:
-h, --help show this help message and exit
-1, --one-column Print output in one column.
-a, --all Print all exchanges known to the ccxt library.
--trading-mode, --tradingmode {spot,margin,futures}
Select Trading mode
--dex-exchanges Print only DEX exchanges.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--logfile, --log-file FILE
Log to the file specified. Special values are:
'syslog', 'journald'. See the documentation for more
details.
-V, --version show program's version number and exit
-c, --config PATH Specify configuration file (default:
`userdir/config.json` or `config.json` whichever
exists). Multiple --config options may be used. Can be
set to `-` to read config from stdin.
-d, --datadir, --data-dir PATH
Path to the base directory of the exchange with
historical backtesting data. To see futures data, use
trading-mode additionally.
--userdir, --user-data-dir PATH
Path to userdata directory.
专属选项的源码定义位于 cli_options.py,共 4 个:
| 选项 | 作用 | 说明 |
|---|---|---|
-1, --one-column |
单列输出 | 仅打印交易所类名,每行一个,便于脚本化(如 for 循环枚举) |
-a, --all |
打印 ccxt 库已知的所有交易所 | 包括已知不可用的“坏”交易所,并显示 Valid 列与缺失原因 |
--trading-mode |
按交易模式过滤 | 取值 spot、margin、futures,只展示支持该模式的交易所 |
--dex-exchanges |
仅打印 DEX 交易所 | 只展示 ccxt 中标记为 dex 的去中心化交易所 |
此外还有一个隐藏的内部调试选项 --ccxt-show-futures-options-exchanges(SUPPRESS),用于额外展示 ccxt 期货能力兼容性的 Futures Reason 列,不在 --help 中显示。
通用的 -v、--no-color、--logfile、-V、-c、-d、--userdir 等参数在所有子命令中通用,其中 -c 支持传入 - 从标准输入读取配置,详见 main.md。
默认输出:只列“可用”交易所
不带 -a 时,命令过滤掉 valid is False 的交易所,标题为 Exchanges available for Freqtrade (N exchanges):,表格包含以下列:
- Exchange Name:交易所显示名;官方支持的交易所显示名加绿色加粗并带
(Supported)斜体标注; - Class Name:ccxt 类名;若是别名(alias),名字与类名会被划线删除,并提示
-> use <真实类名>; - Markets:支持的交易模式列表(如
spot, isolated futures,由该交易所类的_supported_trading_mode_margin_pairs决定);DEX 交易所会在模式前加粗的DEX:前缀; - Reason:缺失 ccxt 能力的原因说明(仅在缺失时非空);
- Futures Reason(隐藏选项启用时):期货能力缺失说明。
不可用(valid=False)的行整体以红色样式渲染。输出示例(摘自 utils.md,内容可能随时随版本变化):
$ freqtrade list-exchanges
Exchanges available for Freqtrade:
Exchange name Supported Markets Reason
------------------ ----------- ---------------------- ------------------------------------------------------------------------
binance Official spot, isolated futures
bybit spot, isolated futures
gate Official spot, isolated futures
htx Official spot
huobi spot
kraken Official spot
okx Official spot, isolated futures
!!! note
上表输出已缩减以保清晰,受支持与可用交易所列表会随版本变化。带有 missing opt: 的条目可能需要特殊配置(例如缺少 fetchTickers 时改用 orderbook),理论上可用但不作保证。
-a 全量输出:Valid 列与缺失原因
加上 -a 后,命令列出 ccxt 库中所有交易所,标题变为 All exchanges supported by the ccxt library (N exchanges):,并额外给出 Valid 列,用于区分“ccxt 认识、但 Freqtrade 认为不可用”的交易所:
$ freqtrade list-exchanges -a
All exchanges supported by the ccxt library:
Exchange name Valid Supported Markets Reason
------------------ ------- ----------- ---------------------- ---------------------------------------------------------------------------------
binance True Official spot, isolated futures
bitflyer False spot missing: fetchOrder. missing opt: fetchTickers.
bybit True spot, isolated futures
gate True Official spot, isolated futures
htx True Official spot
kraken True Official spot
okx True Official spot, isolated futures
Reason 列的取值有两种前缀,含义不同:
missing: <method>—— 缺少必需能力,交易所直接判定为不可用;missing opt: <method>—— 缺少可选能力,理论上仍可用但体验受限(如缺失fetchTickers时 VolumePairList 等插件无法工作)。
底层判定机制:validate_exchange 与能力矩阵
命令入口是 list_commands.py 中的 start_list_exchanges:它调用 list_available_exchanges(args["list_exchanges_all"]) 拿到交易所清单,再按 trading_mode、dex_exchanges 过滤,最后用 rich 渲染表格。真正的数据生产逻辑在 exchange_utils.py 的 list_available_exchanges 与 validate_exchange:
- 交易所集合来源:
-a时取ccxt.exchanges全集;否则调用available_exchanges(),即validate_exchange判定可用的子集。 - 别名解析:
validate_exchange会实例化ccxt.pro(WebSocket 优先)或ccxt.async_support中的交易所对象,读取其has能力标志。 - 必需能力校验(common.py 的
EXCHANGE_HAS_REQUIRED):fetchOrder(可用fetchOpenOrder/fetchClosedOrder替代)、fetchL2OrderBook(可用fetchTicker替代)、cancelOrder、createOrder、fetchBalance、fetchOHLCV;- 任一必需方法缺失 →
valid=False,并写入missing: ...原因。
- 可选能力校验(
EXCHANGE_HAS_OPTIONAL):fetchMyTrades、createLimitOrder、createMarketOrder、fetchOrderBook、fetchL2OrderBook、fetchTicker、fetchTickers、fetchTrades、fetchOrders、watchOHLCV等,缺失只产生missing opt:提示。 - 黑名单(
BAD_EXCHANGES):如bitmex(“Various reasons”)、probit(需要定期调用signIn())、poloniex(fetch_order无法同时取回开/平仓)、kucoinfutures/poloniexfutures/binancecoinm(不支持的期货交易所)——命中即强制valid=False并附具体原因。 - 支持级别标注:类名经
MAP_EXCHANGE_CHILDCLASS(如gateio→gate、huboi→htx、kucoineu→kucoin)映射后,若属于SUPPORTED_EXCHANGES白名单(当前包含 binance、binanceus、binanceusdm、bingx、bitget、bybit、bybiteu、gate、gateeu、htx、hyperliquid、kraken、krakenfutures、okx、myokx 等),且不是别名,则supported=True,输出中标记(Supported)。 - 交易模式:若存在对应的 Freqtrade 交易所子类(
freqtrade/exchange/目录下每个子类的_supported_trading_mode_margin_pairs声明),trade_modes会被更新为该类实际支持的模式组合;否则默认只有spot。--trading-mode过滤即基于此字段。 - DEX 标记:直接读取 ccxt 交易所对象的
dex属性,--dex-exchanges据此过滤。
每个条目最终是一个 ValidExchangesType 结构,字段定义见 valid_exchanges_type.py:name、classname、valid、supported、comment、comment_futures、dex、is_alias、alias_for、trade_modes。
实战用法
1. 快速确认某交易所是否可用
freqtrade list-exchanges
2. 排查某交易所为何不可用
freqtrade list-exchanges -a | grep -i bitflyer
Reason 列会直接给出缺失的 ccxt 方法,可据此判断是升级 ccxt 版本解决,还是放弃该交易所。
3. 只看支持期货的交易所 / 只看 DEX
freqtrade list-exchanges --trading-mode futures
freqtrade list-exchanges --dex-exchanges
4. 单列输出驱动批量操作:-1 仅输出类名,可直接喂给 shell 循环。例如枚举所有可用交易所的时间框架(示例来自 utils.md):
for i in $(freqtrade list-exchanges -1); do freqtrade list-timeframes --exchange $i; done
5. 重定向到文件时禁用颜色:
freqtrade list-exchanges -a --no-color > exchanges.txt
小结与相关命令
list-exchanges 的价值在于它是 Freqtrade 交易所兼容性的“单一事实来源”:可用性由 ccxt has 能力矩阵(必需 + 可选)、内置黑名单和 SUPPORTED_EXCHANGES 白名单共同决定,而 -a 参数让你能同时看到“可用/不可用”的全貌与具体原因。围绕它,可以进一步用 list-timeframes 查看各交易所时间框架、用 list-pairs/list-markets 查看交易对与币种信息,更多工具命令说明见 utils.md。
适用前提与限制:该命令只依赖本地安装的 ccxt 库版本做静态检查,不发起任何网络请求,因此其结论随 ccxt 版本变化;具体命令行为以当前仓库源码(list_commands.py、exchange_utils.py)为准。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00