Files
Freqtrade/tools/run_hyperopt_batch.sh
2025-10-25 23:02:06 +02:00

80 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Usage: run_hyperopt_batch.sh <PAIR_LIST_FILE>
# <PAIR_LIST_FILE> contains one pair per line, e.g., BTC-USDT\nETH-USDT
#
# This script will read each pair, detect regimes (using detect_regime.py),
# and run freqtrade hyperopt for each detected regime, saving user_data/strategies/params in user_data/strategies/params/PAIR/REGIME/
# Lanement par docker exec -i freqtrade user_data/strategies/tools/run_hyperopt_batch.sh user_data/strategies/pairs.txt
# user_data/strategies/tools/run_hyperopt_batch.sh user_data/strategies/pairs.txt
STRATEGIE="Zeus_8_3_2_B_4_2"
if [ $# -ne 1 ]; then
echo "Usage: $0 <PAIR_LIST_FILE>" >&2
exit 1
fi
PAIR_LIST_FILE="$1"
if [ ! -f "$PAIR_LIST_FILE" ]; then
echo "File not found: $PAIR_LIST_FILE" >&2
exit 1
fi
echo "ici $PAIR_LIST_FILE"
while read -r PAIR; do
echo $PAIR
[ -z "$PAIR" ] && continue
echo "\nProcessing pair: $PAIR"
DATA_FEATHER="user_data/data/binance/$(echo $PAIR | tr '[:upper:]' '[:upper:]')-1d.feather"
if [ ! -f "$DATA_FEATHER" ]; then
echo "Data file not found for $PAIR: $DATA_FEATHER" >&2
continue
fi
echo "Work with data file $PAIR: $DATA_FEATHER" >&2
# Detect regimes using Python script
REGIMES=$(python3 user_data/strategies/tools/detect_regime.py "$PAIR" "$DATA_FEATHER") # | awk '{print tolower($1) " " $2 " " $4}')
while read -r REGIME START st END et; do
echo "Work with dates $REGIME : $START - $END" >&2
if [ -z "$START" ] || [ -z "$END" ]; then
echo "Skipping $PAIR $REGIME : cannot determine timerange" >&2
continue
fi
if [[ "$START" < "2024-09-01" ]]; then
echo "TOO OLD $START"
continue
fi
TIMERANGE="${START//-/}-${END//-/}"
echo "Running hyperopt for $PAIR $REGIME with timerange $TIMERANGE"
OUTPUT_JSON="user_data/strategies/params/$PAIR/$REGIME/$START-$END-hyperopt_result.json"
OUTPUT_TXT="user_data/strategies/params/$PAIR/$REGIME/$START-$END-hyperopt_result.txt"
mkdir -p "user_data/strategies/params/$PAIR/$REGIME"
converted="${PAIR/_//}"
# COLUMNS=200 LINES=40 script -q -c "
freqtrade hyperopt --strategy $STRATEGIE --config user_data/config.json --hyperopt-loss OnlyProfitHyperOptLoss --timerange $TIMERANGE --timeframe 5m --spaces sell buy protection --pair $converted -e 80 -j7
echo "Saved hyperopt output to $OUTPUT_JSON"
cp user_data/strategies/$STRATEGIE.json $OUTPUT_JSON
# COLUMNS=120 LINES=40 script -q -c "
# docker exec -i freqtrade
freqtrade hyperopt-list --profitable --no-details > $OUTPUT_TXT
sleep 1
done <<< "$REGIMES"
done < "$PAIR_LIST_FILE"