refactor: enhance Optuna backtesting framework, optimize orderbook filtering, and update database management utilities.
This commit is contained in:
90
scripts/run_optuna_today_afternoon.sh
Executable file
90
scripts/run_optuna_today_afternoon.sh
Executable file
@@ -0,0 +1,90 @@
|
||||
#!/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 "================================================================="
|
||||
Reference in New Issue
Block a user