首页
/ freqtrade show-config 命令实战指南:一次性查看机器人合并后的最终配置

freqtrade show-config 命令实战指南:一次性查看机器人合并后的最终配置

2026-09-06 10:38:32作者:宣利权Counsellor

freqtrade 的配置由多个配置文件、CLI 参数和环境因素共同决定,出问题时很难一眼看出"最终生效的到底是什么"。show-config 子命令正是为这一痛点设计的:它按真实的配置加载逻辑走完一遍合并、校验流程,再把合并后的完整配置以 JSON 形式打印出来,同时默认对交易所密钥等敏感字段做脱敏处理。读完本文,你将掌握该命令的完整参数用法、多配置文件合并规则、敏感信息脱敏机制,以及其在源码中的实现链路,能把它作为排查配置问题(如配置未生效、密钥误泄露风险)的常用诊断手段。

show-config 命令的输出效果

一、命令定位与基本用法

show-config 是一个纯只读的"配置诊断"命令,不启动机器人、不连接交易所做交易,只负责回答一个问题:按当前参数,freqtrade 最终拿到的合并配置是什么

其官方帮助输出如下(见 show-config 文档):

usage: freqtrade show-config [-h] [--userdir PATH] [-c PATH]
                             [--show-sensitive]

options:
  -h, --help            show this help message and exit
  --userdir, --user-data-dir PATH
                        Path to userdata directory.
  -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.
  --show-sensitive      Show secrets in the output.

典型用法:

# 使用默认配置(userdir/config.json 或 config.json,取存在者)
freqtrade show-config

# 指定用户数据目录
freqtrade show-config --userdir user_data

# 显式指定一个或多个配置文件(多个时按顺序深度合并,后加载的覆盖先加载的)
freqtrade show-config -c config/base.json -c config/exchange.json

# 从 stdin 读取配置
freqtrade show-config -c - < config/test.json

# 连密钥一起显示(谨慎,输出可能落盘到终端历史/日志)
freqtrade show-config --show-sensitive

参数在源码中的注册位置:ARGS_SHOW_CONFIG 仅包含 user_data_dirconfigshow_sensitive 三个选项(见 arguments.py),随后在子命令解析器上注册 show-config 并把入口函数绑定为 start_show_config(见 arguments.py)。各参数的精确定义在 cli_options.py-c/--configaction="append",因此可重复传入;--userdir/--user-data-dir 同义)和 cli_options.py--show-sensitive 默认 False)。

二、命令行参数逐项解析

参数 说明 关键点
-h, --help 显示帮助信息并退出 标准 argparse 行为
--userdir, --user-data-dir PATH 用户数据目录(userdata)路径 影响默认配置文件与数据、策略目录的解析位置
-c, --config PATH 指定配置文件 默认为 userdir/config.jsonconfig.json(取存在者);可多次使用实现多文件合并;设为 - 时从 stdin 读取
--show-sensitive 在输出中显示密钥等敏感信息 默认脱敏;开启后完整打印

-c 的重复传入之所以能工作,是因为它声明为 action="append"(见 cli_options.py),最终收集为一个路径列表,交给配置加载器按序合并。

三、实现链路:从命令行到 JSON 输出

show-config 的入口函数 start_show_config 位于 build_config_commands.py,核心逻辑只有四步:

  1. RunMode.UTIL_EXCHANGE 运行模式、set_dry=False 调用 setup_utils_configuration(args, ...),得到合并后的完整配置 config
  2. 打印前缀文本 "Your combined configuration is:"
  3. 调用 sanitize_config(config["original_config"], show_sensitive=args.get("show_sensitive", False)) 对原始配置做脱敏;
  4. 使用 rich 库的 print_json 以带高亮的 JSON 形式输出。

其中 setup_utils_configuration(见 config_setup.py)是各工具子命令共享的配置准备入口:

configuration = Configuration(args, method)
config = configuration.get_config()
# ...
validate_config_consistency(config, preliminary=True)
return config

可以推断,show-config 走的是与 list-markets 等工具命令完全相同的配置管线,因此它打印出的配置就是这些命令真正消费的配置——这也是该命令诊断价值的关键:你看到的就是机器人"眼中"的配置。preliminary=True 的校验(config_validation.py)则会先做一轮配置一致性检查,配置本身存在矛盾时命令会直接报错而不是输出可疑内容。

四、敏感信息脱敏:REDACTED 机制

