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:
22
database.py
22
database.py
@@ -303,6 +303,11 @@ ENV_CONFIG_KEYS = (
|
||||
"TAIL_LIMIT_VALID_BARS", "TAIL_LIMIT_FILL_SLIP_PCT",
|
||||
"TAIL_MIN_INVEST_RATIO_OF_SLOT",
|
||||
"TAIL_PARAM_SEARCH_ENTRY_MODE",
|
||||
"OPTUNA_MODE_POOL",
|
||||
"OPTUNA_MODE_TOP_N",
|
||||
"OPTUNA_MODE_BAND_DECAY_IQR",
|
||||
"OPTUNA_MODE_REFINE_PHASE2_TRIALS",
|
||||
"OPTUNA_MODE_REFINE_BAND_EXPAND_IQR",
|
||||
"TAIL_GRID_FAST_MAX_DAILY_CHG", "TAIL_GRID_COARSE_MAX_DAILY_CHG",
|
||||
"TAIL_GRID_FAST_SYMBOL_LOSS_PCT", "TAIL_GRID_FAST_SYMBOL_LOSS_KRW",
|
||||
"TAIL_GRID_FAST_REENTRY_MIN_EDGE",
|
||||
@@ -830,6 +835,10 @@ ENV_CONFIG_KEYS = (
|
||||
"PSBL_RVSECNCL_TR_ID",
|
||||
"PSBL_RVSECNCL_INQR_DVSN_1",
|
||||
"PSBL_RVSECNCL_INQR_DVSN_2",
|
||||
"CANCELABLE_CCLD_MAX_PAGES",
|
||||
"SELL_LOCKED_ENQUEUE_COOLDOWN_SEC",
|
||||
"CANCELABLE_RECONCILE_ENABLED",
|
||||
"CANCELABLE_RECONCILE_CANCEL_RETRY",
|
||||
# 잔고 연속조회 최대 페이지 (1p=실전50/모의20종목) — 보유 많을 때 누락 방지
|
||||
"BALANCE_MAX_PAGES",
|
||||
# WebSocket 실시간 가격 캐시 유효기간(초): 이 시간 이상 지나면 REST 재조회
|
||||
@@ -4519,8 +4528,19 @@ class TradeDB:
|
||||
return saved
|
||||
|
||||
def _insert_env_auth_row(self, snapshot: Dict[str, Any], created_at: str) -> Optional[int]:
|
||||
"""env_auth_config 1행 INSERT (앱키/시크릿/ID/계좌 전용)."""
|
||||
"""env_auth_config 1행 INSERT (앱키/시크릿/ID/계좌 전용).
|
||||
|
||||
snapshot 에 실제 값이 있는 인증키가 하나도 없으면 빈 행 방지를 위해 INSERT 생략.
|
||||
"""
|
||||
try:
|
||||
# 빈 행 방지 가드: 실제 값을 가진 키가 하나도 없으면 저장 생략
|
||||
has_any = any(
|
||||
snapshot.get(k) is not None and str(snapshot.get(k)).strip() != ""
|
||||
for k in ENV_AUTH_KEYS
|
||||
)
|
||||
if not has_any:
|
||||
logger.debug("env_auth_config INSERT 생략 — snapshot에 인증키 값 없음 (빈 행 방지)")
|
||||
return None
|
||||
key_list = ", ".join(f"`{k}`" for k in ENV_AUTH_KEYS)
|
||||
placeholders = ", ".join(["%s"] * (1 + len(ENV_AUTH_KEYS)))
|
||||
vals = [created_at] + [snapshot.get(k, None) for k in ENV_AUTH_KEYS]
|
||||
|
||||
Reference in New Issue
Block a user