./hyperopt_org.sh 支持 --spaces 多个参数
This commit is contained in:
parent
48380afc3d
commit
604e3123fd
238
tools/HYPEROPT_SPACES_USAGE.md
Normal file
238
tools/HYPEROPT_SPACES_USAGE.md
Normal file
@ -0,0 +1,238 @@
|
||||
# Hyperopt 多个 --spaces 参数用法指南
|
||||
|
||||
## 📋 概述
|
||||
|
||||
已升级 `hyperopt_org.sh` 脚本,现已支持多个 `--spaces` 参数,无需用引号包围多个空间参数。
|
||||
|
||||
---
|
||||
|
||||
## ✅ 支持的调用方式
|
||||
|
||||
### **方式1:单个 --spaces 参数(原有方式)**
|
||||
```bash
|
||||
./hyperopt_org.sh --spaces buy
|
||||
./hyperopt_org.sh --spaces sell
|
||||
./hyperopt_org.sh --spaces "buy sell"
|
||||
```
|
||||
|
||||
### **方式2:多个 --spaces 参数(新增方式,推荐)** ⭐
|
||||
```bash
|
||||
# 方式 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:混合位置参数和命名参数**
|
||||
```bash
|
||||
# 位置参数 + 多个 --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:只优化入场条件**
|
||||
```bash
|
||||
./tools/hyperopt_org.sh \
|
||||
--start-date 20240101 \
|
||||
--end-date 20241231 \
|
||||
--spaces buy \
|
||||
--epochs 200
|
||||
```
|
||||
|
||||
### **场景2:优化入场+出场条件**
|
||||
```bash
|
||||
./tools/hyperopt_org.sh \
|
||||
20240101 20241231 \
|
||||
--spaces buy \
|
||||
--spaces sell \
|
||||
--epochs 300 \
|
||||
-j 8
|
||||
```
|
||||
|
||||
### **场景3:完整优化(入场+出场+止损+ROI)**
|
||||
```bash
|
||||
./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:分阶段优化**
|
||||
```bash
|
||||
# 第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:多值参数支持**
|
||||
```bash
|
||||
# 使用数组存储多个 --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` 可能会跳过下一个实际参数,现在改为:
|
||||
```bash
|
||||
shift
|
||||
if [[ $# -gt 0 ]] && [[ ! "$1" =~ ^-- ]]; then
|
||||
shift
|
||||
fi
|
||||
```
|
||||
这样可以正确处理参数链式调用。
|
||||
|
||||
### **改进3:后向兼容**
|
||||
仍然支持原有的单个 --spaces 和带引号的形式:
|
||||
```bash
|
||||
./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` 查看参数处理过程:
|
||||
```bash
|
||||
set -x # 启用调试输出
|
||||
./hyperopt_org.sh --spaces buy --spaces sell
|
||||
set +x # 禁用调试输出
|
||||
```
|
||||
|
||||
### **检查最终生成的命令**
|
||||
脚本会在执行前输出完整的 docker-compose 命令,检查 `--spaces` 是否正确合并:
|
||||
```
|
||||
docker-compose run --rm freqtrade hyperopt ... \
|
||||
--spaces buy sell \
|
||||
...
|
||||
```
|
||||
|
||||
### **验证输出**
|
||||
查看日志确认优化的 space:
|
||||
```bash
|
||||
tail -f freqtrade/user_data/logs/freqtrade.log | grep -i "space"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 常见问题
|
||||
|
||||
### **Q1:为什么我的 --spaces 参数没有生效?**
|
||||
A:检查是否在 --spaces 值后面跟了其他参数而没有使用 `--`:
|
||||
```bash
|
||||
# ❌ 错误:sel 被当作了新参数
|
||||
./hyperopt_org.sh --spaces buy --epochs 200 sel
|
||||
|
||||
# ✅ 正确:使用多个 --spaces
|
||||
./hyperopt_org.sh --spaces buy --spaces sell --epochs 200
|
||||
```
|
||||
|
||||
### **Q2:能否同时优化多个 space?**
|
||||
A:可以,freqtrade 会自动按照指定的 space 进行联合优化:
|
||||
```bash
|
||||
./hyperopt_org.sh --spaces buy --spaces sell --spaces roi
|
||||
```
|
||||
|
||||
### **Q3:优化顺序重要吗?**
|
||||
A:不重要,freqtrade 会同时优化所有指定的 space。但可以分阶段优化以获得更好的结果。
|
||||
|
||||
---
|
||||
|
||||
## 📝 更新日志
|
||||
|
||||
### v2.0 - 2025-11-20
|
||||
- ✅ 添加多个 --spaces 参数支持
|
||||
- ✅ 改进参数跳过逻辑
|
||||
- ✅ 增强后向兼容性
|
||||
- ✅ 优化参数处理算法
|
||||
|
||||
### v1.0 - 原始版本
|
||||
- 仅支持单个 --spaces 参数
|
||||
- 需要使用引号包围多个值
|
||||
@ -60,21 +60,35 @@ fi
|
||||
STRATEGY_NAME=${STRATEGY_NAME:-TheForceV7}
|
||||
CONFIG_FILE=${CONFIG_FILE:-basic.json}
|
||||
TEST_BRANCH=${TEST_BRANCH:-develop}
|
||||
# --- 新增:解析 --spaces 或 --space 参数 ---
|
||||
SPACES_ARG=$(get_param_value "--spaces" "$@")
|
||||
# 如果没有提供 --spaces,尝试获取 --space 参数
|
||||
if [ -z "$SPACES_ARG" ]; then
|
||||
SPACES_ARG=$(get_param_value "--space" "$@")
|
||||
|
||||
# --- 新增:解析多个 --spaces 参数 ---
|
||||
# 提取所有 --spaces 后的值(支持多个 --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
|
||||
|
||||
# 如果有多个 --spaces 值,合并为空格分隔的字符串
|
||||
if [ ${#SPACES_VALUES[@]} -gt 0 ]; then
|
||||
SPACES="${SPACES_VALUES[@]}"
|
||||
else
|
||||
# 使用get_param_value作为备选方案(兼容旧格式)
|
||||
SPACES_ARG=$(get_param_value "--spaces" "$@")
|
||||
if [ -z "$SPACES_ARG" ]; then
|
||||
# 如果没有提供任何参数,则默认为 "buy"
|
||||
SPACES="buy"
|
||||
SPACES_ARG=$(get_param_value "--space" "$@")
|
||||
if [ -z "$SPACES_ARG" ]; then
|
||||
SPACES="buy"
|
||||
else
|
||||
SPACES="$SPACES_ARG"
|
||||
fi
|
||||
else
|
||||
# 使用 --space 参数提供的值
|
||||
SPACES="$SPACES_ARG"
|
||||
fi
|
||||
else
|
||||
# 使用 --spaces 参数提供的值
|
||||
SPACES="$SPACES_ARG"
|
||||
fi
|
||||
echo "Using hyperopt spaces: $SPACES"
|
||||
EPOCHS_ARG=$(get_param_value "--epochs" "$@")
|
||||
@ -179,9 +193,12 @@ while [ $# -gt 0 ]; do
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
--spaces | --space | --epochs | --random-state)
|
||||
# 这些参数已经在前面处理过了,直接跳过
|
||||
shift 2
|
||||
--spaces | --space | --epochs | --random-state | --jobs | -j)
|
||||
# 这些参数已经在前面处理过了,跳过参数及其值
|
||||
shift
|
||||
if [[ $# -gt 0 ]] && [[ ! "$1" =~ ^-- ]]; then
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
shift
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user