尧图精选

freqtrade hyperopt-list 实战指南:从结果文件定位、Epoch 过滤到 CSV 导出的完整解析

🕒 发布时间:2026/9/6 16:48:06 📁 来源:尧图网络
freqtrade hyperopt-list 实战指南从结果文件定位、Epoch 过滤到 CSV 导出的完整解析【免费下载链接】freqtradeFree, open source crypto trading bot项目地址: https://gitcode.com/GitHub_Trending/fr/freqtradefreqtrade hyperopt-list用于在超参数优化Hyperopt跑完后回顾、筛选和分析此前评估过的所有 Epoch 结果它自动定位最新的优化结果文件支持按盈亏、交易次数、持仓时长、目标函数值等条件过滤并能以表格、JSON 或 CSV 形式输出最终展示最优 Epoch 的参数详情。读完本文你将掌握该命令的全部参数用法、过滤条件背后的源码实现、结果文件的定位规则以及如何将优化结果安全地导出和复用到策略中。命令定位与前置条件hyperopt-list是 Hyperopt 工作流中事后分析环节的入口命令它与hyperopt-show展示单个 Epoch 详情共同构成历史优化结果的读取接口。官方文档在 utils.md 的List Hyperopt results章节中给出了两个典型用法# 列出所有结果并在末尾打印最优结果的详情 freqtrade hyperopt-list # 只列出正收益的 Epoch不打印最优 Epoch 详情便于脚本迭代处理 freqtrade hyperopt-list --profitable --no-details使用该命令的前提是已经运行过freqtrade hyperopt且结果文件存在于user_data/hyperopt_results/目录下。docs/hyperopt.md 中说明hyperopt-list与hyperopt-show均可通过--hyperopt-filename filename读取并展示更早的优化结果。从源码结构看该命令被注册在 freqtrade/commands/arguments.py入口函数为start_hyperopt_list其参数集合由ARGS_HYPEROPT_LISTarguments.py统一声明ARGS_HYPEROPT_LIST [ hyperopt_list_best, hyperopt_list_profitable, hyperopt_list_min_trades, hyperopt_list_max_trades, hyperopt_list_min_avg_time, hyperopt_list_max_avg_time, hyperopt_list_min_avg_profit, hyperopt_list_max_avg_profit, hyperopt_list_min_total_profit, hyperopt_list_max_total_profit, hyperopt_list_min_objective, hyperopt_list_max_objective, print_json, hyperopt_list_no_details, hyperoptexportfilename, export_csv, ]值得注意的是命令以RunMode.UTIL_NO_EXCHANGE模式初始化配置见 hyperopt_commands.py意味着它只是一个纯本地工具不连接交易所、不加载行情数据直接读取磁盘上的优化结果文件。完整参数说明以下是当前版本freqtrade hyperopt-list的完整参数与 docs/commands/hyperopt-list.md 中的帮助输出一致按功能分为三类。过滤类参数参数类型作用源码中的过滤逻辑--best开关只选择最优 Epochis_best标记为真的 Epochhyperopt_epoch_filters.py--profitable开关只选择正收益 Epochprofit_total 0hyperopt_epoch_filters.py--min-trades INT正整数选择交易次数多于INT 的 Epochhyperopt_epoch_filters.py--max-trades INT正整数选择交易次数少于INT 的 Epochhyperopt_epoch_filters.py--min-avg-time FLOAT浮点数分钟选择平均持仓时长高于该值的 Epochhyperopt_epoch_filters.py--max-avg-time FLOAT浮点数分钟选择平均持仓时长低于该值的 Epochhyperopt_epoch_filters.py--min-avg-profit FLOAT浮点数选择平均盈利高于该值的 Epochhyperopt_epoch_filters.py--max-avg-profit FLOAT浮点数选择平均盈利低于该值的 Epochhyperopt_epoch_filters.py--min-total-profit FLOAT浮点数选择总盈利高于该值的 Epochhyperopt_epoch_filters.py--max-total-profit FLOAT浮点数选择总盈利低于该值的 Epochhyperopt_epoch_filters.py--min-objective FLOAT浮点数选择目标函数值高于该值的 Epochhyperopt_epoch_filters.py--max-objective FLOAT浮点数选择目标函数值低于该值的 Epochhyperopt_epoch_filters.py过滤条件的具体实现集中在 freqtrade/optimize/hyperopt_epoch_filters.py其中有几个源码级细节值得注意边界是严格比较--min-trades 10对应total_trades 10即严格大于等于 10 的 Epoch 会被排除--max-trades同理为严格小于。平均持仓时长以分钟为单位时长过滤读取的是结果中的holding_avg_s秒代码中执行avg // 60换算成分钟再与阈值比较。如果结果文件是旧版本生成、缺少该字段命令会抛出OperationalException提示省略平均时间过滤或用当前版本重跑 hyperopthyperopt_epoch_filters.py。objective 即损失函数值loss--min-objective/--max-objective过滤的是每个 Epoch 的loss字段也就是你选用的--hyperopt-loss函数计算出的目标值。由于大多数内置损失函数是越小越好如 hyperopt.md 中列出的 Sharpe、Sortino、Calmar 等实际使用时--max-objective比--min-objective更常见。过滤可以叠加所有过滤条件按 best → profitable → 交易数 → 时长 → 盈亏 → objective 的顺序串联执行见 hyperopt_filter_epochs例如--profitable --min-trades 50 --max-objective 0.5可以组合使用。输出控制类参数参数作用说明--print-json以 JSON 格式输出最优 Epoch 的参数详情参数按 buy/sell/roi/stoploss/trailing/max_open_trades 等空间组织roi的键会被转为字符串rapidjson 不支持整数键见 hyperopt_tools.py--no-details不打印最优 Epoch 的详情段适合脚本处理此时命令只输出 Epoch 列表表格--no-color禁用输出着色适合重定向到文件对应 cli_options.py 中的print_colorized默认 True--export-csv FILE将过滤后的结果导出为 CSV并禁用表格打印详见下文CSV 导出一节结果文件定位类参数参数作用--hyperopt-filename FILENAME指定要读取的超参优化结果文件名只写文件名不带路径例如--hyperopt-filenamehyperopt_results_2020-09-27_16-20-48.pickle-c, --config PATH指定配置文件默认userdir/config.json或config.json可多个-表示从 stdin 读取-d, --datadir PATH指定历史数据基础目录查看期货数据时需配合trading-mode--userdir PATH指定 userdata 目录结果文件默认位于user_data/hyperopt_results/下-v, --verbose日志详细度-vv更详细-vvv输出全部--logfile FILE日志写入文件支持syslog、journald特殊值-V, --version显示版本号并退出结果文件如何被定位hyperopt-list的结果文件选择逻辑在 freqtrade/data/btanalysis/bt_fileutils.py 中默认取最新文件get_latest_hyperopt_filename优先读取user_data/hyperopt_results/目录下的.last_result.json元数据文件其中记录了最近一次优化写入的结果文件名若该机制不可用则回退到默认的hyperopt_results.pickle。--hyperopt-filename只接受文件名get_latest_hyperopt_file会检查该参数是否为绝对路径若是则抛出ConfigurationErrorexpects only the filename, not an absolute path最终拼接为user_data/hyperopt_results/filename。旧版 pickle 格式不再受支持hyperopt_tools.py 中_test_hyperopt_results_exist会检查文件后缀.pickle文件会触发OperationalException提示Legacy hyperopt results are no longer supported. Please rerun hyperopt or use an older version to load this file.。同样地load_filtered_results会对缺少is_best字段的旧格式文件抛出兼容性异常hyperopt_tools.py。此外加载与过滤由 HyperoptTools.load_filtered_results 完成它把 13 个过滤选项组装成filteroptions字典逐批默认每批 10 条见_read_results流式读取 JSON Lines 格式的 Epoch 记录并应用过滤同时统计total_epochs用于输出进度格式如 1/1000。执行流程与输出形态入口函数 start_hyperopt_list 的完整调用链如下setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)构建配置不触碰交易所get_latest_hyperopt_file()定位结果文件HyperoptTools.load_filtered_results()读取并过滤 Epoch若未指定--export-csv实例化HyperoptOutput传入过滤后的 Epoch 与total_epochs调用print()输出表格。注意 hyperopt_commands.py 中传入的第四个参数是not config.get(hyperopt_list_best, False)—— 即未使用--best时表格会带最优标记列使用--best时省略该列因为列出的本来就都是最优 Epoch若过滤后有结果且未指定--no-details按loss升序排序取第一条最优 Epoch调用HyperoptTools.show_epoch_details()打印详情hyperopt_tools.py若指定了--export-csv跳过表格打印改为调用HyperoptTools.export_csv_file()写 CSV。其中最优 Epoch 详情的格式由 _format_explanation_string 生成例如Best result: * 1/1000: 100 trades. 55/3/42 Wins/Draws/Losses. Avg profit 0.41%. Median profit 0.35%. Total profit 41.20 USDT ( 4.10%). Avg duration 258 min. Objective: 0.03421详情段还会按参数空间buy/sell/roi/stoploss/trailing/max_open_trades 及自定义空间逐项打印最优参数对未被优化来自策略文件的参数会附加注释# value loaded from strategy常量NON_OPT_PARAM_APPENDIX见 hyperopt_tools.py。CSV 导出--export-csv 的行为边界--export-csv FILE由 HyperoptTools.export_csv_file 实现有两个必须知道的行为约束拒绝覆盖已存在的文件若目标 CSV 已存在仅记录错误日志CSV file already exists并直接返回不会写入。脚本化流程中应先确保目标文件名唯一。导出列结构先用json_normalize将 Epoch 展平固定基础列包括Best、current_epoch、results_metrics.total_trades、profit_mean、profit_median、profit_total、profit_total_abs、stake_currency、holding_avg、trade_count_long、trade_count_short、max_drawdown_abs、max_drawdown_account、loss、is_initial_point、is_best随后追加该批次结果中params_dict的所有参数列各空间参数会被展开为百分比/数值列。因此推荐的筛选 存档流程是先带过滤条件运行--export-csv再用表格模式无 CSV 时人工确认最佳 Epoch二者可以分别用不同的过滤组合。组合示例结合文档示例与源码语义几个有代表性的组合如下# 列出所有 Epoch默认读取最新结果文件末尾展示最优 Epoch 详情 freqtrade hyperopt-list # 只看正收益 Epoch且不打印详情段方便脚本逐行处理 freqtrade hyperopt-list --profitable --no-details # 正收益 交易数严格多于 50 笔 平均持仓不超过 300 分钟 freqtrade hyperopt-list --profitable --min-trades 50 --max-avg-time 300 # 读取指定历史结果文件仅文件名不带路径 freqtrade hyperopt-list --hyperopt-filename hyperopt_results_2024-01-15_10-30-00.jsonl # 把过滤结果导出为 CSV注意目标文件不能已存在导出时不打印表格 freqtrade hyperopt-list --profitable --min-trades 10 --export-csv user_data/hyperopt_profitable.csv # 仅输出最优 Epoch 的参数为 JSON便于程序消费 freqtrade hyperopt-list --print-json --no-details另外freqtrade/configuration/configuration.py 会把检测到的每个过滤参数如Parameter --best detected: ...写入运行日志排查为什么列表是空的时可结合日志确认哪些过滤条件生效。测试验证与相关命令单元测试 tests/commands/test_commands.py 中的test_hyperopt_list覆盖了核心行为无过滤时 12 个 Epoch 全部列出输出包含1/12至12/12加--best后只保留is_best的 Epoch如1/12、5/12、10/12--profitable则进一步只保留正收益 Epoch。该测试通过 mock_read_results注入固定结果集验证了过滤与打印两个环节的正确性。与本文命令配合使用的相邻命令hyperopt-showdocs/commands/hyperopt-show.md用-n指定 Epoch 编号查看单个 Epoch 的完整回测报表与参数其编号正来自hyperopt-list的输出freqtrade hyperoptdocs/commands/hyperopt.md产生这些结果文件的优化主命令。小结hyperopt-list是 freqtrade 超参数优化闭环中的回看工具user_data/hyperopt_results/下的 JSON Lines 结果文件由.last_result.json标记最新一份13 个过滤参数映射到 hyperopt_epoch_filters.py 中严格大于/小于的阈值判断--no-details、--print-json、--no-color、--export-csv分别控制详情段、输出格式、着色和 CSV 落盘且 CSV 不可覆盖。理解这些实现细节后你可以把该命令稳定地嵌入优化 → 筛选 → 导出 → 复盘的策略研发流程中。【免费下载链接】freqtradeFree, open source crypto trading bot项目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →