Files
kis_trader/scripts/run_optuna_today_afternoon.sh

91 lines
4.0 KiB
Bash
Executable File

#!/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 "================================================================="