myTestFreqAI/tools/coverjson.sh

125 lines
3.5 KiB
Bash

#!/bin/bash
# 脚本功能:将 optimized.json 中 parameters 的属性值覆盖到 freqaiprimer.json 中的同名属性
set -e
# 定义文件路径
OPTIMIZED_JSON="../freqtrade/templates/optimized.json"
FREQAIPRIMER_JSON="../freqtrade/templates/freqaiprimer.json"
# 检查文件是否存在
if [ ! -f "$OPTIMIZED_JSON" ]; then
echo "❌ 错误:文件 $OPTIMIZED_JSON 不存在"
exit 1
fi
if [ ! -f "$FREQAIPRIMER_JSON" ]; then
echo "❌ 错误:文件 $FREQAIPRIMER_JSON 不存在"
exit 1
fi
# 检查 jq 是否安装
if ! command -v jq &>/dev/null; then
echo "❌ 错误:未安装 jq 工具,请先安装 jq"
exit 1
fi
echo "🔍 正在从 $OPTIMIZED_JSON 提取 parameters 中的属性..."
# 从 optimized.json 中提取 parameters 对象
PARAMETERS=$(jq -c '.hits.hits[0]._source.parameters' "$OPTIMIZED_JSON")
if [ "$PARAMETERS" = "null" ]; then
echo "❌ 错误:在 $OPTIMIZED_JSON 中未找到 parameters 对象"
exit 1
fi
echo "✅ 成功提取 parameters 对象"
# 显示将要覆盖的参数
echo "📋 将要覆盖的参数:"
echo "$PARAMETERS" | jq 'to_entries[] | "\(.key): \(.value)"' | sed 's/"//g'
# 备份原文件
cp "$FREQAIPRIMER_JSON" "$FREQAIPRIMER_JSON.backup.$(date +%Y%m%d_%H%M%S)"
echo "💾 已备份原文件至: $FREQAIPRIMER_JSON.backup.$(date +%Y%m%d_%H%M%S)"
# 更新 freqaiprimer.json 文件中的参数
echo "🔄 正在更新参数..."
# 使用 Python 脚本进行参数更新,避免复杂的 jq 嵌套
python3 <<EOF
import json
# 读取参数
with open('$OPTIMIZED_JSON', 'r') as f:
optimized_data = json.load(f)
parameters = optimized_data['hits']['hits'][0]['_source']['parameters']
# 读取目标文件
with open('$FREQAIPRIMER_JSON', 'r') as f:
freqaiprimer_data = json.load(f)
# 更新 buy 参数
buy_params = [
"add_position_callback", "adjust_multiplier", "bb_length", "bb_lower_deviation",
"bb_std", "bb_width_threshold", "h1_max_candles", "h1_max_consecutive_candles",
"h1_rapid_rise_threshold", "max_entry_adjustments", "min_condition_count",
"rsi_bull_threshold", "rsi_length", "rsi_oversold", "stochrsi_bull_threshold",
"stochrsi_neutral_threshold", "volume_multiplier"
]
for param in buy_params:
if param in parameters:
value = parameters[param]
# 尝试转换为数字
try:
if '.' in str(value):
value = float(value)
else:
value = int(value)
except:
pass # 保持原值
freqaiprimer_data['params']['buy'][param] = value
print(f"更新 buy.{param}: {value}")
# 更新 sell 参数
sell_params = [
"exit_bb_upper_deviation", "exit_volume_multiplier", "max_reduce_adjustments",
"reduce_coefficient", "reduce_profit_base", "rsi_overbought"
]
for param in sell_params:
if param in parameters:
value = parameters[param]
# 尝试转换为数字
try:
if '.' in str(value):
value = float(value)
else:
value = int(value)
except:
pass # 保持原值
freqaiprimer_data['params']['sell'][param] = value
print(f"更新 sell.{param}: {value}")
# 写回文件
with open('$FREQAIPRIMER_JSON', 'w') as f:
json.dump(freqaiprimer_data, f, indent=2, ensure_ascii=False)
print("✅ 参数更新完成")
EOF
echo "✅ 参数覆盖完成!"
# 验证更新结果
echo "✅ 验证更新结果:"
echo "Buy 参数:"
jq '.params.buy' "$FREQAIPRIMER_JSON"
echo "Sell 参数:"
jq '.params.sell' "$FREQAIPRIMER_JSON"
echo "🎉 脚本执行完成"