hyperopt_org update

This commit is contained in:
zhangkun9038@dingtalk.com 2025-11-01 12:05:02 +08:00
parent 5b21b349a5
commit 638da68bc0

View File

@ -1,5 +1,36 @@
#!/bin/bash
# Function to extract the value of a parameter
get_param_value() {
local param="$1"
shift
local args=($@)
local i=0
while [ $i -lt ${#args[@]} ]; do
case "${args[$i]}" in
$param=*)
echo "${args[$i]#*=}"
return 0
;;
$param)
# Check if the next argument exists and does not start with a dash
if [ $((i + 1)) -lt ${#args[@]} ] && [[ "${args[$((i + 1))]}" != -* ]]; then
echo "${args[$((i + 1))]}"
return 0
fi
# 如果参数存在但没有值,返回特殊标识"PARAM_WITHOUT_VALUE"
echo "PARAM_WITHOUT_VALUE"
return 0
;;
esac
i=$((i + 1))
done
# 如果参数不存在,返回空字符串
echo ""
return 0
}
# 检查 .env 文件
if [ ! -f ".env" ]; then
echo "⚠️ 本地缺少 .env 文件,请创建并配置。示例内容如下:"
@ -46,36 +77,6 @@ else
RANDOM_STATE="$RANDOM_STATE_ARG"
fi
echo "Using random-state: $RANDOM_STATE"
# Function to extract the value of a parameter
get_param_value() {
local param="$1"
shift
local args=($@)
local i=0
while [ $i -lt ${#args[@]} ]; do
case "${args[$i]}" in
$param=*)
echo "${args[$i]#*=}"
return 0
;;
$param)
# Check if the next argument exists and does not start with a dash
if [ $((i + 1)) -lt ${#args[@]} ] && [[ "${args[$((i + 1))]}" != -* ]]; then
echo "${args[$((i + 1))]}"
return 0
fi
# 如果参数存在但没有值,返回特殊标识"PARAM_WITHOUT_VALUE"
echo "PARAM_WITHOUT_VALUE"
return 0
;;
esac
i=$((i + 1))
done
# 如果参数不存在,返回空字符串
echo ""
return 0
}
# Check if we have named parameters
HAS_NAMED_PARAMS=false
@ -171,25 +172,32 @@ else
fi
# Set default values if parameters not provided
# macOS兼容的date命令
if [ -z "$START_DATE_RAW" ]; then
START_DATE_RAW=$(date -d "2 days ago" +"%Y-%m-%d %H:%M:%S")
START_DATE_RAW=$(date -v -2d +"%Y-%m-%d %H:%M:%S")
fi
if [ -z "$END_DATE_RAW" ]; then
END_DATE_RAW=$(date -d "tomorrow" +"%Y-%m-%d %H:%M:%S")
END_DATE_RAW=$(date -v +1d +"%Y-%m-%d %H:%M:%S")
fi
# Parse dates
# 增强日期格式校验
if [[ "$START_DATE_RAW" =~ ^[0-9]{8}$ ]]; then
# 处理YYYYMMDD格式
START_DATE=$(date -d "${START_DATE_RAW:0:4}-${START_DATE_RAW:4:2}-${START_DATE_RAW:6:2}" +"%s" 2>/dev/null)
YEAR=${START_DATE_RAW:0:4}
MONTH=${START_DATE_RAW:4:2}
DAY=${START_DATE_RAW:6:2}
START_DATE=$(date -j -f "%Y-%m-%d" "$YEAR-$MONTH-$DAY" +"%s" 2>/dev/null)
if [ -z "$START_DATE" ]; then
echo "错误:无效的起始日期格式 $START_DATE_RAW,请使用 YYYY-MM-DD 或 YYYYMMDD"
exit 1
fi
elif [[ "$START_DATE_RAW" == *" "* ]]; then
START_DATE=$(date -d "$START_DATE_RAW" +"%s" 2>/dev/null)
# 处理带空格的日期格式 (YYYY-MM-DD HH:MM:SS)
DATE_PART=$(echo "$START_DATE_RAW" | cut -d' ' -f1)
TIME_PART=$(echo "$START_DATE_RAW" | cut -d' ' -f2)
START_DATE=$(date -j -f "%Y-%m-%d %H:%M:%S" "$DATE_PART $TIME_PART" +"%s" 2>/dev/null)
if [ -z "$START_DATE" ]; then
echo "错误:无效的起始日期格式 $START_DATE_RAW"
exit 1
@ -200,9 +208,16 @@ else
fi
if [[ "$END_DATE_RAW" == *" "* ]]; then
END_DATE=$(date -d "$END_DATE_RAW" +"%s")
# 处理带空格的日期格式 (YYYY-MM-DD HH:MM:SS)
DATE_PART=$(echo "$END_DATE_RAW" | cut -d' ' -f1)
TIME_PART=$(echo "$END_DATE_RAW" | cut -d' ' -f2)
END_DATE=$(date -j -f "%Y-%m-%d %H:%M:%S" "$DATE_PART $TIME_PART" +"%s")
else
END_DATE=$(date -d "${END_DATE_RAW:0:4}-${END_DATE_RAW:4:2}-${END_DATE_RAW:6:2} 00:00:00" +"%s")
# 处理YYYYMMDD格式
YEAR=${END_DATE_RAW:0:4}
MONTH=${END_DATE_RAW:4:2}
DAY=${END_DATE_RAW:6:2}
END_DATE=$(date -j -f "%Y-%m-%d %H:%M:%S" "$YEAR-$MONTH-$DAY 00:00:00" +"%s")
fi
# 处理交易对参数:优先级为 --pairRemoteList > --pairs > 默认值
@ -328,12 +343,17 @@ echo "Using config: $CONFIG_FILE"
echo "Using testBranch: $TEST_BRANCH"
echo "Using hyperopt spaces: $SPACES" # 再次确认
# 直接在当前目录工作,不使用不存在的.venv
cd ../
source .venv/bin/activate
rm -rf user_data/models/*
rm -rf ./freqtrade/user_data/data/backtest_results/*
rm -fr ./user_data/dryrun_results/*
rm -f result/*
# 安全地删除文件,只删除存在的文件
find user_data/models -type f -delete 2>/dev/null
touch user_data/models/.gitkeep
find ./freqtrade/user_data/data/backtest_results -type f -delete 2>/dev/null
touch ./freqtrade/user_data/data/backtest_results/.gitkeep
find ./user_data/dryrun_results -type f -delete 2>/dev/null
touch ./user_data/dryrun_results/.gitkeep
find result -type f -delete 2>/dev/null
touch result/.gitkeep
PARAMS_NAME=freqaiprimer
echo "docker-compose run --rm freqtrade hyperopt $PAIRS_FLAG \
@ -349,7 +369,7 @@ echo "docker-compose run --rm freqtrade hyperopt $PAIRS_FLAG \
--epochs 100 \
-j 4 \
--hyperopt-loss CalmarHyperOptLoss \
--spaces $SPACES \ # ✅ 关键修改:这里使用变量
--spaces $SPACES \
--fee 0.001"
docker-compose run --rm freqtrade hyperopt $PAIRS_FLAG \
@ -361,10 +381,10 @@ docker-compose run --rm freqtrade hyperopt $PAIRS_FLAG \
--enable-protections \
--strategy-path /freqtrade/templates \
--timerange ${START_DATE}-${END_DATE} \
--random-state $RANDOM_STATE \ # ✅ 使用变量
--epochs $EPOCHS \ # ✅ 使用变量
--random-state $RANDOM_STATE \
--epochs $EPOCHS \
-j 4 \
--hyperopt-loss CalmarHyperOptLoss \
--spaces $SPACES \ # ✅ 关键修改:这里使用变量
--spaces $SPACES \
--fee 0.001