이번에 들어간 내용
한투 호가 = 2번째 앱키 전용 키 없거나 start 실패 시 메인에 H0STASP0 안 붙임. 운영설정 WS_ORDERBOOK_SAVE_KIS 빨간 danger. LS RAM 합집합 후보∪보유∪영구∪grace. sync_targets와 split reconcile 둘 다. 틱 DB 영구 게이트는 그대로. 분봉 쓰레기 → 다음 소스 봉 통째 그 분 틱 0건이거나 전부 봉끝 대비 LIVE_FEED_FALLBACK_MAX_AGE_SEC 초과면 구멍. 메인 WS → 2차 → LS → REST → rollup. CANDLE_GARBAGE_FALLBACK 기본 true. 파일: feed_fallback.py(신규), ws_manager.py, kis_ws.py, candle_series.py, bt_candle_source.py, live_config_schema.py, database.py, 스모크, MD 2개. 같은 ws_manager/database/kis_ws/live_config에는 직전 커밋 이후 쌓여 있던 시세 폴백·ENV 키 정리도 같이 들어갔습니다. 파일 단위로 나눌 수 없어서입니다.
This commit is contained in:
@@ -29,6 +29,9 @@
|
||||
<div class="optuna-prog-track">
|
||||
<div class="optuna-prog-fill" id="optuna_nav_fill" style="width:0%"></div>
|
||||
</div>
|
||||
<div class="optuna-prog-track mt-1 d-none" id="optuna_nav_post_track" style="height:4px">
|
||||
<div class="optuna-prog-fill is-post" id="optuna_nav_post_fill" style="width:0%"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 전략 백테 CLI 잡 전역 미니 프로그레스 (탭 이동해도 유지, 전역 1잡) -->
|
||||
<div id="btjob_nav_bar" class="optuna-nav-bar d-none flex-grow-1" style="max-width:360px;cursor:pointer"
|
||||
@@ -131,13 +134,12 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="card p-3">
|
||||
<h6 class="mb-3">전략별 당일 운영 <small class="text-muted fw-normal">(키움 · LS 두 줄)</small></h6>
|
||||
<h6 class="mb-3">전략별 당일 운영 <small class="text-muted fw-normal">(증권사별 — 키움 · 한투)</small></h6>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm table-hover mb-0 dash-ops-table" style="font-size:13px">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>전략</th>
|
||||
<th>소스</th>
|
||||
<th>ON</th>
|
||||
<th class="text-end">매수대금</th>
|
||||
<th class="text-end">매도대금</th>
|
||||
@@ -177,10 +179,10 @@
|
||||
<p class="text-muted mt-2 mb-0" style="font-size:11px" id="dash_notes"></p>
|
||||
</div>
|
||||
|
||||
<!-- 조건검색 이력: 전략별 키움 / LS 두 줄 -->
|
||||
<!-- 조건검색 이력: 키움 target_candidates_history 원툴 -->
|
||||
<div class="card p-3 mt-3">
|
||||
<div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mb-2">
|
||||
<h6 class="mb-0">조건검색 이력 (키움 · LS) — 전략별 두 줄</h6>
|
||||
<h6 class="mb-0">조건검색 이력 (키움)</h6>
|
||||
<small id="dash_univ_meta" class="text-muted"></small>
|
||||
</div>
|
||||
<div class="table-responsive dash-univ-wrap">
|
||||
@@ -188,7 +190,6 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>전략</th>
|
||||
<th>소스</th>
|
||||
<th>실매소스</th>
|
||||
<th class="text-end">슬롯</th>
|
||||
<th class="text-end">종목수</th>
|
||||
@@ -380,9 +381,10 @@
|
||||
<!-- ═══ 보유·매도 (DB 동기화) ═══════════════════════════════════════════ -->
|
||||
<div id="tab-portfolio" style="display:none">
|
||||
<div class="card p-3 mb-3">
|
||||
<div style="font-size:12px;color:var(--muted);line-height:1.6">
|
||||
<b>실거래 분석</b> = 오늘 <b>매도 완료</b> 내역(trade_history). <b>보유·매도</b> = 지금 <b>잔고</b>(HTS 실시간잔고와 동일).
|
||||
<b>실계좌 대조</b>를 눌러야 삼성전자·삼화전자 등 전 종목이 보입니다. DB에 없는 종목은 <span class="badge-loss">미등록</span> — 봇 매도 버튼 없음(HTS 매도 또는 추후 동기화).
|
||||
<div style="font-size:12px;color:var(--muted);line-height:1.65">
|
||||
<b>진실은 한투 실잔고</b>입니다. RAM·DB는 봇이 기억한 메모일 뿐.
|
||||
재시작해도 RAM은 사라지고, 봇은 <code>active_trades</code>만 다시 읽습니다.
|
||||
<b>HTS에서 팔지 마세요</b> — 실잔고만 비우고 DB는 남아 <b>유령</b>이 됩니다.
|
||||
</div>
|
||||
<div class="row g-3 align-items-end mt-2">
|
||||
<div class="col-12">
|
||||
@@ -416,21 +418,24 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<button class="btn btn-primary" onclick="pfLoad(false)">🔄 새로고침</button>
|
||||
<button class="btn btn-primary" onclick="pfLoad(false)" title="active_trades 만 다시 읽음. 한투 REST 없음.">1. 🔄 DB 새로고침</button>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<button class="btn btn-outline-secondary" onclick="pfLoad(true)" title="한투 잔고 API 1회 (수 초)">📡 실계좌 대조</button>
|
||||
<button class="btn btn-outline-secondary" onclick="pfLoad(true)" title="한투 잔고 1회 조회 후 DB와 나란히 표시. 고치지는 않음.">2. 📡 실계좌 대조</button>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<button class="btn btn-outline-success" onclick="pfReconcileOrphans()" title="봇이 매수했지만 active_trades 에 누락된 종목을 DB에 복구(매도 아님). 수동매수·보호종목 제외.">🧩 봇고아 DB복구</button>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<button class="btn btn-outline-danger" onclick="pfSellUntrackedAll()" title="active_trades 에 없는(전략 비어있는) 실계좌 보유분만 시장가 일괄매도. 봇 관리분은 건드리지 않음.">🧹 미등록 전량 매도</button>
|
||||
<button class="btn btn-outline-success" onclick="pfReconcileOrphans()" title="매도 없음. 실잔고 기준으로 고아→DB복구 · 유령행 삭제 · 수량/평단 맞춤. 봇 기동 시에도 자동 1회.">3. 🧩 잔고=DB 맞추기</button>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<span class="text-muted" id="pf_meta" style="font-size:12px"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-2 p-2" style="font-size:11px;color:var(--muted);line-height:1.65;background:rgba(88,166,255,0.06);border-radius:6px">
|
||||
<b>쓰는 순서</b> (수동매매 안 할 때)<br>
|
||||
<b>1 DB 새로고침</b> — 봇이 기억하는 보유만 봄 (빠름).<br>
|
||||
<b>2 실계좌 대조</b> — 한투에 있는데 DB에 없으면 봇고아, DB만 있고 한투 0주면 유령.<br>
|
||||
<b>3 잔고=DB 맞추기</b> — <u>주문 안 냄</u>. 고아는 DB에 넣고, 유령 행은 지움. 봇 기동 시 자동 1회. 장중 꼬이면 이 버튼.
|
||||
</div>
|
||||
<!-- 실계좌 대조 시 계좌 요약 (입금·예수금·평가) -->
|
||||
<div class="row g-2 mt-2" id="pf_account_row" style="display:none">
|
||||
<div class="col-6 col-md-3"><div class="card p-2" style="background:rgba(88,166,255,0.06);border-color:var(--accent)">
|
||||
@@ -451,12 +456,12 @@
|
||||
</div></div>
|
||||
</div>
|
||||
<div class="mt-2" style="font-size:11px;color:var(--muted);line-height:1.5">
|
||||
<b>동기 배지:</b>
|
||||
<span class="badge-win">OK</span> DB·실계좌 수량 일치 ·
|
||||
<span class="badge-loss">주의</span> 수량 불일치(HTS에서 수동 매매했을 수 있음) ·
|
||||
<span class="badge-loss">봇고아</span> 봇 매수 기록은 있는데 active_trades 없음 →
|
||||
<b>🧩 봇고아 DB복구</b> ·
|
||||
<span class="badge-win">홀딩봇</span> HOLDING 관리 종목(여기서 매도 안 함)
|
||||
<b>배지:</b>
|
||||
<span class="badge-win">OK</span> DB·실잔고 수량 같음 ·
|
||||
<span class="badge-loss">주의</span> 수량은 다른데 둘 다 있음 (3번으로 맞춤) ·
|
||||
<span class="badge-loss">봇고아</span> 실잔고 O · DB X · 봇 BUY 있음 → <b>3번</b> ·
|
||||
<span class="badge-win">홀딩봇</span> HOLDING 관리(여기서 매도 안 함) ·
|
||||
행의 <b>DB없음</b> = 매도 버튼 없음(active_trades 없음). 유령(DB O · 실잔고 0)은 버튼이 있음 → 3번이 행을 지움.
|
||||
</div>
|
||||
</div>
|
||||
<div class="trade-sort-bar mb-2" id="pf_sort_bar">
|
||||
@@ -1174,12 +1179,12 @@
|
||||
<input type="number" class="form-control" id="tl_tail_vol_win" value="5" min="1" max="30" step="1" style="width:58px">
|
||||
</div>
|
||||
<div class="col-4 col-md-1">
|
||||
<label class="form-label param-row" style="font-size:11px">봉등락MIN%</label>
|
||||
<label class="form-label param-row" style="font-size:11px" title="3분 신호봉 직전대비 등락 하한(%). TPE -25~-3 · 실매 -10">봉등락MIN%</label>
|
||||
<input type="number" class="form-control" id="tl_bar_chg_min" value="-10" min="-30" max="0" step="0.5">
|
||||
</div>
|
||||
<div class="col-4 col-md-1">
|
||||
<label class="form-label param-row" style="font-size:11px">봉등락MAX%</label>
|
||||
<input type="number" class="form-control" id="tl_bar_chg_max" value="-1.5" min="-30" max="0" step="0.5">
|
||||
<label class="form-label param-row" style="font-size:11px" title="3분 신호봉 직전대비 등락 상한(%). TPE -2~+10 · 실매 -0.5. 양수=반등봉 허용">봉등락MAX%</label>
|
||||
<input type="number" class="form-control" id="tl_bar_chg_max" value="-1.5" min="-30" max="15" step="0.5">
|
||||
</div>
|
||||
</div>
|
||||
<!-- 반전 패턴 OR (TRIGGER — 낙폭·회복 필터 AND 유지) -->
|
||||
@@ -3733,14 +3738,28 @@
|
||||
<label class="form-check form-check-inline mb-0" title="전역 US_MOMENTUM_* 만 · 종목 cfg는 🇺🇸탭">
|
||||
<input class="form-check-input opt-strat-cb" type="checkbox" value="us_momentum"> 해외모멘텀(전역)
|
||||
</label>
|
||||
<label class="form-check form-check-inline mb-0"><input class="form-check-input opt-strat-cb" type="checkbox" value="tail"> 꼬리</label>
|
||||
<label class="form-check form-check-inline mb-0 ms-1" title="꼬리 TPE만. 한 스터디=한 모드. 둘 다 켜면 align 다음 limit_atr 순차 2회">
|
||||
<input class="form-check-input" type="checkbox" id="opt_tail_em_align" checked> align
|
||||
</label>
|
||||
<label class="form-check form-check-inline mb-0" title="지정가 ATR. 틱재생 ON 권장. 엔진 실매 기본값과 동일 계열">
|
||||
<input class="form-check-input" type="checkbox" id="opt_tail_em_limit"> limit_atr
|
||||
</label>
|
||||
<label class="form-check form-check-inline mb-0"><input class="form-check-input opt-strat-cb" type="checkbox" value="breakout"> 돌파</label>
|
||||
<span class="d-inline-flex flex-wrap align-items-center gap-1 px-2 py-1" style="border:1px solid var(--border);border-radius:6px" title="꼬리=전략. align/limit_atr는 진입모드(한 스터디에 섞지 않음). 둘 다 켜면 순차 2회. 둘 다 끄면 꼬리 미실행.">
|
||||
<span class="text-muted" style="font-size:12px">꼬리 진입</span>
|
||||
<label class="form-check form-check-inline mb-0">
|
||||
<input class="form-check-input opt-tail-em" type="checkbox" id="opt_tail_em_align" value="align"> align
|
||||
<small class="text-muted">다음봉시가</small>
|
||||
</label>
|
||||
<label class="form-check form-check-inline mb-0">
|
||||
<input class="form-check-input opt-tail-em" type="checkbox" id="opt_tail_em_limit" value="limit_atr"> limit_atr
|
||||
<small class="text-muted">지정가</small>
|
||||
</label>
|
||||
</span>
|
||||
<span class="d-inline-flex flex-wrap align-items-center gap-1 px-2 py-1" style="border:1px solid var(--border);border-radius:6px" title="돌파=전략. fixed/atr는 손절모드(한 스터디에 섞지 않음). 둘 다 켜면 순차 2회. 둘 다 끄면 돌파 미실행.">
|
||||
<span class="text-muted" style="font-size:12px">돌파 손절</span>
|
||||
<label class="form-check form-check-inline mb-0">
|
||||
<input class="form-check-input opt-bo-sl" type="checkbox" id="opt_bo_sl_fixed" value="fixed"> fixed
|
||||
<small class="text-muted">고정%</small>
|
||||
</label>
|
||||
<label class="form-check form-check-inline mb-0">
|
||||
<input class="form-check-input opt-bo-sl" type="checkbox" id="opt_bo_sl_atr" value="atr"> atr
|
||||
<small class="text-muted">ATR배수</small>
|
||||
</label>
|
||||
</span>
|
||||
<label class="form-check form-check-inline mb-0"><input class="form-check-input opt-strat-cb" type="checkbox" value="scalp"> 스캘핑</label>
|
||||
<button type="button" class="btn btn-sm btn-outline-secondary py-0" onclick="optunaPickKr4()">국내4</button>
|
||||
<button type="button" class="btn btn-sm btn-outline-secondary py-0" onclick="optunaPickNone()">해제</button>
|
||||
@@ -3799,14 +3818,20 @@
|
||||
<button class="btn btn-sm btn-outline-secondary" onclick="optunaRefreshJobs()">새로고침</button>
|
||||
</div>
|
||||
</div>
|
||||
<small class="text-muted d-block mt-2">탐색 게이트 WR/PF=0 · 사후=results_gated · 안정=results_stable · DB 자동적용 안 함 · 2개 이상=순차(병렬 아님) · 이력소스=저장 후보 테이블 · 꼬리 진입 align/limit_atr 둘 다=스터디 2개 순차(한 TPE에 섞지 않음)</small>
|
||||
<small class="text-muted d-block mt-2">탐색 게이트 WR/PF=0 · 사후=results_gated · 안정=results_stable · DB 자동적용 안 함 · 2개 이상=순차(병렬 아님) · 이력소스=저장 후보 테이블 · 꼬리: align/limit_atr 중 켠 것만 · 돌파: fixed/atr 중 켠 것만(둘 다=스터디 2개 순차). 별도 「꼬리」「돌파」체크는 없음</small>
|
||||
</div>
|
||||
|
||||
<div class="card p-3 mb-3" id="opt_status_card">
|
||||
<h6>진행</h6>
|
||||
<div class="small text-muted mb-1">학습 trial</div>
|
||||
<div class="optuna-prog-track mb-2" style="height:10px">
|
||||
<div class="optuna-prog-fill" id="opt_tab_fill" style="width:0%"></div>
|
||||
</div>
|
||||
<div class="small text-muted mb-1">후처리 (호가·휩쏘 · 끝나면 「상세」)</div>
|
||||
<div class="optuna-prog-track mb-2" style="height:10px">
|
||||
<div class="optuna-prog-fill is-post" id="opt_post_fill" style="width:0%"></div>
|
||||
</div>
|
||||
<div id="opt_st_post" class="small text-muted mb-2">후처리 — trial 끝난 뒤 시작</div>
|
||||
<div class="row g-2" style="font-size:13px">
|
||||
<div class="col-md-6">
|
||||
<div><span class="text-muted">상태</span> <b id="opt_st_status">—</b></div>
|
||||
@@ -3834,34 +3859,17 @@
|
||||
mode_combo DB 적용
|
||||
</button>
|
||||
<span id="opt_overfit_badge_mode" class="small ms-1" title="과적합%=이 숫자만 믿으면 내일 틀릴 수 있는 정도(추정). AI 아님.">—</span>
|
||||
<small class="text-muted ms-2">완료 후에만 · TIME_* 미변경 · 위 버튼=타점만 · 트레일/호가는 아래 표 · confirm 필수</small>
|
||||
<small class="text-muted ms-2">완료 후에만 · TIME_* 미변경 · 위 버튼=타점만 · 트레일/호가는 아래 표 · confirm 필수 · mode_combo=TopN 최빈값 조합(표에서 뺌)</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card p-3 mb-3">
|
||||
<h6>비교표 <small class="text-muted">학습1위 · gated1위 · stable1위 · mode_combo</small></h6>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm table-hover mb-1" style="font-size:12px">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>구분</th><th>trial</th><th class="text-end">거래</th>
|
||||
<th class="text-end">승률%</th><th class="text-end">PF</th><th class="text-end">PnL</th>
|
||||
<th class="text-end">손실일</th><th class="text-end">최악일</th><th class="text-end">안정점수</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="opt_compare_tbody">
|
||||
<tr><td colspan="9" class="text-muted">완료 후 표시</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="opt_vs_best" class="small text-muted">—</div>
|
||||
<div id="opt_stable_gates" class="small text-muted mt-1">—</div>
|
||||
<div id="opt_overfit_box" class="mt-2 p-2 small" style="background:rgba(248,81,73,0.06);border:1px solid var(--border);border-radius:6px">
|
||||
<div id="opt_overfit_box" class="p-2 small" style="background:rgba(248,81,73,0.06);border:1px solid var(--border);border-radius:6px">
|
||||
<div class="d-flex flex-wrap justify-content-between gap-2 mb-1">
|
||||
<div class="text-muted">과적합·적용 가능도 <span class="text-muted">(휴리스틱 · 교차검증 아님)</span></div>
|
||||
<div class="text-muted">스터디 과적합 요약 <span class="text-muted">(휴리스틱 · 교차검증 아님 · 적용은 아래 각 행 과적합% 보세요)</span></div>
|
||||
<div id="opt_overfit_score" class="fw-semibold">완료 후 표시</div>
|
||||
</div>
|
||||
<div class="table-responsive mb-2">
|
||||
<div class="table-responsive mb-1">
|
||||
<table class="table table-sm table-hover mb-0" style="font-size:12px">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -3873,83 +3881,117 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="text-muted mb-1">임계값 분포 <span id="opt_thresh_pool" class="text-muted"></span></div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm table-hover mb-0" style="font-size:12px">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>파라미터</th>
|
||||
<th class="text-end">median</th>
|
||||
<th class="text-end">p25</th>
|
||||
<th class="text-end">p75</th>
|
||||
<th>mode</th>
|
||||
<th class="text-end">mode%</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="opt_thresh_dist_tbody">
|
||||
<tr><td colspan="6" class="text-muted">완료 후 표시</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<details class="text-muted">
|
||||
<summary style="cursor:pointer">임계값 분포 (참고 · 적용 판단용 아님)</summary>
|
||||
<div class="mt-1" id="opt_thresh_pool"></div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm table-hover mb-0" style="font-size:12px">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>파라미터</th>
|
||||
<th class="text-end">median</th>
|
||||
<th class="text-end">p25</th>
|
||||
<th class="text-end">p75</th>
|
||||
<th>mode</th>
|
||||
<th class="text-end">mode%</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="opt_thresh_dist_tbody">
|
||||
<tr><td colspan="6" class="text-muted">완료 후 표시</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</details>
|
||||
<div id="opt_overfit_note" class="text-muted mt-1" style="font-size:11px">—</div>
|
||||
</div>
|
||||
<div id="opt_daily_trail_rec" class="mt-2 p-2 small" style="background:rgba(56,139,253,0.08);border:1px solid var(--border);border-radius:6px">
|
||||
<div class="text-muted mb-1">다단트레일 추천 <span class="text-muted">(탐색 축 아님 · DB 적용 시에만 반영)</span></div>
|
||||
<div id="opt_daily_trail_rec_body">완료 후 표시</div>
|
||||
</div>
|
||||
<div id="opt_vs_best" class="d-none">—</div>
|
||||
<div id="opt_compare_tbody" class="d-none"></div>
|
||||
</div>
|
||||
|
||||
<div class="card p-3 mb-3">
|
||||
<h6>사후합격 Top5 <small class="text-muted">results_gated · 「상세」=아래 후처리 표</small></h6>
|
||||
<h6>학습 Top5 <small class="text-muted">results · Optuna 목적함수 1위 풀 · 진행바 best=여기 1위</small></h6>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm table-hover mb-0" style="font-size:12px">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th><th>trial</th><th class="text-end">거래</th>
|
||||
<th class="text-end">승률</th><th class="text-end">PF</th><th class="text-end">PnL</th><th></th>
|
||||
<th class="text-end">승률</th><th class="text-end">PF</th><th class="text-end">PnL</th>
|
||||
<th class="text-end">손실일</th><th class="text-end">최악일</th>
|
||||
<th class="text-end" title="높을수록 좋음. 만점 없음. 일평균PnL − λ×일표준편차(원).">안정점수 ↑</th>
|
||||
<th class="text-end" title="높을수록 위험. 0~100. 이 숫자만 믿으면 내일 틀릴 수 있는 정도(추정).">과적합% ↓</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="opt_top5_learn_tbody">
|
||||
<tr><td colspan="11" class="text-muted">완료 후 표시</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card p-3 mb-3">
|
||||
<h6>사후합격 Top5 <small class="text-muted">results_gated · 「상세」=아래 후처리 표(8방 호가)</small></h6>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm table-hover mb-0" style="font-size:12px">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th><th>trial</th><th class="text-end">거래</th>
|
||||
<th class="text-end">승률</th><th class="text-end">PF</th><th class="text-end">PnL</th>
|
||||
<th class="text-end">손실일</th><th class="text-end">최악일</th>
|
||||
<th class="text-end" title="높을수록 좋음. 만점 없음. 일평균PnL − λ×일표준편차(원).">안정점수 ↑</th>
|
||||
<th class="text-end" title="높을수록 위험. 0~100. 이 숫자만 믿으면 내일 틀릴 수 있는 정도(추정).">과적합% ↓</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="opt_top5_tbody">
|
||||
<tr><td colspan="7" class="text-muted">완료 후 표시</td></tr>
|
||||
<tr><td colspan="11" class="text-muted">완료 후 표시</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card p-3 mb-3">
|
||||
<h6>안정 Top5 <small class="text-muted">results_stable · 「상세」=아래 후처리 표(8방 호가) · 손실일/최악일 게이트</small></h6>
|
||||
<div id="opt_stable_gates" class="small text-muted mb-1">—</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm table-hover mb-0" style="font-size:12px">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th><th>trial</th><th class="text-end">거래</th>
|
||||
<th class="text-end">승률</th><th class="text-end">PF</th><th class="text-end">PnL</th>
|
||||
<th class="text-end">손실일</th><th class="text-end">최악일</th>
|
||||
<th class="text-end" title="높을수록 좋음. 만점 없음. 일평균PnL − λ×일표준편차(원).">안정점수 ↑</th>
|
||||
<th class="text-end" title="높을수록 위험. 0~100. 이 숫자만 믿으면 내일 틀릴 수 있는 정도(추정).">과적합% ↓</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="opt_top5_stable_tbody">
|
||||
<tr><td colspan="11" class="text-muted">완료 후 표시 (구 JSON은 재실행 필요)</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="opt_postprocess_rec" class="mt-3 p-2 small" style="background:rgba(63,185,80,0.06);border:1px solid var(--border);border-radius:6px">
|
||||
<div class="text-muted mb-1">후처리 비교표
|
||||
<span class="text-muted">(Top5 「상세」로 순위 전환 · 열까지 적용=뒤쪽 축은 OFF · 숫자는 유지 · live 참고만)</span>
|
||||
<span class="text-muted">(사후합격·안정 Top5 「상세」 · 열까지 적용=뒤쪽 축은 OFF · live 참고만)</span>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<button class="btn btn-sm btn-outline-secondary py-0" id="opt_btn_pp_rerun" onclick="optunaRerunPostprocess()">이 잡 후처리 재실행</button>
|
||||
<button class="btn btn-sm btn-outline-secondary py-0 ms-1" onclick="optunaSelectPostprocess('mode',1)">mode 상세</button>
|
||||
<span id="opt_pp_rerun_status" class="text-muted ms-1">구 JSON은 재실행해야 호가/휩쏘 숫자가 채워집니다.</span>
|
||||
<button class="btn btn-sm btn-outline-secondary py-0 ms-1" id="opt_btn_mode_detail" onclick="optunaSelectPostprocess('mode',1)">mode 상세</button>
|
||||
<span id="opt_pp_rerun_status" class="text-muted ms-1">후처리 바가 100%·「상세 가능」이 뜬 뒤에 「상세」를 누르세요. 진짜 구 JSON만 재실행.</span>
|
||||
</div>
|
||||
<div id="opt_postprocess_consensus" class="mb-1">합의: 완료 후 표시</div>
|
||||
<div id="opt_postprocess_cards">
|
||||
<div class="text-muted">Top5에서 「상세」를 누르면 이 표가 바뀝니다.</div>
|
||||
<div class="text-muted">사후합격 또는 안정 Top5에서 「상세」를 누르면 이 표가 바뀝니다.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card p-3 mb-3">
|
||||
<h6>안정 Top5 <small class="text-muted">results_stable · 손실일/최악일 게이트 · score=일평균−λ×표준편차</small></h6>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm table-hover mb-0" style="font-size:12px">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th><th>trial</th><th class="text-end">거래</th>
|
||||
<th class="text-end">승률</th><th class="text-end">PnL</th>
|
||||
<th class="text-end">손실일</th><th class="text-end">최악일</th><th class="text-end">안정점수</th><th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="opt_top5_stable_tbody">
|
||||
<tr><td colspan="9" class="text-muted">완료 후 표시 (구 JSON은 재실행 필요)</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card p-3 mb-3" id="opt_detail_card">
|
||||
<h6>선택 후보 상세 <small class="text-muted" id="opt_detail_title">Top5「보기」또는 비교표 행 선택</small></h6>
|
||||
<h6>선택 후보 상세 <small class="text-muted" id="opt_detail_title">Top5「보기」선택</small></h6>
|
||||
<div id="opt_detail_metrics" class="mb-2 small text-muted">아직 선택 없음</div>
|
||||
<pre id="opt_detail_params" class="small p-2 mb-0" style="max-height:220px;overflow:auto;background:#0d1117;border:1px solid var(--border);border-radius:6px;white-space:pre-wrap;color:var(--text)">—</pre>
|
||||
</div>
|
||||
@@ -3961,7 +4003,7 @@
|
||||
|
||||
<div class="card p-3 mb-3">
|
||||
<div class="d-flex flex-wrap justify-content-between align-items-center gap-2 mb-2">
|
||||
<h6 class="mb-0">최근 잡</h6>
|
||||
<h6 class="mb-0">최근 잡 <small class="text-muted fw-normal">(8개)</small></h6>
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<label class="small text-muted mb-0" for="opt_jobs_sort">정렬</label>
|
||||
<select id="opt_jobs_sort" class="form-select form-select-sm" style="width:120px" onchange="optunaRefreshJobs()">
|
||||
|
||||
Reference in New Issue
Block a user