#!/usr/bin/env bash
# Freqtrade Backtesting & Validation Plan
# Run from: /home/vincent/freqtrade-user
# Usage: bash backtest_plan.sh [phase]
# phase: download | backtest | compare | hyperopt | all
set -euo pipefail
VENV="/home/vincent/freqtrade/.venv"
USER_DIR="/home/vincent/freqtrade-user"
CONFIG="${USER_DIR}/config.json"
DATA_DIR="${USER_DIR}/data"
RESULTS_DIR="${USER_DIR}/backtest_results"
PAIRS="BTC/USD,ETH/USD,SOL/USD,XRP/USD,ADA/USD,AVAX/USD,LINK/USD"
TIMEFRAMES="5m"
DAYS=180
activate_venv() {
source "${VENV}/bin/activate"
cd "${USER_DIR}"
}
phase_download() {
echo "=== Phase 1: Download market data ==="
echo "Downloading ${DAYS} days of ${TIMEFRAMES} data for ${PAIRS}"
freqtrade download-data \
--exchange kraken \
--pairs "${PAIRS}" \
--timeframes ${TIMEFRAMES} \
--days ${DAYS} \
--datadir "${DATA_DIR}" \
--erase
echo "Download complete. Data stored in ${DATA_DIR}/kraken/"
ls -la "${DATA_DIR}/kraken/" | head -20
}
phase_backtest() {
echo "=== Phase 2: Backtest strategies ==="
echo ""
echo "--- Backtesting ImprovedSimpleStrategy ---"
freqtrade backtesting \
--strategy ImprovedSimpleStrategy \
--config "${CONFIG}" \
--timerange 20260101-20260701 \
--timeframe 5m \
--export trades \
--exportfilename "${RESULTS_DIR}/improved_backtest.json"
echo ""
echo "--- Backtesting SimpleStrategy (baseline) ---"
freqtrade backtesting \
--strategy SimpleStrategy \
--config "${CONFIG}" \
--timerange 20260101-20260701 \
--timeframe 5m \
--export trades \
--exportfilename "${RESULTS_DIR}/simple_backtest.json"
echo ""
echo "--- Backtesting TrendPullbackStrategy ---"
freqtrade backtesting \
--strategy TrendPullbackStrategy \
--config "${CONFIG}" \
--timerange 20260101-20260701 \
--timeframe 5m \
--export trades \
--exportfilename "${RESULTS_DIR}/trendpullback_backtest.json"
}
phase_compare() {
echo "=== Phase 3: Compare strategies ==="
freqtrade backtesting \
--strategy-list ImprovedSimpleStrategy SimpleStrategy TrendPullbackStrategy \
--config "${CONFIG}" \
--timerange 20260101-20260701 \
--timeframe 5m \
--export trades \
--exportfilename "${RESULTS_DIR}/comparison_backtest.json"
}
phase_hyperopt() {
echo "=== Phase 4: Hyperopt (buy + sell spaces) ==="
echo "This takes a while. Run with: --epochs 1000 or more for good results"
freqtrade hyperopt \
--strategy ImprovedSimpleStrategy \
--config "${CONFIG}" \
--timerange 20260101-20260501 \
--timeframe 5m \
--spaces buy sell \
--epochs 500 \
--print-all
}
phase_validate() {
echo "=== Phase 5: Validate on held-out data ==="
echo "Using hyperopt-optimized parameters, validate on unseen data (May-Jul 2026)"
freqtrade backtesting \
--strategy ImprovedSimpleStrategy \
--config "${CONFIG}" \
--timerange 20260501-20260701 \
--timeframe 5m \
--export trades
}
# Main
case "${1:-all}" in
download) phase_download ;;
backtest) phase_backtest ;;
compare) phase_compare ;;
hyperopt) phase_hyperopt ;;
validate) phase_validate ;;
all)
echo "Running full backtest plan..."
echo "Note: Download phase may take several minutes."
echo "To run individual phases, use: bash backtest_plan.sh [phase]"
echo ""
echo "Available phases:"
echo " download - Download market data"
echo " backtest - Run backtests on all strategies"
echo " compare - Compare strategies side by side"
echo " hyperopt - Optimize parameters (long)"
echo " validate - Validate on held-out data"
;;
*)
echo "Unknown phase: $1"
echo "Available: download, backtest, compare, hyperopt, validate, all"
exit 1
;;
esac