freqtrade show-config 命令实战指南:一次性查看机器人合并后的最终配置
freqtrade 的配置由多个配置文件、CLI 参数和环境因素共同决定,出问题时很难一眼看出"最终生效的到底是什么"。show-config 子命令正是为这一痛点设计的:它按真实的配置加载逻辑走完一遍合并、校验流程,再把合并后的完整配置以 JSON 形式打印出来,同时默认对交易所密钥等敏感字段做脱敏处理。读完本文,你将掌握该命令的完整参数用法、多配置文件合并规则、敏感信息脱敏机制,以及其在源码中的实现链路,能把它作为排查配置问题(如配置未生效、密钥误泄露风险)的常用诊断手段。
一、命令定位与基本用法
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_dir、config、show_sensitive 三个选项(见 arguments.py),随后在子命令解析器上注册 show-config 并把入口函数绑定为 start_show_config(见 arguments.py)。各参数的精确定义在 cli_options.py(-c/--config 为 action="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.json 或 config.json(取存在者);可多次使用实现多文件合并;设为 - 时从 stdin 读取 |
--show-sensitive |
在输出中显示密钥等敏感信息 | 默认脱敏;开启后完整打印 |
-c 的重复传入之所以能工作,是因为它声明为 action="append"(见 cli_options.py),最终收集为一个路径列表,交给配置加载器按序合并。
三、实现链路:从命令行到 JSON 输出
show-config 的入口函数 start_show_config 位于 build_config_commands.py,核心逻辑只有四步:
- 以
RunMode.UTIL_EXCHANGE运行模式、set_dry=False调用setup_utils_configuration(args, ...),得到合并后的完整配置config; - 打印前缀文本
"Your combined configuration is:"; - 调用
sanitize_config(config["original_config"], show_sensitive=args.get("show_sensitive", False))对原始配置做脱敏; - 使用 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.key、exchange.api_key、exchange.apiKey、exchange.secret、exchange.password、exchange.uid、exchange.account_id、exchange.accountId、exchange.wallet_address、exchange.walletAddress、exchange.private_key、exchange.privateKey - 通知与 API:
telegram.token、telegram.chat_id、discord.webhook_url、api_server.password、webhook.url
sanitize_config 先对配置做深拷贝,再把命中的键值替换为字符串 "REDACTED";只有当显式传入 show_sensitive=True 时原样返回。对应的行为测试见 test_configuration.py(test_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 验证自己组合后的结果。
六、典型排障场景
- "为什么我的策略目录没被识别?" —— 运行
freqtrade show-config,检查输出中user_data_dir、strategy_path相关字段与config_files列表,确认实际加载的文件和目录基路径是否符合预期; - "多份配置到底谁覆盖谁?" —— 按加载顺序把
-c依次传入,show-config输出的即深度合并后的最终值,无需手工 diff; - "发出去的配置截图安全吗?" —— 默认输出已把
exchange.secret、telegram.token等替换为REDACTED,可直接分享;若发现某个密钥没被脱敏,对照 config_secrets.py 的清单确认键名拼写; - 配置语法错误定位 —— 配置 JSON 损坏时,加载器会抛出带出错片段的
ConfigurationError(load_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,均可按路径在仓库中直接对照阅读。
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
