5.1 KiB
5.1 KiB
coverparams.sh - 参数覆盖脚本
功能说明
这个脚本用于将 hyperopted.json 中的优化参数自动覆盖到 freqaiprimer.json 配置文件中,实现 hyperopt 优化结果的自动应用。
脚本流程
- 验证文件存在性 - 检查源文件和目标文件是否存在
- JSON 格式验证 - 确保两个 JSON 文件都是有效的 JSON 格式
- 备份目标文件 - 在修改前创建目标文件的备份(带时间戳)
- 参数覆盖 - 使用 Python 脚本遍历源文件中的所有参数,只覆盖目标文件中已存在的同名参数
- 结果展示 - 显示更新的参数详情和更新后的样本数据
使用方法
方式一:使用默认源文件(推荐)
cd tools
./coverparams.sh
脚本会自动从 ../result/hyperopted.json 读取参数。
方式二:指定自定义源文件
cd tools
./coverparams.sh /path/to/your/hyperopted.json
前置条件
-
jq 工具 - 用于 JSON 验证和输出格式化
# macOS brew install jq # Ubuntu/Debian sudo apt-get install jq -
Python 3 - 内置的参数合并逻辑使用 Python
-
必要的文件:
- 源文件:
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 结构,其中包含 buy 和 sell 部分。
覆盖逻辑
重要:脚本只会覆盖目标文件中已经存在的参数
- 如果源文件中有参数在目标文件中不存在,不会添加到目标文件中
- 如果源文件中有参数在目标文件中存在,会用源文件的值覆盖目标文件的值
- 参数值会自动保持原有的数据类型(整数、浮点数等)
输出示例
════════════════════════════════════════════════════════════════
参数覆盖脚本 - 从 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() 函数支持自定义处理,比如:
- 添加白名单/黑名单
- 修改覆盖条件
- 添加参数验证