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:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user