#!/usr/bin/env bash set -euo pipefail # Required CSVs (must exist in ../data) BTC_CSV="../data/btcusd_1-min_data.csv" ETH_CSV="../data/ethusd_1min_ohlc.csv" # Grid parameters RULE_SETS="30min,45min,1H" HORIZONS="60 120" N_STATES_LIST="3 4" CV_SPLITS=8 CV_TEST_BARS=500 CV_GAP_BARS=24 CV_SEED=7 CV_SINCE="" FOLDER_SAVE_PATH="" PYRUN="uv run python" STAMP="$(date +%Y%m%d_%H%M%S)" mkdir -p logs LOG_FILE="logs/grid_${STAMP}.log" { echo "# GRID START $(date -Is)" echo "BTC_CSV=$BTC_CSV" echo "ETH_CSV=$ETH_CSV" echo } | tee -a "$LOG_FILE" run_job() { local rules="$1" horizon="$2" n_states="$3" cmd=( $PYRUN main.py --btc "$BTC_CSV" --eth "$ETH_CSV" --rules "$rules" --states "$n_states" --horizon "$horizon" --cv_splits "$CV_SPLITS" --cv_test_bars "$CV_TEST_BARS" --cv_gap_bars "$CV_GAP_BARS" --cv_seed "$CV_SEED" ) [[ -n "$CV_SINCE" ]] && cmd+=( --cv_since "$CV_SINCE" ) [[ -n "$FOLDER_SAVE_PATH" ]] && cmd+=( --folder_save_path "$FOLDER_SAVE_PATH" ) echo "----------------------------------------------------------------" | tee -a "$LOG_FILE" echo "# $(date -Is) rules=${rules} horizon=${horizon} states=${n_states}" | tee -a "$LOG_FILE" "${cmd[@]}" 2>&1 | tee -a "$LOG_FILE" } IFS=$'\n' read -r -d '' -a RULE_GROUPS < <(printf '%s\0' "$RULE_SETS") for rules in "${RULE_GROUPS[@]}"; do for horizon in $HORIZONS; do for n_states in $N_STATES_LIST; do run_job "$rules" "$horizon" "$n_states" done done done echo "# GRID END $(date -Is)" | tee -a "$LOG_FILE"