fix backtest
This commit is contained in:
parent
4ef72a93cd
commit
e0af2f4a92
@ -21,45 +21,92 @@ CONFIG_FILE=${CONFIG_FILE:-basic.json}
|
||||
echo "Using strategy: $STRATEGY_NAME"
|
||||
echo "Using config: $CONFIG_FILE"
|
||||
echo "Using testBranch: $TEST_BRANCH"
|
||||
# Parse command line arguments
|
||||
START_DATE=${1:-$(date -d "2 days ago" +"%Y%m%d")}
|
||||
END_DATE=${2:-$(date -d "tomorrow" +"%Y%m%d")}
|
||||
# Fetch pairlist from API or use default values
|
||||
if [ -z "$3" ]; then
|
||||
# Check if END_DATE is greater than 2025-08-05
|
||||
END_DATE_TS=$(date -d "$END_DATE_RAW" +"%s")
|
||||
CUTOFF_DATE_TS=$(date -d "2025-08-05" +"%s")
|
||||
|
||||
if [ "$END_DATE_TS" -gt "$CUTOFF_DATE_TS" ]; then
|
||||
echo "Fetching pairlist from API with date: $END_DATE_RAW..."
|
||||
PAIRS_RESPONSE=$(curl -s "http://pairlist.xl.home/api/pairlist?mute=true&count=30&date=$END_DATE_RAW")
|
||||
PAIRS_ARG=$(echo "$PAIRS_RESPONSE" | jq -r '.pairlist | join(",")')
|
||||
else
|
||||
echo "Using static default pairlist..."
|
||||
PAIRS_ARG="BTC/USDT,ETH/USDT,LTC/USDT"
|
||||
# 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
|
||||
else
|
||||
echo "Error: Missing value for parameter $param" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
i=$((i + 1))
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
# Check if we have named parameters
|
||||
HAS_NAMED_PARAMS=false
|
||||
for arg in "$@"; do
|
||||
if [[ "$arg" == --* ]]; then
|
||||
HAS_NAMED_PARAMS=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Initialize variables
|
||||
START_DATE_RAW=""
|
||||
END_DATE_RAW=""
|
||||
PAIRS_ARG=""
|
||||
PAIR_REMOTE_LIST_URL=""
|
||||
|
||||
# Parse parameters based on whether we have named parameters
|
||||
if [ "$HAS_NAMED_PARAMS" = true ]; then
|
||||
# Use named parameter parsing
|
||||
START_DATE_RAW=$(get_param_value "--start-date" "$@")
|
||||
END_DATE_RAW=$(get_param_value "--end-date" "$@")
|
||||
PAIRS_ARG=$(get_param_value "--pairs" "$@")
|
||||
PAIR_REMOTE_LIST_URL=$(get_param_value "--pairRemoteList" "$@")
|
||||
else
|
||||
PAIRS_ARG="$3"
|
||||
# Use positional parameter parsing
|
||||
if [ $# -gt 0 ]; then
|
||||
START_DATE_RAW="$1"
|
||||
fi
|
||||
if [ $# -gt 1 ]; then
|
||||
END_DATE_RAW="$2"
|
||||
fi
|
||||
if [ $# -gt 2 ]; then
|
||||
THIRD_PARAM="$3"
|
||||
# Check if it's a URL
|
||||
if [[ "$THIRD_PARAM" == http://* ]] || [[ "$THIRD_PARAM" == https://* ]]; then
|
||||
PAIR_REMOTE_LIST_URL="$THIRD_PARAM"
|
||||
echo "Detected URL parameter: $PAIR_REMOTE_LIST_URL"
|
||||
# Check if it's a pair like "*/USDT"
|
||||
elif [[ "$THIRD_PARAM" == */USDT ]] || [[ "$THIRD_PARAM" == */BUSD ]] || [[ "$THIRD_PARAM" == */USDC ]]; then
|
||||
PAIRS_ARG="$THIRD_PARAM"
|
||||
echo "Detected pair parameter: $PAIRS_ARG"
|
||||
else
|
||||
echo "Warning: Third parameter '$THIRD_PARAM' is neither a URL nor a pair"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# If PAIRS_ARG is provided, format it for docker-compose
|
||||
if [ -n "$PAIRS_ARG" ]; then
|
||||
PAIRS_FLAG="--pairs $PAIRS_ARG"
|
||||
else
|
||||
PAIRS_FLAG=""
|
||||
# Set default values if parameters not provided
|
||||
if [ -z "$START_DATE_RAW" ]; then
|
||||
START_DATE_RAW=$(date -d "2 days ago" +"%Y-%m-%d %H:%M:%S")
|
||||
fi
|
||||
PARAMS_NAME=$(echo "$STRATEGY_NAME" | tr '[:upper:]' '[:lower:]')
|
||||
# If PAIRS_ARG is provided, format it for docker-compose
|
||||
if [ -n "$PAIRS_ARG" ]; then
|
||||
PAIRS_FLAG="--pairs $PAIRS_ARG"
|
||||
else
|
||||
PAIRS_FLAG=""
|
||||
fi
|
||||
# Parse command line arguments
|
||||
START_DATE_RAW=${1:-$(date -d "2 days ago" +"%Y-%m-%d %H:%M:%S")}
|
||||
END_DATE_RAW=${2:-$(date -d "tomorrow" +"%Y-%m-%d %H:%M:%S")}
|
||||
|
||||
# 判断是否包含空格,如果是,则按完整时间解析并转为时间戳
|
||||
if [ -z "$END_DATE_RAW" ]; then
|
||||
END_DATE_RAW=$(date -d "tomorrow" +"%Y-%m-%d %H:%M:%S")
|
||||
fi
|
||||
|
||||
# Parse dates
|
||||
if [[ "$START_DATE_RAW" == *" "* ]]; then
|
||||
START_DATE=$(date -d "$START_DATE_RAW" +"%s")
|
||||
else
|
||||
@ -73,6 +120,62 @@ else
|
||||
END_DATE=$(date -d "${END_DATE_RAW:0:4}-${END_DATE_RAW:4:2}-${END_DATE_RAW:6:2} 00:00:00" +"%s")
|
||||
fi
|
||||
|
||||
# 处理交易对参数:优先级为 --pairRemoteList > --pairs > 默认值
|
||||
if [ -n "$PAIR_REMOTE_LIST_URL" ]; then
|
||||
# 从远程API获取交易对列表
|
||||
echo "Fetching pairs from remote URL: $PAIR_REMOTE_LIST_URL"
|
||||
pairs_json=$(curl -s "$PAIR_REMOTE_LIST_URL")
|
||||
|
||||
# 检查API响应是否成功
|
||||
if [[ $? -ne 0 || -z "$pairs_json" ]]; then
|
||||
echo "Error: Failed to fetch pairs from remote URL, using --pairs parameter or default"
|
||||
if [ -n "$PAIRS_ARG" ]; then
|
||||
PAIRS_FLAG="--pairs $PAIRS_ARG"
|
||||
echo "Using pairs from --pairs parameter: $PAIRS_ARG"
|
||||
else
|
||||
# 使用默认的交易对列表
|
||||
DEFAULT_PAIRS="BTC/USDT TON/USDT DOT/USDT XRP/USDT OKB/USDT SOL/USDT DOGE/USDT WCT/USDT TRUMP/USDT SUI/USDT PEPE/USDT TRB/USDT MASK/USDT UNI/USDT KAITO/USDT"
|
||||
PAIRS_FLAG="--pairs $DEFAULT_PAIRS"
|
||||
echo "Using default pairs: $DEFAULT_PAIRS"
|
||||
fi
|
||||
else
|
||||
# 解析JSON并提取交易对,将连字符替换为斜杠
|
||||
remote_pairs=$(echo "$pairs_json" | python3 -c "
|
||||
import sys, json
|
||||
data = json.load(sys.stdin)
|
||||
pairs = [pair.replace('-', '/') for pair in data.get('pairlist', [])]
|
||||
print(' '.join(pairs) if pairs else '')
|
||||
")
|
||||
|
||||
# 如果解析成功且有交易对
|
||||
if [[ -n "$remote_pairs" ]]; then
|
||||
PAIRS_FLAG="--pairs $remote_pairs"
|
||||
echo "Successfully fetched $(echo "$remote_pairs" | wc -w) pairs from remote URL"
|
||||
echo "Pairs: $remote_pairs"
|
||||
else
|
||||
echo "Error: Failed to parse or empty pairlist from remote URL, using --pairs parameter or default"
|
||||
if [ -n "$PAIRS_ARG" ]; then
|
||||
PAIRS_FLAG="--pairs $PAIRS_ARG"
|
||||
echo "Using pairs from --pairs parameter: $PAIRS_ARG"
|
||||
else
|
||||
# 使用默认的交易对列表
|
||||
DEFAULT_PAIRS="BTC/USDT TON/USDT DOT/USDT XRP/USDT OKB/USDT SOL/USDT DOGE/USDT WCT/USDT TRUMP/USDT SUI/USDT PEPE/USDT TRB/USDT MASK/USDT UNI/USDT KAITO/USDT"
|
||||
PAIRS_FLAG="--pairs $DEFAULT_PAIRS"
|
||||
echo "Using default pairs: $DEFAULT_PAIRS"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
elif [ -n "$PAIRS_ARG" ]; then
|
||||
# 使用 --pairs 参数提供的交易对
|
||||
PAIRS_FLAG="--pairs $PAIRS_ARG"
|
||||
echo "Using pairs from --pairs parameter: $PAIRS_ARG"
|
||||
else
|
||||
# 没有提供任何交易对参数,使用默认值
|
||||
DEFAULT_PAIRS="BTC/USDT TON/USDT DOT/USDT XRP/USDT OKB/USDT SOL/USDT DOGE/USDT WCT/USDT TRUMP/USDT SUI/USDT PEPE/USDT TRB/USDT MASK/USDT UNI/USDT KAITO/USDT"
|
||||
PAIRS_FLAG="--pairs $DEFAULT_PAIRS"
|
||||
echo "No pairs parameter provided, using default pairs: $DEFAULT_PAIRS"
|
||||
fi
|
||||
|
||||
cd ../
|
||||
source .venv/bin/activate
|
||||
rm -rf user_data/models/*
|
||||
@ -81,7 +184,6 @@ rm -fr ./user_data/dryrun_results/*
|
||||
rm result/*
|
||||
|
||||
hyperopt_config="${STRATEGY_NAME%.py}.json"
|
||||
#docker-compose -f docker-compose_backtest.yml run --rm freqtrade >output.log 2>&1
|
||||
|
||||
echo "docker-compose run --rm freqtrade backtesting $PAIRS_FLAG \
|
||||
--logfile /freqtrade/user_data/logs/freqtrade.log \
|
||||
@ -91,8 +193,9 @@ echo "docker-compose run --rm freqtrade backtesting $PAIRS_FLAG \
|
||||
--strategy $STRATEGY_NAME \
|
||||
--timerange $START_DATE-$END_DATE \
|
||||
--fee 0.0008 \
|
||||
--breakdown day \
|
||||
--cache none >output.log"
|
||||
#LightGBMRegressorMultiTarget
|
||||
|
||||
docker-compose run --rm freqtrade backtesting $PAIRS_FLAG \
|
||||
--logfile /freqtrade/user_data/logs/freqtrade.log \
|
||||
--freqaimodel LightGBMRegressorMultiTarget \
|
||||
@ -103,9 +206,8 @@ docker-compose run --rm freqtrade backtesting $PAIRS_FLAG \
|
||||
--fee 0.0008 \
|
||||
--breakdown day \
|
||||
--cache none >output.log 2>&1
|
||||
sed -i 's/\x1B\[[0-9;]*m//g' output.log
|
||||
|
||||
#python3 tools/filter.py
|
||||
sed -i 's/\x1B\[[0-9;]*m//g' output.log
|
||||
|
||||
rm ./result/*.json -fr
|
||||
rm ./result/*.py -fr
|
||||
@ -127,7 +229,6 @@ fi
|
||||
|
||||
cd -
|
||||
sed -i 's/\x1B\[[0-9;]*m//g' output.log
|
||||
#python3 ../filter.py
|
||||
cp output.log result/ -f
|
||||
cd tools/
|
||||
python tradestocsv.py
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user