show-config 默认不会把你的密钥打到终端上。脱敏逻辑在 config_secrets.py,敏感键清单 _SENSITIVE_KEYS 覆盖以下字段(支持点号分隔的嵌套路径):

  • 交易所凭证:exchange.keyexchange.api_keyexchange.apiKeyexchange.secretexchange.passwordexchange.uidexchange.account_idexchange.accountIdexchange.wallet_addressexchange.walletAddressexchange.private_keyexchange.privateKey
  • 通知与 API:telegram.tokentelegram.chat_iddiscord.webhook_urlapi_server.passwordwebhook.url

sanitize_config 先对配置做深拷贝,再把命中的键值替换为字符串 "REDACTED";只有当显式传入 show_sensitive=True 时原样返回。对应的行为测试见 test_configuration.pytest_sanitize_config 分别验证了默认脱敏与 show_sensitive=True 两种路径)。

实战含义:

  • 默认输出可以直接粘贴到问题单、文档或终端共享场景中,不会泄露交易所 API 密钥、Telegram token、Webhook URL;
  • 需要确认密钥"确实被填对了"时,才使用 --show-sensitive,并留意输出可能被终端记录;
  • 该清单与 dry-run 模式下 remove_exchange_credentials(同文件 L52-L67)共享同一份敏感键定义,保证"打印时脱敏"与"dry-run 时清空"行为一致。

五、多配置文件合并规则

show-config 之所以能反映真实配置,是因为它复用了 freqtrade 完整的配置加载/合并机制(见 load_config.py):

  • 多个 -c 按序深度合并load_from_files 依次加载每个文件,用 deep_merge_dicts 合并,后加载的键值覆盖先加载的;所有已加载文件按倒序记录在最终配置的 config_files 字段中——show-config 的输出里因此天然附带一份"我到底加载了哪些文件"的清单,排查"配置没生效"时先检查这里;
  • add_config_files 支持文件内引用:某个配置文件里可以用 add_config_files 字段声明相对自身的子配置文件,加载器递归处理,且子文件路径相对父文件目录解析;
  • 循环保护:递归深度超过 5 层会抛出 ConfigurationError("Config loop detected."),防止配置文件互相引用导致死循环;
  • stdin 支持-c - 时立即从 sys.stdin 读取并直接返回(见 load_config.py),方便与管道/脚本组合,例如 jq ... | freqtrade show-config -c -
  • 无文件时的最小配置:若完全未指定配置文件,返回内置的 MINIMAL_CONFIG 深拷贝,因此 freqtrade show-config 不带 -c 也能得到一份合法的"最小 + 默认值"配置用于对照。

如果你不确定该从哪份配置入手,可以先看仓库自带的示例目录 config_examples/ 了解配置结构,再用 show-config 验证自己组合后的结果。

六、典型排障场景

  1. "为什么我的策略目录没被识别?" —— 运行 freqtrade show-config,检查输出中 user_data_dirstrategy_path 相关字段与 config_files 列表,确认实际加载的文件和目录基路径是否符合预期;
  2. "多份配置到底谁覆盖谁?" —— 按加载顺序把 -c 依次传入,show-config 输出的即深度合并后的最终值,无需手工 diff;
  3. "发出去的配置截图安全吗?" —— 默认输出已把 exchange.secrettelegram.token 等替换为 REDACTED,可直接分享;若发现某个密钥没被脱敏,对照 config_secrets.py 的清单确认键名拼写;
  4. 配置语法错误定位 —— 配置 JSON 损坏时,加载器会抛出带出错片段的 ConfigurationErrorload_config.py),提示你验证具体区段,而不是静默使用错误配置。

七、测试用例验证

  • test_commands.py 中的 test_start_show_config 通过 pargs = Arguments.parse_argvs(["show-config", ...]) 构造参数并直接调用 start_show_config,验证默认与带参两种调用下能正常输出合并配置;
  • test_configuration.py 中的 test_sanitize_config 验证了脱敏键被替换为 REDACTED、以及 show_sensitive=True 时配置原样返回的两条路径。

小结

show-config 是 freqtrade 命令行体系中成本最低的"配置 X 光":参数少(仅 --userdir-c--show-sensitive 三个选项),行为确定(复用与运行期一致的 setup_utils_configuration 管线),输出安全(默认脱敏)。把它纳入日常调试习惯——改完配置先 show-config 确认合并结果,再启动回测或实盘——能大幅减少"配置到底生没生效"类的排查时间。其入口实现见 build_config_commands.py,脱敏实现见 config_secrets.py,配置合并实现见 load_config.py,均可按路径在仓库中直接对照阅读。

登录后查看全文
热门项目推荐
相关项目推荐