backtest.sh

This commit is contained in:
zhangkun9038@dingtalk.com 2025-11-26 10:44:09 +08:00
parent a44179cc1d
commit d9fac6c604

View File

@ -134,17 +134,56 @@ if [ -z "$END_DATE_RAW" ]; then
fi
# Parse dates
if [[ "$START_DATE_RAW" == *" "* ]]; then
START_DATE=$(date -d "$START_DATE_RAW" +"%s")
if [[ "$START_DATE_RAW" == *"-"* ]]; then
# 标准格式2025-10-31 或 2025-10-31 00:00:00
if [[ "$OSTYPE" == "darwin"* ]]; then
START_DATE=$(date -jf "%Y-%m-%d" "${START_DATE_RAW%% *}" +"%s" 2>/dev/null)
if [ -z "$START_DATE" ]; then
START_DATE=$(date -jf "%Y-%m-%d %H:%M:%S" "$START_DATE_RAW" +"%s" 2>/dev/null)
fi
else
START_DATE=$(date -d "$START_DATE_RAW" +"%s" 2>/dev/null)
fi
else
# 兼容旧格式20250616 -> 转换为 2025-06-16 00:00:00 再转为时间戳
START_DATE=$(date -d "${START_DATE_RAW:0:4}-${START_DATE_RAW:4:2}-${START_DATE_RAW:6:2} 00:00:00" +"%s")
# 旧格式20251031
YEAR="${START_DATE_RAW:0:4}"
MONTH="${START_DATE_RAW:4:2}"
DAY="${START_DATE_RAW:6:2}"
if [[ "$OSTYPE" == "darwin"* ]]; then
START_DATE=$(date -jf "%Y-%m-%d" "${YEAR}-${MONTH}-${DAY}" +"%s" 2>/dev/null)
else
START_DATE=$(date -d "${YEAR}-${MONTH}-${DAY}" +"%s" 2>/dev/null)
fi
fi
if [[ "$END_DATE_RAW" == *" "* ]]; then
END_DATE=$(date -d "$END_DATE_RAW" +"%s")
if [[ "$END_DATE_RAW" == *"-"* ]]; then
# 标准格式2025-11-24 或 2025-11-24 00:00:00
if [[ "$OSTYPE" == "darwin"* ]]; then
END_DATE=$(date -jf "%Y-%m-%d" "${END_DATE_RAW%% *}" +"%s" 2>/dev/null)
if [ -z "$END_DATE" ]; then
END_DATE=$(date -jf "%Y-%m-%d %H:%M:%S" "$END_DATE_RAW" +"%s" 2>/dev/null)
fi
else
END_DATE=$(date -d "$END_DATE_RAW" +"%s" 2>/dev/null)
fi
else
END_DATE=$(date -d "${END_DATE_RAW:0:4}-${END_DATE_RAW:4:2}-${END_DATE_RAW:6:2} 00:00:00" +"%s")
# 旧格式20251124
YEAR="${END_DATE_RAW:0:4}"
MONTH="${END_DATE_RAW:4:2}"
DAY="${END_DATE_RAW:6:2}"
if [[ "$OSTYPE" == "darwin"* ]]; then
END_DATE=$(date -jf "%Y-%m-%d" "${YEAR}-${MONTH}-${DAY}" +"%s" 2>/dev/null)
else
END_DATE=$(date -d "${YEAR}-${MONTH}-${DAY}" +"%s" 2>/dev/null)
fi
fi
# 检查 date 是否成功
if [ -z "$START_DATE" ] || [ -z "$END_DATE" ]; then
echo "Error: Failed to parse dates."
echo "START_DATE_RAW=$START_DATE_RAW -> START_DATE=$START_DATE"
echo "END_DATE_RAW=$END_DATE_RAW -> END_DATE=$END_DATE"
exit 1
fi
# 处理交易对参数:优先级为 --pairRemoteList > --pairs > 默认值
@ -216,16 +255,16 @@ if [ -n "$STRATEGY_ARG" ] && [ "$STRATEGY_ARG" != "PARAM_WITHOUT_VALUE" ]; then
# 自动匹配策略对应的配置文件(使用小写)
STRATEGY_CONFIG_LOWER="$(echo "$STRATEGY_ARG" | tr '[:upper:]' '[:lower:]').json"
echo "Checking auto-matched config file: freqtrade/templates/$STRATEGY_CONFIG_LOWER"
echo "Checking auto-matched config file: config_examples/$STRATEGY_CONFIG_LOWER"
# 检查小写配置文件
if [ -f "../freqtrade/templates/$STRATEGY_CONFIG_LOWER" ]; then
# 检查配置文件(在 config_examples 目录中查找)
if [ -f "../config_examples/$STRATEGY_CONFIG_LOWER" ]; then
CONFIG_FILE="$STRATEGY_CONFIG_LOWER"
echo "Auto-matched config file for strategy: $CONFIG_FILE"
else
echo "Warning: Auto-matched config file '$STRATEGY_CONFIG_LOWER' not found in templates directory"
echo "Available config files in templates directory:"
ls ../freqtrade/templates/*.json 2>/dev/null | sed 's|.*/||' || echo "No JSON config files found"
echo "Warning: Auto-matched config file '$STRATEGY_CONFIG_LOWER' not found in config_examples directory"
echo "Available config files in config_examples directory:"
ls ../config_examples/*.json 2>/dev/null | sed 's|.*/||' || echo "No JSON config files found"
echo "Using current config: $CONFIG_FILE"
fi
fi
@ -237,17 +276,12 @@ if [ -n "$CONFIG_ARG" ]; then
fi
# 检查指定的配置文件是否存在,如果不存在则使用默认配置
echo "Checking config file: freqtrade/templates/$CONFIG_FILE"
if [ ! -f "../freqtrade/templates/$CONFIG_FILE" ]; then
# 如果在 templates 中找不到,尝试在 config_examples 中找
if [ ! -f "../config_examples/$CONFIG_FILE" ]; then
echo "Warning: Config file freqtrade/templates/$CONFIG_FILE not found, using default configuration"
CONFIG_FILE="basic.json"
else
echo "Config file found: config_examples/$CONFIG_FILE"
fi
echo "Checking config file: config_examples/$CONFIG_FILE"
if [ ! -f "../config_examples/$CONFIG_FILE" ]; then
echo "Warning: Config file config_examples/$CONFIG_FILE not found, using default configuration"
CONFIG_FILE="basic.json"
else
echo "Config file found: freqtrade/templates/$CONFIG_FILE"
echo "Config file found: config_examples/$CONFIG_FILE"
fi
# 最后确认STRATEGY_NAME有值
@ -299,7 +333,7 @@ docker-compose run --rm freqtrade backtesting $PAIRS_FLAG \
--breakdown day \
--cache none >output.log 2>&1
sed -i 's/\x1B\[[0-9;]*m//g' output.log
sed -i '' 's/\\x1B\\[[0-9;]*m//g' output.log
rm ./result/*.json -fr
rm ./result/*.py -fr
@ -320,7 +354,7 @@ else
fi
cd -
sed -i 's/\x1B\[[0-9;]*m//g' output.log
sed -i '' 's/\\x1B\\[[0-9;]*m//g' output.log
cp output.log result/ -f
cd tools/
python tradestocsv.py