#!/bin/bash # Function to extract the value of a parameter get_param_value() { local param="$1" shift while [[ $# -gt 0 ]]; do case "$1" in $param=*) echo "${1#*=}" return ;; $param) # Check if the next argument exists and does not start with a dash if [[ -n "$2" && "$2" != -* ]]; then echo "$2" return else echo "Error: Missing value for parameter $param" >&2 exit 1 fi ;; esac shift done echo "Error: Parameter $param not found" >&2 exit 1 } # Function to extract comma-separated values get_csv_param_value() { local param="$1" shift while [[ $# -gt 0 ]]; do case "$1" in $param=*) echo "${1#*=}" return ;; $param) # Check if the next argument exists and does not start with a dash if [[ -n "$2" && "$2" != -* ]]; then echo "$2" return else echo "Error: Missing value for parameter $param" >&2 exit 1 fi ;; esac shift done echo "" return } if [[ "$@" == *"--timerange"* ]] && [[ "$@" == *"--days"* ]]; then echo "Error: Both --timerange and --days cannot be provided." exit 1 fi # Get timerange or days from parameters timerange="" days="" if [[ "$@" == *"--timerange"* ]]; then timerange=$(get_param_value "--timerange" "$@") elif [[ "$@" == *"--days"* ]]; then days=$(get_param_value "--days" "$@") fi # Get pairs and timeframe from parameters or use defaults pairs=$(get_csv_param_value "--pairs" "$@") timeframe=$(get_csv_param_value "--timeframe" "$@") # Use default values if parameters are not provided if [[ -z "$pairs" ]]; then # 从API获取交易对列表 echo "Fetching pairs from API..." pairs_json=$(curl -s "http://pairlist.xl.home/api/pairlist?mute=true&count=100") # 检查API响应是否成功 if [[ $? -ne 0 || -z "$pairs_json" ]]; then echo "Error: Failed to fetch pairs from API, using fallback list" 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" else # 解析JSON并提取交易对,将连字符替换为斜杠 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 [[ -z "$pairs" ]]; then echo "Error: Failed to parse API response, using fallback list" 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/USTS" else echo "Successfully fetched $(echo "$pairs" | wc -w) pairs from API" echo "Pairs: $pairs" fi fi fi if [[ -z "$timeframe" ]]; then timeframe="3m,5m,15m,30m,1h,4h,6h,12h,1d" fi # Convert timeframe string to array IFS=',' read -r -a timeframe_array <<<"$timeframe" timeframe_array_str=$(printf " '%s'" "${timeframe_array[@]}") # Initialize the base command cmd="docker-compose run --rm freqtrade download-data --config /freqtrade/config_examples/basic.json --pairs $pairs --timeframe$timeframe_array_str --days 50" # Add timerange or days if provided if [[ -n "$timerange" ]]; then cmd+=" --timerange='$timerange'" elif [[ -n "$days" ]]; then cmd+=" --days=$days" fi # Execute the command eval "$cmd"