myTestFreqAI/tools/COVERPARAMS_README.md

5.1 KiB
Raw Blame History

coverparams.sh - 参数覆盖脚本

功能说明

这个脚本用于将 hyperopted.json 中的优化参数自动覆盖到 freqaiprimer.json 配置文件中,实现 hyperopt 优化结果的自动应用。

脚本流程

  1. 验证文件存在性 - 检查源文件和目标文件是否存在
  2. JSON 格式验证 - 确保两个 JSON 文件都是有效的 JSON 格式
  3. 备份目标文件 - 在修改前创建目标文件的备份(带时间戳)
  4. 参数覆盖 - 使用 Python 脚本遍历源文件中的所有参数,只覆盖目标文件中已存在的同名参数
  5. 结果展示 - 显示更新的参数详情和更新后的样本数据

使用方法

方式一:使用默认源文件(推荐)

cd tools
./coverparams.sh

脚本会自动从 ../result/hyperopted.json 读取参数。

方式二:指定自定义源文件

cd tools
./coverparams.sh /path/to/your/hyperopted.json

前置条件

  1. jq 工具 - 用于 JSON 验证和输出格式化

    # macOS
    brew install jq
    
    # Ubuntu/Debian
    sudo apt-get install jq
    
  2. Python 3 - 内置的参数合并逻辑使用 Python

  3. 必要的文件

    • 源文件:result/hyperopted.json 或自定义路径
    • 目标文件:freqtrade/templates/freqaiprimer.json

文件结构要求

源文件 (hyperopted.json)

{
  "params": {
    "buy": {
      "parameter_name1": value1,
      "parameter_name2": value2
    },
    "sell": {
      "parameter_name3": value3
    }
  }
}

或简化格式:

{
  "buy": {...},
  "sell": {...}
}

目标文件 (freqaiprimer.json)

目标文件应该有 params 结构,其中包含 buysell 部分。

覆盖逻辑

重要:脚本只会覆盖目标文件中已经存在的参数

  • 如果源文件中有参数在目标文件中不存在,不会添加到目标文件中
  • 如果源文件中有参数在目标文件中存在,会用源文件的值覆盖目标文件的值
  • 参数值会自动保持原有的数据类型(整数、浮点数等)

输出示例

════════════════════════════════════════════════════════════════
参数覆盖脚本 - 从 hyperopted.json 更新 freqaiprimer.json
════════════════════════════════════════════════════════════════

源文件: ../result/hyperopted.json
目标文件: ../freqtrade/templates/freqaiprimer.json

🔍 正在验证 JSON 文件...
✅ JSON 文件有效

💾 已备份原文件至: ../freqtrade/templates/freqaiprimer.json.backup.20251214_120732
🔄 正在更新参数...

✓ 更新 buy.bb_std: 3.0 → 2.8
✓ 更新 buy.rsi_length: 16 → 15
✓ 更新 sell.rsi_overbought: 59 → 58

============================================================
✅ 参数覆盖完成!共更新 3 个参数
============================================================

📊 更新后的参数样本:

Buy 参数前3个:
  bb_std: 2.8
  bb_width_threshold: 0.018

Sell 参数前3个:
  roi_param_a: -0.00006
  roi_param_k: 132

🎉 脚本执行完成

备份文件

每次运行脚本时,原始的 freqaiprimer.json 会自动备份到:

freqaiprimer.json.backup.YYYYMMDD_HHMMSS

如果需要恢复,可以使用:

cp freqaiprimer.json.backup.20251214_120732 freqaiprimer.json

故障排除

错误:文件不存在

❌ 错误:文件 ../result/hyperopted.json 不存在

解决方案:确保源文件路径正确,或运行 hyperopt 生成结果文件

错误:不是有效的 JSON

❌ 错误:$SRC_JSON 不是有效的 JSON 文件

解决方案:使用 jq . filename.json 验证 JSON 格式是否正确

错误:未安装 jq

❌ 错误:未安装 jq 工具,请先安装 jq

解决方案:按照前置条件安装 jq

未找到匹配的参数

⚠️  未找到匹配的参数进行更新

解决方案:源文件中的参数名称与目标文件不匹配,请检查参数名称是否相同

工作流示例

# 1. 运行 hyperopt 优化
cd ..
./tools/hyperopt.sh

# 2. 等待优化完成(可能需要几小时)
# hyperopt 结果会生成到 result/hyperopted.json

# 3. 运行参数覆盖脚本
cd tools
./coverparams.sh

# 4. 验证参数已更新
jq '.params.buy' ../freqtrade/templates/freqaiprimer.json

# 5. 提交更改
cd ..
git add freqtrade/templates/freqaiprimer.json
git commit -m "Update parameters from hyperopt: $(date '+%Y-%m-%d')"

技术细节

  • 语言Bash + Python 3
  • JSON 处理Python 的 json 模块
  • 验证工具jq
  • 错误处理:失败时立即退出(set -e
  • 备份策略:时间戳备份,避免覆盖

开发者注意

脚本的 Python 部分可以独立运行,如果需要自定义覆盖逻辑,可以修改第 74-130 行的 Python 代码。

核心的 merge_params() 函数支持自定义处理,比如:

  • 添加白名单/黑名单
  • 修改覆盖条件
  • 添加参数验证