#!/bin/bash # ============================================================================= # run_optuna_today_afternoon.sh # 웹 UI 잡 트래킹에 표시되도록 curl API를 통해 Optuna 실행 # 순서: 메인 TPE (4전략 순차) → 호가 후처리 → 휩쏘 후처리 # ============================================================================= set -e ROOT="$(cd "$(dirname "$0")/.." && pwd)" cd "$ROOT" PY=".venv/bin/python3" WEB="http://192.168.0.149:5050" # 가장 최근 거래일 자동 계산 LAST_TRADE=$(python3 -c " from datetime import date, timedelta import sys d = date.today() for _ in range(7): d -= timedelta(days=1) if d.weekday() < 5: print(d.strftime('%Y-%m-%d')) sys.exit(0) ") echo "최근 거래일: $LAST_TRADE" mkdir -p logs echo "=================================================================" echo " KIS Optuna 순차 실행 — 웹 API 방식 (프로그레스바 표시됨)" echo " 날짜: $LAST_TRADE | 시작: $(date +%H:%M:%S)" echo " 순서: 메인 TPE → 호가 후처리 → 휩쏘(호가 종속)" echo "=================================================================" # ─── STEP 1: 메인 TPE (4전략 순차 — 웹 API로 실행) ───────────────── echo "" echo "[STEP 1] 메인 TPE 탐색 (4전략 순차) — $(date +%H:%M:%S)" echo " ※ 웹 UI 프로그레스바 및 잡 목록에 표시됩니다" RESP=$(curl -s -X POST "$WEB/api/optuna/start" \ -H "Content-Type: application/json" \ -d "{\"strategies\":[\"momentum\",\"breakout\",\"scalp\",\"tail\"],\"start\":\"$LAST_TRADE\",\"end\":\"$LAST_TRADE\",\"trials\":200,\"mode\":\"fast\"}") echo " API 응답: $RESP" JOB_ID=$(echo "$RESP" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('job',{}).get('job_id',''))" 2>/dev/null || echo "") if [ -z "$JOB_ID" ]; then echo " ❌ 잡 시작 실패. 응답: $RESP" exit 1 fi echo " ✅ 잡 시작: job_id=$JOB_ID" # 완료 대기 폴링 (30초 간격) echo " ⏳ 완료 대기 중 (웹 UI에서 진행률 확인 가능) ..." while true; do STATUS=$(curl -s "$WEB/api/optuna/status/$JOB_ID" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('status',''))" 2>/dev/null || echo "unknown") echo " $(date +%H:%M:%S) status=$STATUS" if [ "$STATUS" = "done" ] || [ "$STATUS" = "error" ]; then break fi sleep 30 done echo "🏁 [STEP 1] 메인 TPE 완료 (status=$STATUS) — $(date +%H:%M:%S)" # ─── STEP 2: 호가 후처리 (직접 실행 허용) ──────────────────────────── echo "" echo "[STEP 2] 호가 필터 후처리 — $(date +%H:%M:%S)" for strat in MOMENTUM BREAKOUT SCALP TAIL; do echo "▶ [호가] $strat — $(date +%H:%M:%S)" $PY scripts/apply_optuna_ob_consensus.py --strategy "$strat" --n-trials 1000 echo "✅ [호가] $strat 완료" done echo "🏁 [STEP 2] 완료 — $(date +%H:%M:%S)" # ─── STEP 3: 휩쏘 후처리 (호가 종속 체인, 직접 실행 허용) ───────────── echo "" echo "[STEP 3] 휩쏘 필터 후처리 (호가 통과건 기반) — $(date +%H:%M:%S)" echo " ※ TAIL/BREAKOUT은 UI 참고용 — DB 미적용" for strat in MOMENTUM BREAKOUT SCALP TAIL; do echo "▶ [휩쏘] $strat — $(date +%H:%M:%S)" $PY scripts/apply_optuna_whipsaw_consensus.py --strategy "$strat" --n-trials 500 echo "✅ [휩쏘] $strat 완료" done echo "🏁 [STEP 3] 완료 — $(date +%H:%M:%S)" # ─── 웹 재시작 ────────────────────────────────────────────────────── echo "" echo "🔄 웹 서비스 재시작..." sudo systemctl restart kis_backtest_web.service echo "=================================================================" echo " 전체 완료! — $(date +%H:%M:%S)" echo " 확인: $WEB/ → Optuna 탭" echo "================================================================="