56 lines
1.5 KiB
Bash
56 lines
1.5 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
# run_grid.sh — loop over timeframes and 2–6 bars-ahead horizons
|
|||
|
|
set -euo pipefail
|
|||
|
|
|
|||
|
|
# Paths (edit if different)
|
|||
|
|
PROJ_DIR="${PROJ_DIR:-$HOME/Documents/Work/TCP/BTC_ETH_regime_predictor}"
|
|||
|
|
DATA_DIR="${DATA_DIR:-$PROJ_DIR/../data}"
|
|||
|
|
PY="${PY:-$PROJ_DIR/.venv/bin/python}"
|
|||
|
|
|
|||
|
|
BTC_CSV="${BTC_CSV:-$DATA_DIR/btcusd_1-min_data.csv}"
|
|||
|
|
ETH_CSV="${ETH_CSV:-$DATA_DIR/ethusd_1min_ohlc.csv}"
|
|||
|
|
SPLIT_DATE="${SPLIT_DATE:-2023-01-01}"
|
|||
|
|
N_STATES="${N_STATES:-3}"
|
|||
|
|
|
|||
|
|
# Timeframes to test: 20–60 min inclusive
|
|||
|
|
readarray -t RULES < <(seq 20 60 | awk '{printf "%dmin\n",$1}')
|
|||
|
|
|
|||
|
|
# Convert a pandas-like offset to minutes: supports Nmin, NH, ND
|
|||
|
|
to_minutes() {
|
|||
|
|
local r="$1"
|
|||
|
|
if [[ "$r" =~ ^([0-9]+)min$ ]]; then
|
|||
|
|
echo "${BASH_REMATCH[1]}"
|
|||
|
|
elif [[ "$r" =~ ^([0-9]+)H$ ]]; then
|
|||
|
|
echo $(( ${BASH_REMATCH[1]} * 60 ))
|
|||
|
|
elif [[ "$r" =~ ^([0-9]+)D$ ]]; then
|
|||
|
|
echo $(( ${BASH_REMATCH[1]} * 1440 ))
|
|||
|
|
else
|
|||
|
|
echo "Unsupported rule: $r" >&2
|
|||
|
|
exit 2
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# Logs
|
|||
|
|
OUT_DIR="${OUT_DIR:-$PROJ_DIR/run_logs}"
|
|||
|
|
mkdir -p "$OUT_DIR"
|
|||
|
|
TS="$(date +"%Y%m%d_%H%M%S")"
|
|||
|
|
LOG="$OUT_DIR/grid_${TS}.log"
|
|||
|
|
|
|||
|
|
# Run grid
|
|||
|
|
for BARS in 2 3 4 5 6; do
|
|||
|
|
for RULE in "${RULES[@]}"; do
|
|||
|
|
BAR_MIN=$(to_minutes "$RULE")
|
|||
|
|
HORIZON=$(( BARS * BAR_MIN ))
|
|||
|
|
echo "Running rule='$RULE' bars_ahead=$BARS horizon_min=$HORIZON" | tee -a "$LOG"
|
|||
|
|
"$PY" "$PROJ_DIR/main.py" \
|
|||
|
|
--btc "$BTC_CSV" \
|
|||
|
|
--eth "$ETH_CSV" \
|
|||
|
|
--rules "$RULE" \
|
|||
|
|
--states "$N_STATES" \
|
|||
|
|
--split "$SPLIT_DATE" \
|
|||
|
|
--horizon "$HORIZON" | tee -a "$LOG"
|
|||
|
|
echo | tee -a "$LOG"
|
|||
|
|
done
|
|||
|
|
done
|
|||
|
|
|