feat(backtest): 대대적인 Optuna 백테스트 웹 UI 및 백엔드 파이프라인 개편

- Web UI:
  - Optuna 탭 추가 및 mode_combo (최빈값 조합), 사후합격 Top 10 시각화 기능
  - 파라미터 분포(p25~p75, median, mode) 히스토그램 및 과적합(Overfit) 위험도 진단 UI 신설
  - 체크박스 렌더링 깨짐 현상을 네이티브(appearance: auto)로 강제 복구 (CSS)
  - 다단 트레일링 스탑, 꼬리 진입/돌파 손절 등 고급 조건 설정 폼 UI 고도화

- Backend (Optuna Jobs):
  - CLI 환경에서 구동된 Optuna json 결과물을 웹 대시보드로 읽어오는 import 기능 강화
  - JSON 메타데이터에 sort_by, mode, 호가 적용 여부 등 핵심 파라미터 파싱 누락 수정
  - optuna_mode_combo.py 등 최빈값 조합 및 후보군 2차 검증을 위한 신규 모듈 추가

- DB & Execution:
  - WebSocket 호가/틱 피드 수집 통계(api_feed_collect_stats) 메모리 캐시 최적화
  - KIS client 접속 키(approval_key) 등 인프라스트럭처 안정성 및 공유 관리 구조 개선
  - 테스트 및 디버깅용 briefing 마크다운 자동 생성 기능 추가
This commit is contained in:
Your Name
2026-09-01 02:47:51 +09:00
parent 3d0255519e
commit 9ba9ab73b6
92 changed files with 8211 additions and 487 deletions

View File

@@ -298,6 +298,46 @@ def load_payload_dict(study_name: str) -> Optional[Dict[str, Any]]:
return None
def load_phase1_study_for_job(job_id: str) -> Optional[str]:
"""step job_id → 1차 study_name (MariaDB). refine1 우선."""
jid = str(job_id or "").strip()[:64]
if not jid:
return None
try:
ensure_optuna_study_result_table()
cur = _db().conn.execute(
"SELECT study_name FROM optuna_study_result "
"WHERE job_id=%s AND study_name LIKE %s "
"ORDER BY updated_at DESC LIMIT 1",
(jid, "%refine1%"),
)
row = cur.fetchone()
if row:
name = str(row.get("study_name") or "").strip()
if name:
return name
cur = _db().conn.execute(
"SELECT study_name FROM optuna_study_result "
"WHERE job_id=%s ORDER BY updated_at DESC LIMIT 1",
(jid,),
)
row = cur.fetchone()
if row:
return str(row.get("study_name") or "").strip() or None
except Exception as exc:
logger.warning("⚠️ load_phase1_study_for_job 실패 job=%s: %s", jid, exc)
return None
def phase1_payload_ready(study_name: str) -> bool:
"""1차 Top10 narrow 입력용 payload 가 DB에 있는지."""
name = str(study_name or "").strip()
if not name:
return False
data = load_payload_dict(name)
return payload_has_rows(data)
def upsert_counts(
*,
study_name: str,