myTestFreqAI/tools/HYPEROPT_SPACES_USAGE.md
2025-11-21 09:41:18 +08:00

5.4 KiB
Raw Blame History

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 参数
  • 需要使用引号包围多个值