125 lines
3.5 KiB
Bash
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 "🎉 脚本执行完成"
|