Files
TradeBot/tools/run_lstm_retrain.sh
T
2026-06-20 20:30:33 +03:00

70 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
RUNTIME_DIR="$REPO_ROOT/runtime"
LOG_FILE="$RUNTIME_DIR/lstm_retrain.log"
LOCK_FILE="$RUNTIME_DIR/lstm_retrain.lock"
mkdir -p "$RUNTIME_DIR"
log() {
printf '[%s] %s\n' "$(date -Is)" "$*" | tee -a "$LOG_FILE"
}
if command -v flock >/dev/null 2>&1; then
exec 9>"$LOCK_FILE"
if ! flock -n 9; then
log "Another LSTM retrain is already running; skipping."
exit 0
fi
else
LOCK_DIR="$LOCK_FILE.d"
if ! mkdir "$LOCK_DIR" 2>/dev/null; then
log "Another LSTM retrain is already running; skipping."
exit 0
fi
trap 'rmdir "$LOCK_DIR"' EXIT
fi
if [[ -x "$REPO_ROOT/.venv/bin/python" ]]; then
PYTHON="$REPO_ROOT/.venv/bin/python"
elif command -v python3 >/dev/null 2>&1; then
PYTHON="$(command -v python3)"
elif command -v python >/dev/null 2>&1; then
PYTHON="$(command -v python)"
else
log "ERROR: Python was not found."
exit 1
fi
SYMBOLS="${LSTM_RETRAIN_SYMBOLS:-}"
LIMIT="${LSTM_RETRAIN_LIMIT:-1000}"
LOOKBACKS="${LSTM_RETRAIN_LOOKBACKS:-16,32}"
UNITS="${LSTM_RETRAIN_UNITS:-4,6}"
RIDGES="${LSTM_RETRAIN_RIDGES:-0.001}"
INTERVAL="${LSTM_RETRAIN_INTERVAL:-}"
ENV_FILE="${LSTM_RETRAIN_ENV:-}"
if [[ -z "$ENV_FILE" && -f "$REPO_ROOT/.env" ]]; then
ENV_FILE="$REPO_ROOT/.env"
fi
args=(
"tools/train_lstm_forecaster.py"
"--limit" "$LIMIT"
"--lookbacks" "$LOOKBACKS"
"--units" "$UNITS"
"--ridges" "$RIDGES"
)
if [[ -n "$SYMBOLS" ]]; then args+=("--symbols" "$SYMBOLS"); fi
if [[ -n "$INTERVAL" ]]; then args+=("--interval" "$INTERVAL"); fi
if [[ -n "$ENV_FILE" ]]; then args+=("--env" "$ENV_FILE"); fi
cd "$REPO_ROOT"
log "Starting LSTM retrain: $PYTHON -u ${args[*]}"
"$PYTHON" -u "${args[@]}" 2>&1 | tee -a "$LOG_FILE"
log "Finished LSTM retrain."