Freqtrade list-markets 命令详解:查询交易所全部交易市场的参数、输出格式与源码实现

发布时间:2026/9/7 5:01:54
Freqtrade list-markets 命令详解:查询交易所全部交易市场的参数、输出格式与源码实现 Freqtrade list-markets 命令详解查询交易所全部交易市场的参数、输出格式与源码实现【免费下载链接】freqtradeFree, open source crypto trading bot项目地址: https://gitcode.com/GitHub_Trending/fr/freqtradelist-markets是 Freqtrade 提供的市场数据查询工具用于打印指定交易所上所有「交易品种market」的清单包括现货、杠杆与永续合约市场并附带杠杆上限、最小下单金额等关键字段。本文完整覆盖该命令的全部命令行参数与输出格式并结合 list_commands.py 与 exchange.py 等源码剖析其过滤逻辑与数据列的生成原理帮助你在策略开发前期快速筛选候选交易对。命令定位list-markets 与 list-pairs 的区别list-markets与list-pairs共用同一套参数选项ARGS_LIST_PAIRS在 arguments.py 中分别注册为两个子命令list-marketsset_defaults(funcpartial(start_list_markets, pairs_onlyFalse))—— 打印全部市场含合约、杠杆等非可交易对list-pairsset_defaults(funcpartial(start_list_markets, pairs_onlyTrue))—— 仅打印 Freqtrade 判定为可交易的交易对。两者的差异由start_list_markets的第二个参数pairs_only控制该参数会透传给底层exchange.get_markets()的tradable_only过滤条件见下文源码分析。因此需要评估全交易所市场结构时用list-markets需要快速拿到可配置进策略的交易对清单时用list-pairs。完整命令行参数说明官方文档 list-markets.md 收录了该命令的完整帮助输出以下逐条说明其用法与取值usage: freqtrade list-markets [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH] [-d PATH] [--userdir PATH] [--exchange EXCHANGE] [--print-list] [--print-json] [-1] [--print-csv] [--base BASE_CURRENCY [BASE_CURRENCY ...]] [--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]] [-a] [--trading-mode {spot,margin,futures}]市场筛选参数参数说明--exchange EXCHANGE指定交易所名称。仅在未提供配置文件时有效如果提供了 config则从 config 的exchange配置读取--base BASE_CURRENCY [BASE_CURRENCY ...]按基础币种过滤支持空格分隔的多币种列表如--base BTC ETH--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]按计价币种过滤如--quote USDT-a,--all打印全部市场符号。默认只显示 active活跃市场加上该参数后已下架/暂停的市场也会展示输出格式参数参数说明--print-list以逗号分隔的列表形式打印市场符号附带汇总行默认为表格形式--print-json以 JSON 数组形式打印市场符号便于脚本解析-1,--one-column每行一个符号的纯文本输出适合管道处理--print-csv以 CSV 格式打印完整市场数据含表头可直接导入表格工具--trading-mode {spot,margin,futures}选择交易模式影响交易所初始化行为如需查看期货数据需配合--datadir与配置通用参数Common arguments参数说明-v,--verbose详细日志级别-vv更多-vvv全部--no-color禁用输出着色重定向到文件时有用--logfile,--log-file FILE日志写入文件支持syslog、journald特殊值-V,--version打印版本号后退出-c,--config PATH指定配置文件默认为userdir/config.json或config.json中先存在者可多次指定合并-表示从 stdin 读取-d,--datadir, --data-dir PATH历史回测数据基础目录查看期货数据时需额外指定--trading-mode--userdir, --user-data-dir PATH指定用户数据目录这些选项在 cli_options.py 中以Arg结构定义--print-list、--print-json、--print-csv均为store_true开关--base/--quote使用nargs因此接受空格分隔的多币种。典型用法示例查看 Binance 上全部 USDT 计价市场默认仅活跃市场freqtrade list-markets --config config.json --quote USDT只保留 BTC 作为基础币种且包含非活跃市场freqtrade list-markets --config config.json --base BTC --all不依赖配置文件直接指定交易所等价于测试/CI 场景freqtrade list-markets --exchange binance --print-list导出为 CSV 供进一步分析freqtrade list-markets --config config.json --print-csv markets.csv管道中仅取市场符号列表freqtrade list-markets --config config.json --one-column # 或 JSON freqtrade list-markets --config config.json --print-json单元测试 test_commands.py 中test_list_markets验证了这些行为未提供交易所配置时会抛出OperationalException: This command requires a configured exchange...提供--exchange binance时输出类似Exchange Binance has 12 active markets的汇总行加--all后同一测试数据集中市场数从 12 变为 14印证了「默认只显示 active 市场」的行为。源码剖析市场过滤与输出列生成核心调用链命令入口在 start_list_markets整体流程为setup_utils_configuration(args, RunMode.UTIL_EXCHANGE)初始化配置——由于是UTIL_EXCHANGE运行模式该命令会真实连接交易所拉取市场元数据区别于纯本地工具命令ExchangeResolver.load_exchange(config, validateFalse)加载交易所实例读取--alllist_pairs_all决定active_only读取--base/--quote得到币种过滤列表调用exchange.get_markets(base_currencies..., quote_currencies..., tradable_onlypairs_only, active_onlyactive_only)获取市场字典并按符号排序。过滤逻辑get_marketsExchange.get_markets 是实际的过滤实现它对 ccxt 加载的 markets 字典做链式过滤def get_markets( self, base_currencies: list[str] | None None, quote_currencies: list[str] | None None, spot_only: bool False, margin_only: bool False, futures_only: bool False, tradable_only: bool True, active_only: bool False, ) - dict[str, Any]:--base/--quote分别匹配v[base]、v[quote]字段tradable_only即list-pairs的pairs_onlyTrue通过market_is_tradable过滤——该检查要求 base/quote 非空并校验价格精度不能过低exchange.py各交易所可覆写此方法增加特判例如 kraken.py 会排除 darkpool 交易对active_only由 market_is_active 判定规则为active字段未显式设为False即视为活跃缺失或为 true 均算活跃。表格输出列的生成表格模式默认输出的列由 start_list_markets 硬编码每一列的取值来源如下列名来源Id/Symbol/Base/Quoteccxt 市场对象字段Activemarket_is_active(v)Spot/Margin/Future分别由exchange.market_is_spot/margin/future判定命中才显示对应标签Leverageexchange.get_max_leverage(symbol, 20)——以 20 USDT 权益估算该市场当前可获取的最大杠杆现货模式恒为 1.0见 get_max_leverageMin Stakeexchange.get_min_pair_stake_amount(...)价格取自实时 ticker 的last/ask价结果保留 8 位小数其中market_is_future的判定条件是swap类型且linear为真exchange.py即只有线性永续合约会被标为Future。输出格式的分支逻辑代码末尾按优先级选择输出分支list_commands.py--print-list→ 打印汇总行: SYMBOL1, SYMBOL2, ...单行--one-column→ 每行一个符号--print-json→ 使用rapidjson输出符号数组--print-csv→ 用csv.DictWriter输出表头 完整 9 列数据默认 →print_rich_table渲染 Rich 表格。值得注意选择机器可读格式one-column/json/csv时汇总行改为写入日志logger.info而非 stdout保证 stdout 只有纯净的数据流——这正是这些格式适合接入脚本管道的设计意图。适用前提与限制该命令需要在线连接交易所RunMode.UTIL_EXCHANGE无法离线使用--exchange仅在未提供--config时生效二者同时给出时以 config 为准--exchange参数帮助文本亦明确注明 Only valid if no config is provided。Min Stake依赖实时 ticker 数据若某市场无 ticker 记录价格会回退为 0.0该列数值仅供参考。Leverage列以 20 的权益值估算与 get_max_leverage 的实际杠杆档位规则一致现货模式下恒显示 1.0。结合 list-timeframes 等兄弟命令可覆盖「交易所支持什么市场 → 什么时间周期 → 配置哪些交易对」的策略前期调研全流程。小结freqtrade list-markets以极少参数覆盖了市场调研的常见需求--base/--quote做币种过滤--all放开活跃限制--print-list/--print-json/--one-column/--print-csv四种输出形式兼顾人类阅读与自动化管道。从源码看其核心是Exchange.get_markets的一组正交过滤器币种、tradable、active、交易模式输出表格中的Leverage与Min Stake列则复用了下单前的风控计算逻辑因此该命令的输出生成结果可直接用于评估候选交易对是否符合最小仓位约束。【免费下载链接】freqtradeFree, open source crypto trading bot项目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考