5.4 KiB
5.4 KiB
Hyperopt 多个 --spaces 参数用法指南
📋 概述
已升级 hyperopt_org.sh 脚本,现已支持多个 --spaces 参数,无需用引号包围多个空间参数。
✅ 支持的调用方式
方式1:单个 --spaces 参数(原有方式)
./hyperopt_org.sh --spaces buy
./hyperopt_org.sh --spaces sell
./hyperopt_org.sh --spaces "buy sell"
方式2:多个 --spaces 参数(新增方式,推荐) ⭐
# 方式 A:多个 --spaces 关键字(最直观)
./hyperopt_org.sh --spaces buy --spaces sell
# 方式 B:混合其他参数
./hyperopt_org.sh --spaces buy --spaces sell --epochs 200 --jobs 4
# 方式 C:完整示例
./hyperopt_org.sh \
20240101 20241231 \
--spaces buy \
--spaces sell \
--spaces roi \
--epochs 300 \
--random-state 42 \
-j 8 \
--strategy freqaiprimer \
--config basic.json
方式3:混合位置参数和命名参数
# 位置参数 + 多个 --spaces
./hyperopt_org.sh 20240101 20241231 \
--spaces buy \
--spaces roi \
--spaces stoploss
📊 参数说明
| 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|
--spaces |
多值参数 | 优化空间(可重复多次) | buy |
--epochs |
单值参数 | 优化轮次 | 100 |
--jobs / -j |
单值参数 | 并行任务数 | 4 |
--random-state |
单值参数 | 随机种子 | 19 |
支持的 Space 值
buy - 入场条件优化
sell - 出场条件优化
roi - 收益目标优化
stoploss - 止损优化
trailing - 追踪止损优化
🎯 实际使用示例
场景1:只优化入场条件
./tools/hyperopt_org.sh \
--start-date 20240101 \
--end-date 20241231 \
--spaces buy \
--epochs 200
场景2:优化入场+出场条件
./tools/hyperopt_org.sh \
20240101 20241231 \
--spaces buy \
--spaces sell \
--epochs 300 \
-j 8
场景3:完整优化(入场+出场+止损+ROI)
./tools/hyperopt_org.sh \
--start-date 20240101 \
--end-date 20241231 \
--spaces buy \
--spaces sell \
--spaces roi \
--spaces stoploss \
--epochs 500 \
--random-state 42 \
-j 8 \
--strategy freqaiprimer \
--config basic.json \
--pairRemoteList "https://api.example.com/pairs"
场景4:分阶段优化
# 第1阶段:优化入场条件
./tools/hyperopt_org.sh 20240101 20241231 \
--spaces buy --epochs 200 -j 8
# 第2阶段:优化出场条件
./tools/hyperopt_org.sh 20240101 20241231 \
--spaces sell --epochs 200 -j 8
# 第3阶段:优化止损和ROI
./tools/hyperopt_org.sh 20240101 20241231 \
--spaces roi \
--spaces stoploss \
--epochs 200 -j 8
🔧 脚本改进说明
改进1:多值参数支持
# 使用数组存储多个 --spaces 值
SPACES_VALUES=()
for arg in "$@"; do
if [[ "$prev_arg" == "--spaces" ]] || [[ "$prev_arg" == "--space" ]]; then
if [[ ! "$arg" =~ ^-- ]]; then
SPACES_VALUES+=("$arg")
fi
fi
prev_arg="$arg"
done
# 合并为空格分隔的字符串
if [ ${#SPACES_VALUES[@]} -gt 0 ]; then
SPACES="${SPACES_VALUES[@]}"
fi
改进2:参数跳过优化
原来的 shift 2 可能会跳过下一个实际参数,现在改为:
shift
if [[ $# -gt 0 ]] && [[ ! "$1" =~ ^-- ]]; then
shift
fi
这样可以正确处理参数链式调用。
改进3:后向兼容
仍然支持原有的单个 --spaces 和带引号的形式:
./hyperopt_org.sh --spaces "buy sell roi"
📈 性能建议
根据优化的 space 数量,推荐的参数配置:
| Space个数 | 推荐epochs | 推荐jobs | 预期时间 |
|---|---|---|---|
| 1个 | 100-200 | 4-8 | 10-30分钟 |
| 2个 | 200-300 | 8 | 30-60分钟 |
| 3个 | 300-500 | 8-16 | 60-120分钟 |
| 4个+ | 500+ | 16+ | 2小时+ |
✨ 调试技巧
查看脚本处理的参数
在脚本中添加 set -x 查看参数处理过程:
set -x # 启用调试输出
./hyperopt_org.sh --spaces buy --spaces sell
set +x # 禁用调试输出
检查最终生成的命令
脚本会在执行前输出完整的 docker-compose 命令,检查 --spaces 是否正确合并:
docker-compose run --rm freqtrade hyperopt ... \
--spaces buy sell \
...
验证输出
查看日志确认优化的 space:
tail -f freqtrade/user_data/logs/freqtrade.log | grep -i "space"
⚠️ 常见问题
Q1:为什么我的 --spaces 参数没有生效?
A:检查是否在 --spaces 值后面跟了其他参数而没有使用 --:
# ❌ 错误:sel 被当作了新参数
./hyperopt_org.sh --spaces buy --epochs 200 sel
# ✅ 正确:使用多个 --spaces
./hyperopt_org.sh --spaces buy --spaces sell --epochs 200
Q2:能否同时优化多个 space?
A:可以,freqtrade 会自动按照指定的 space 进行联合优化:
./hyperopt_org.sh --spaces buy --spaces sell --spaces roi
Q3:优化顺序重要吗?
A:不重要,freqtrade 会同时优化所有指定的 space。但可以分阶段优化以获得更好的结果。
📝 更新日志
v2.0 - 2025-11-20
- ✅ 添加多个 --spaces 参数支持
- ✅ 改进参数跳过逻辑
- ✅ 增强后向兼容性
- ✅ 优化参数处理算法
v1.0 - 原始版本
- 仅支持单个 --spaces 参数
- 需要使用引号包围多个值