freqtrade hyperopt 命令深度参考:参数空间、损失函数与并行优化实践

freqtrade hyperopt 命令深度参考:参数空间、损失函数与并行优化实践 freqtrade hyperopt 命令深度参考参数空间、损失函数与并行优化实践【免费下载链接】freqtradeFree, open source crypto trading bot项目地址: https://gitcode.com/GitHub_Trending/fr/freqtradefreqtrade 的hyperopt命令是基于optuna的超参数优化入口它反复执行回测在策略定义的参数空间buy/sell/enter/exit/roi/stoploss/trailing/protection 等中寻找使损失函数最小的参数组合。本文完整解析 hyperopt 命令参考 中的全部命令行参数结合源码中的默认值常量与调度实现帮助你把优化任务配置到可直接复制运行的程度并掌握hyperopt-list、hyperopt-show等结果后处理命令的配合方式。一、前置条件依赖安装与数据准备hyperopt 依赖较重optuna、scikit-learn等并非随基础包默认安装。当前仓库中 requirements-hyperopt.txt 锁定的版本为-r requirements.txt # Required for hyperopt scikit-learn1.9.0 filelock3.32.4 optuna4.9.0 cmaes0.13.1手动安装方式或执行仓库中的 setup.sh 后手动补齐source .venv/bin/activate pip install -r requirements-hyperopt.txt使用 Docker 镜像的用户无需额外安装镜像内已包含 hyperopt 依赖。注意两点来自 docs/hyperopt.md 的官方提示hyperopt 需要与回测相同的历史数据先通过download-data命令准备好 K 线数据hyperopt 会占满所有 CPU 核心且耗时较长在单核机器如树莓派上可能出现崩溃或不推荐运行的情况。二、命令总览usage: freqtrade hyperopt [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH] [-d PATH] [--userdir PATH] [-s NAME] [--strategy-path PATH] [--recursive-strategy-search] [--freqaimodel NAME] [--freqaimodel-path PATH] [-i TIMEFRAME] [--timerange TIMERANGE] [--data-format-ohlcv {json,jsongz,feather,parquet}] [--max-open-trades INT] [--stake-amount STAKE_AMOUNT] [--fee FLOAT] [-p PAIRS [PAIRS ...]] [--hyperopt-path PATH] [--eps] [--enable-protections] [--dry-run-wallet DRY_RUN_WALLET] [--timeframe-detail TIMEFRAME_DETAIL] [-e INT] [--spaces SPACES [SPACES ...]] [--print-all] [--print-json] [-j JOBS] [--random-state INT] [--min-trades INT] [--hyperopt-loss NAME] [--disable-param-export] [--ignore-missing-spaces] [--analyze-per-epoch] [--early-stop INT]一次典型的最小化运行freqtrade hyperopt --hyperopt-loss SharpeHyperOptLossDaily \ --spaces roi stoploss trailing \ --strategy MyWorkingStrategy --config config.json -e 100下面按功能分组完整覆盖 命令参考 中的所有选项。三、核心优化参数3.1-e, --epochs优化轮数指定评估的参数组合数量默认100。该默认值由 freqtrade/constants.py 中的HYPEROPT_EPOCH 100定义CLI 侧在 freqtrade/commands/cli_options.py 中以defaultconstants.HYPEROPT_EPOCH读取。轮数越多越容易收敛但耗时线性增长可配合--early-stop提前终止。3.2--spaces选择要优化的参数空间指定哪些参数参与优化空格分隔。内置取值在 freqtrade/constants.py 中定义HYPEROPT_BUILTIN_SPACES [ buy, sell, enter, exit, roi, stoploss, trailing, protection, trades, ] HYPEROPT_BUILTIN_SPACE_OPTIONS [default, all] HYPEROPT_BUILTIN_SPACESdefault缺省包含除trailing、protection、trades之外的所有空间all全部空间也可以传策略中自定义命名的空间如spacemy_custom_space自定义空间不会出现在--help的内置列表里。策略侧的对应关系见 docs/hyperopt.md参数通过IntParameter/DecimalParameter/RealParameter/CategoricalParameter/BooleanParameter声明并依靠命名前缀buy_*、enter_*等或显式space归属空间。若某个请求的空间内没有任何参数hyperopt 会报错可用--ignore-missing-spaces别名--ignore-unparameterized-spaces抑制该错误。3.3--hyperopt-loss损失函数优化目标由损失函数决定不同函数会得出完全不同的结果。--hyperopt-loss别名--hyperoptloss接收IHyperOptLoss子类名。CLI 帮助文本中的内置函数列表来自 freqtrade/constants.py 的HYPEROPT_LOSS_BUILTIN与 freqtrade/optimize/hyperopt_loss/ 目录下的实现一一对应类名优化倾向ShortTradeDurHyperOptLoss偏好短平均持仓时间OnlyProfitHyperOptLoss只看利润SharpeHyperOptLoss/SharpeHyperOptLossDaily夏普比率总量/按日SortinoHyperOptLoss/SortinoHyperOptLossDailySortino 比率总量/按日CalmarHyperOptLossCalmar 比率MaxDrawDownHyperOptLoss/MaxDrawDownRelativeHyperOptLoss/MaxDrawDownPerPairHyperOptLoss最大回撤绝对/相对/按币种ProfitDrawDownHyperOptLoss利润与回撤的综合MultiMetricHyperOptLoss多指标加权组合自定义损失函数放在用户目录并通过--hyperopt-path PATH追加查找路径cli_options.py 第 279-283 行。运行freqtrade list-hyperoptloss可列出当前环境中可用的损失函数参考 docs/commands/list-hyperoptloss.md。3.4-j, --job-workers并行工作进程数控制 hyperopt 的并行回测进程数-1默认使用全部 CPU-2为全部减一1则完全禁用并行代码cli_options.py 第 340-350 行。并行调度实现位于 freqtrade/optimize/hyperopt/hyperopt.py进程池把剩余轮数均分到各 workerevals ceil((self.total_epochs - start) / jobs)最后剩余不足一批时按余数截断。官方文档明确警告单核 CPU 上 hyperopt 可能崩溃Issue #1133遇到此类问题可将-j 1作为排查手段。3.5--random-state可复现性设置为正整数后随机种子固定相同数据与参数下的优化路径可复现。源码中 hyperopt.py 第 141-142 行 显示未指定时会自动随机生成random.randint(1, 2**16 - 1)并在日志中打印Using optimizer random state: ...因此复现实验时应以日志中打印的种子为准传入本参数。3.6--early-stop早停--early-stop INT若连续INT个 epoch 没有改进则提前停止默认0禁用。CLI 定义见 cli_options.py 第 292-298 行调度循环中在 hyperopt.py 第 283-286 行 检查self.hyperopter.es_epochs 0后触发Early stopping after ... epochs。长任务中可显著节省 CPU。3.7--analyze-per-epoch逐轮重算指标默认情况下hyperopt 先把数据载入内存、每对交易对只执行一次populate_indicators()随后各 epoch 仅重跑populate_entry_trend()、populate_exit_trend()与回测。--analyze-per-epoch会把populate_indicators()移入每个 epoch 进程内逐轮计算代价是 CPU 增加但可以避免.range方式预生成大量指标列导致的内存OOM问题——hyperopt.py 第 48 行 读取该配置并在 epoch 循环中分支处理if self.analyze_per_epoch:。官方建议当优化参数被用于指标计算、或.range展开列过多时改用该选项。3.8 结果输出控制参数作用--print-all打印所有 epoch 的结果而不仅是最优默认 False见 cli_options.py 第 314-319 行--print-json以 JSON 格式输出结果--min-trades INT参与评估的最少交易数默认1cli_options.py 第 357-364 行过滤掉交易过少的“伪最优”组合--disable-param-export禁用优化结束后自动把最优参数导出到策略/JSON 文件--no-color关闭结果着色重定向输出到文件时常用四、与回测一致的场景参数这些参数保证优化时的模拟环境与你后续回测/实盘一致逐项继承自 命令参考参数说明-i, --timeframe主时间周期1m、5m、30m、1h、1d等覆盖配置中的timeframe--timerange限定数据时间范围格式yyyymmdd或yyyymmddThhmm如20240101-20240201T1200--data-format-ohlcv {json,jsongz,feather,parquet}K 线存储格式默认feather-p, --pairs空格分隔的币种列表限定优化范围--max-open-trades INT覆盖配置中的max_open_trades--stake-amount覆盖配置中的stake_amount--fee FLOAT手续费比率会在开仓和平仓各应用一次--eps, --enable-position-stacking允许同一币种多次开仓仓位叠加仅适用于回测/hyperopt结果无法在 dry/live 中复现--enable-protections别名--enableprotections回测中启用 protections速度明显下降但结果更贴近实盘--dry-run-wallet, --starting-balance回测/hyperopt 使用的起始余额--timeframe-detail细粒度回测时间周期用于在粗时间周期上模拟更精确的成交价五、通用参数与策略查找参数通用参数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历史数据根目录查看合约futures数据需同时指定trading-mode--userdir, --user-data-dir PATH用户数据目录策略参数Strategy arguments参数说明-s, --strategy NAME策略类名--strategy-path PATH追加策略查找路径--recursive-strategy-search在 strategies 目录中递归查找策略--freqaimodel NAME指定 FreqAI 模型--freqaimodel-path PATH追加 FreqAI 模型查找路径六、执行流程命令背后发生了什么结合 docs/hyperopt.md 的“Hyperopt execution logic”与 freqtrade/optimize/hyperopt/hyperopt.py 的实现一次freqtrade hyperopt的完整流程为加载历史数据到内存按交易对各执行一次populate_indicators()除非指定--analyze-per-epoch启动--job-workers指定的进程池基于 optuna 采样器当前为 NSGAIII 多目标采样生成参数组合每组参数依次执行populate_entry_trend()→populate_exit_trend()→ 完整回测模拟回测结果送入--hyperopt-loss指定的损失函数打分采样器据此决定下一组参数结束或--early-stop触发后打印最优 epoch 详情并把最优参数自动导出可用--disable-param-export关闭。优化结果以 pickle 文件保存于user_data/hyperopt_results/。--spaces与策略声明的映射关系同样在此处生效从源码结构看未找到任何参数对应空间时会直接报错这正对应--ignore-missing-spaces需要抑制的错误路径。七、结果后处理hyperopt-list 与 hyperopt-show优化跑完后两个配套命令用于回顾历史结果实现入口在 freqtrade/commands/hyperopt_commands.pyhyperopt-list列出已评估的 epochs支持--best、--profitable、--min-trades、--min-avg-profit、--min-objective等过滤条件--export-csv FILE导出 CSV会禁用表格打印。start_hyperopt_list内部按loss排序后自动展示最优 epoch 的详情见 hyperopt_commands.py 第 50-53 行。详见 docs/commands/hyperopt-list.md。hyperopt-show按-n1 起始的 epoch 序号支持负数倒数索引查看某个 epoch 的完整回测报表--best/--profitable可先过滤--breakdown {day,week,month,year,weekday}输出分时段拆解该命令同样会触发参数导出逻辑HyperoptTools.try_export_params可用--disable-param-export关闭。详见 docs/commands/hyperopt-show.md。两个命令都通过get_latest_hyperopt_file在user_data/hyperopt_results/下定位结果文件hyperopt_commands.py 第 29-31 行并支持--hyperopt-filename指定具体文件、--print-json输出 JSON。八、实战速查目标推荐命令要点不改动策略、只优化 ROI/止损/移动止损freqtrade hyperopt --hyperopt-loss SharpeHyperOptLossDaily --spaces roi stoploss trailing -s MyStrategy --config config.json -e 100优化买卖信号并抑制无参数空间报错--spaces enter exit --ignore-missing-spaces内存吃紧时避免 OOM改用--analyze-per-epoch或缩小.range的取值范围固定随机种子以便复现查看日志中的Using optimizer random state再以--random-state N重跑长任务省 CPU--early-stop 50连续 50 epoch 无改进即停复盘某次运行的第 3 个好结果freqtrade hyperopt-show -n 3 --best --breakdown week适用前提与限制以上参数行为对应当前仓库版本--eps产生的结果无法在 dry/live 交易复现--enable-protections会显著拖慢回测单核 CPU 环境运行 hyperopt 存在已知崩溃风险。完整教程参数类型、.range技巧、Guards/Triggers 设计、自定义空间覆盖请继续阅读 docs/hyperopt.md。【免费下载链接】freqtradeFree, open source crypto trading bot项目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考