hyperopt_org update+4

This commit is contained in:
zhangkun9038@dingtalk.com 2025-11-01 04:52:51 +00:00
parent 050df8c95a
commit 78664afecb
2 changed files with 26 additions and 24 deletions

View File

@ -92,7 +92,6 @@ for arg in "$@"; do
HAS_NAMED_PARAMS=true
break
fi
done
# Initialize variables
@ -179,29 +178,27 @@ else
fi
# Set default values if parameters not provided
# macOS兼容的date命令
# Ubuntu/Linux 兼容的date命令 (UTC时间)
if [ -z "$START_DATE_RAW" ]; then
START_DATE_RAW=$(date -v -2d +"%Y-%m-%d %H:%M:%S")
START_DATE_RAW=$(date -u +"%Y-%m-%d %H:%M:%S")
fi
if [ -z "$END_DATE_RAW" ]; then
END_DATE_RAW=$(date -v +1d +"%Y-%m-%d %H:%M:%S")
END_DATE_RAW=$(date -u +"%Y-%m-%d %H:%M:%S")
fi
# Parse dates
# 增强日期格式校验
if [[ "$START_DATE_RAW" =~ ^[0-9]{8}$ ]]; then
# 处理YYYYMMDD格式
START_DATE=$(date -j -f "%Y%m%d" "$START_DATE_RAW" +"%s" 2>/dev/null)
# 处理YYYYMMDD格式 (Linux/GNU date)
START_DATE=$(date -u -d "${START_DATE_RAW:0:4}-${START_DATE_RAW:4:2}-${START_DATE_RAW:6:2}" +"%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
# 处理带空格的日期格式 (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)
START_DATE=$(date -u -d "$START_DATE_RAW" +"%s" 2>/dev/null)
if [ -z "$START_DATE" ]; then
echo "错误:无效的起始日期格式 $START_DATE_RAW"
exit 1
@ -211,18 +208,24 @@ else
exit 1
fi
# 先检查是否为YYYYMMDD格式
# 处理结束日期
if [[ "$END_DATE_RAW" =~ ^[0-9]{8}$ ]]; then
# 直接处理YYYYMMDD格式
END_DATE=$(date -j -f "%Y%m%d" "$END_DATE_RAW" +"%s")
# 处理YYYYMMDD格式 (Linux/GNU date)
END_DATE=$(date -u -d "${END_DATE_RAW:0:4}-${END_DATE_RAW:4:2}-${END_DATE_RAW:6:2}" +"%s" 2>/dev/null)
if [ -z "$END_DATE" ]; then
echo "错误:无效的截止日期格式 $END_DATE_RAW,请使用 YYYY-MM-DD 或 YYYYMMDD"
exit 1
fi
elif [[ "$END_DATE_RAW" == *" "* ]]; then
# 处理带空格的日期格式 (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")
END_DATE=$(date -u -d "$END_DATE_RAW" +"%s" 2>/dev/null)
if [ -z "$END_DATE" ]; then
echo "错误:无效的截止日期格式 $END_DATE_RAW"
exit 1
fi
else
# 尝试处理YYYY-MM-DD格式
END_DATE=$(date -j -f "%Y-%m-%d" "$END_DATE_RAW" +"%s")
echo "错误:未知的截止日期格式 $END_DATE_RAW"
exit 1
fi
# 处理交易对参数:优先级为 --pairRemoteList > --pairs > 默认值
@ -334,19 +337,19 @@ if [ -z "$STRATEGY_CLASS_NAME" ]; then
STRATEGY_CLASS_NAME="$STRATEGY_NAME"
fi
# 在参数处理完成后输出最终使用的值
# 显示完整使用帮助
# 在参数处理完成后输出最终使用的值
# 显示完整使用帮助
echo "正确用法示例:"
echo "位置参数模式:"
echo " $0 20230901 20231001 MartinGale BTC/USDT"
echo "命名参数模式:"
echo " $0 --start-date=20230901 --end-date=20231001 -t MartinGale --spaces \"buy sell\""
echo " $0 --start-date=20230901 --end-date=20231001 -t MartinGale --spaces \"buy sell\" --epochs 200 --random-state 42"
echo "Using strategy: $STRATEGY_NAME"
echo "Using config: $CONFIG_FILE"
echo "Using testBranch: $TEST_BRANCH"
echo "Using hyperopt spaces: $SPACES" # 再次确认
echo "Using hyperopt spaces: $SPACES"
echo "Using epochs: $EPOCHS"
echo "Using random-state: $RANDOM_STATE"
# 直接在当前目录工作,不使用不存在的.venv
cd ../
@ -370,8 +373,8 @@ echo "docker-compose run --rm freqtrade hyperopt $PAIRS_FLAG \
--enable-protections \
--strategy-path /freqtrade/templates \
--timerange ${START_DATE}-${END_DATE} \
--random-state 19 \
--epochs 100 \
--random-state $RANDOM_STATE \
--epochs $EPOCHS \
-j 4 \
--hyperopt-loss CalmarHyperOptLoss \
--spaces $SPACES \
@ -392,4 +395,3 @@ docker-compose run --rm freqtrade hyperopt $PAIRS_FLAG \
--hyperopt-loss CalmarHyperOptLoss \
--spaces $SPACES \
--fee 0.001

View File