From ab99c06030a5e4e0efaa520c73c748cbfcbedefe Mon Sep 17 00:00:00 2001 From: "zhangkun9038@dingtalk.com" Date: Thu, 19 Feb 2026 23:15:28 +0800 Subject: [PATCH] =?UTF-8?q?=E8=84=9A=E6=9C=AC=E4=BC=9A=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E9=BB=98=E8=AE=A4=E7=9A=84=20MyCoolRLModel?= =?UTF-8?q?=20=E6=A8=A1=E5=9E=8B=EF=BC=8C=E8=80=8C=E4=B8=8D=E4=BC=9A?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E5=8F=82=E6=95=B0=E7=BC=BA=E5=A4=B1=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_timestamp.sh | 52 +++++++++++++++++++++++++++++++++++++++++++++++ tools/backtest.sh | 40 +++++++++++++++++++++--------------- 2 files changed, 76 insertions(+), 16 deletions(-) create mode 100644 test_timestamp.sh diff --git a/test_timestamp.sh b/test_timestamp.sh new file mode 100644 index 00000000..de68e7bd --- /dev/null +++ b/test_timestamp.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# 测试时间戳转换 + +# 测试输入 +START_DATE_RAW="20260118" +END_DATE_RAW="20260218" + +echo "=== 测试时间戳转换 ===" +echo "输入:" +echo "START_DATE_RAW: $START_DATE_RAW" +echo "END_DATE_RAW: $END_DATE_RAW" + +# 处理日期格式 - 转换为 UNIX 时间戳 +START_DATE_TS="" +END_DATE_TS="" + +if [[ "$START_DATE_RAW" == *" "* ]]; then + # 如果输入有空格,假设是日期/时间字符串 + START_DATE_TS=$(date -d "$START_DATE_RAW" +"%s") +elif [[ "$START_DATE_RAW" =~ ^[0-9]{8}$ ]]; then + # 如果输入是 8 位数 (YYYYMMDD),转换为时间戳 + START_DATE_TS=$(date -d "${START_DATE_RAW:0:4}-${START_DATE_RAW:4:2}-${START_DATE_RAW:6:2} 00:00:00" +"%s") +else + # 否则,假设已经是时间戳 + START_DATE_TS="$START_DATE_RAW" +fi + +if [[ "$END_DATE_RAW" == *" "* ]]; then + # 如果输入有空格,假设是日期/时间字符串 + END_DATE_TS=$(date -d "$END_DATE_RAW" +"%s") +elif [[ "$END_DATE_RAW" =~ ^[0-9]{8}$ ]]; then + # 如果输入是 8 位数 (YYYYMMDD),转换为时间戳 + END_DATE_TS=$(date -d "${END_DATE_RAW:0:4}-${END_DATE_RAW:4:2}-${END_DATE_RAW:6:2} 00:00:00" +"%s") +else + # 否则,假设已经是时间戳 + END_DATE_TS="$END_DATE_RAW" +fi + +echo "" +echo "转换结果:" +echo "START_DATE_TS: $START_DATE_TS" +echo "END_DATE_TS: $END_DATE_TS" + +# 构建正确的 timerange 格式 (TIMESTAMP1-TIMESTAMP2) +TIMERANGE_ARG="$START_DATE_TS-$END_DATE_TS" + +echo "" +echo "最终 timerange 参数:" +echo "TIMERANGE_ARG: $TIMERANGE_ARG" +echo "" +echo "完整命令示例:" +echo "docker-compose run --rm freqtrade backtesting --pairs XAUT/USDT --timerange $TIMERANGE_ARG --strategy FreqaiPrimer" \ No newline at end of file diff --git a/tools/backtest.sh b/tools/backtest.sh index a28514d0..8e41f3be 100755 --- a/tools/backtest.sh +++ b/tools/backtest.sh @@ -123,37 +123,45 @@ if [ -z "$START_DATE_RAW" ] && [ -z "$END_DATE_RAW" ] && [ $# -gt 0 ]; then fi # Process date formats -START_DATE_STR="" -END_DATE_STR="" +START_DATE_TS="" +END_DATE_TS="" -# Handle date processing +# Handle date processing - convert to UNIX timestamp if [[ "$START_DATE_RAW" == *" "* ]]; then - START_DATE_STR=$(date -d "$START_DATE_RAW" +"%Y-%m-%d") + # If input has spaces, assume it's a date/time string + START_DATE_TS=$(date -d "$START_DATE_RAW" +"%s") +elif [[ "$START_DATE_RAW" =~ ^[0-9]{8}$ ]]; then + # If input is 8 digits (YYYYMMDD), convert to timestamp + START_DATE_TS=$(date -d "${START_DATE_RAW:0:4}-${START_DATE_RAW:4:2}-${START_DATE_RAW:6:2} 00:00:00" +"%s") else - # 兼容旧格式:20260118 -> 转换为 2026-01-18 - START_DATE_STR="${START_DATE_RAW:0:4}-${START_DATE_RAW:4:2}-${START_DATE_RAW:6:2}" + # Otherwise, assume it's already a timestamp + START_DATE_TS="$START_DATE_RAW" fi if [[ "$END_DATE_RAW" == *" "* ]]; then - END_DATE_STR=$(date -d "$END_DATE_RAW" +"%Y-%m-%d") + # If input has spaces, assume it's a date/time string + END_DATE_TS=$(date -d "$END_DATE_RAW" +"%s") +elif [[ "$END_DATE_RAW" =~ ^[0-9]{8}$ ]]; then + # If input is 8 digits (YYYYMMDD), convert to timestamp + END_DATE_TS=$(date -d "${END_DATE_RAW:0:4}-${END_DATE_RAW:4:2}-${END_DATE_RAW:6:2} 00:00:00" +"%s") else - # 兼容旧格式:20260218 -> 转换为 2026-02-18 - END_DATE_STR="${END_DATE_RAW:0:4}-${END_DATE_RAW:4:2}-${END_DATE_RAW:6:2}" + # Otherwise, assume it's already a timestamp + END_DATE_TS="$END_DATE_RAW" fi -# Validate date formats -if [[ ! "$START_DATE_STR" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then - echo "Error: Invalid start date format: $START_DATE_STR" +# Validate timestamp formats +if [[ ! "$START_DATE_TS" =~ ^[0-9]+$ ]]; then + echo "Error: Invalid start date format: $START_DATE_RAW" exit 1 fi -if [[ ! "$END_DATE_STR" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then - echo "Error: Invalid end date format: $END_DATE_STR" +if [[ ! "$END_DATE_TS" =~ ^[0-9]+$ ]]; then + echo "Error: Invalid end date format: $END_DATE_RAW" exit 1 fi -# Build correct timerange format (YYYY-MM-DD/YYYY-MM-DD) -TIMERANGE_ARG="$START_DATE_STR/$END_DATE_STR" +# Build correct timerange format (TIMESTAMP1-TIMESTAMP2) +TIMERANGE_ARG="$START_DATE_TS-$END_DATE_TS" # 处理交易对参数:优先级为 --pairRemoteList > --pairs > 默认值 if [ -n "$PAIR_REMOTE_LIST_URL" ]; then