refactor: enhance Optuna backtesting framework, optimize orderbook filtering, and update database management utilities.

This commit is contained in:
Your Name
2026-08-12 10:19:19 +09:00
parent cb7e5037a0
commit c6bd62a25f
218 changed files with 31613 additions and 759 deletions

View File

@@ -4,6 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>📈 KIS Quant 백테스트 대시보드</title>
<link rel="icon" href="data:,">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.4/dist/chart.umd.min.js"></script>
<link rel="stylesheet" href="{{ url_for('static', filename='css/backtest.css') }}">
@@ -51,7 +52,10 @@
<button type="button" class="btn btn-outline-danger" id="kis_mock_btn_live"
onclick="kisMockSet(false)">실전</button>
</div>
<span id="kis_mock_status" class="text-muted" style="font-size:11px;white-space:nowrap"></span>
<div class="d-flex flex-column ms-1">
<span id="kis_mock_status" class="text-muted" style="font-size:11px;white-space:nowrap"></span>
<span id="live_source_status" class="text-muted" style="font-size:10px;white-space:nowrap">캔들: - | 시세: -</span>
</div>
</div>
</div>
</nav>
@@ -528,9 +532,21 @@
<label for="bt_univ_history_source" class="mb-0">이력소스</label>
<select class="form-select form-select-sm" id="bt_univ_history_source" style="width:160px"
title="BACKTEST_UNIVERSE_HISTORY_SOURCE — 키움 target_candidates_history / LS ls_candidates_history">
<option value="kiwoom" selected>키움 (target)</option>
<option value="kiwoom" selected>키움 (target_candidates)</option>
<option value="ls">LS (ls_candidates)</option>
</select>
<label class="mb-0 ms-2">캔들</label>
<select class="form-select form-select-sm" id="bt_candle_source" style="width:70px">
<option value="">기본</option><option value="kis">KIS</option><option value="kiwoom">키움</option>
</select>
<label class="mb-0 ms-1">시세(틱)</label>
<select class="form-select form-select-sm" id="bt_tick_source" style="width:70px">
<option value="">기본</option><option value="kis">KIS</option><option value="kiwoom">키움</option>
</select>
<label class="mb-0 ms-1">호가</label>
<select class="form-select form-select-sm" id="bt_ob_source" style="width:70px">
<option value="">기본</option><option value="kis">KIS</option><option value="kiwoom">키움</option>
</select>
</div>
<div class="form-check mt-1">
<input class="form-check-input" type="checkbox" id="bt_env_timeline">
@@ -599,6 +615,34 @@
<label class="form-label param-row" title="종목당 하루 최대 거래횟수">일일최대매수</label>
<input type="number" class="form-control" id="bt_max_daily" value="3" min="1" max="10">
</div>
</div>
<div class="row g-2 align-items-center mt-2 p-2 rounded" style="background:#161b22;border:1px solid #30363d">
<div class="col-12"><span class="text-muted" style="font-size:11px"><b style="color:#79c0ff">EOD 장마감 청산</b></span></div>
<div class="col-auto d-flex align-items-end">
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" id="bt_eod_enabled" checked>
<label class="form-check-label" for="bt_eod_enabled">적용</label>
</div>
</div>
<div class="col-auto">
<label class="form-label param-row" title="청산 시작 시간 (HH:MM)">시간</label>
<input type="time" class="form-control form-control-sm" id="bt_eod_time" value="15:25">
</div>
<div class="col-auto">
<label class="form-label param-row" title="미체결 주문(지정가 등) 전체 취소 여부">미체결취소</label>
<select class="form-select form-select-sm" id="bt_eod_cancel_open">
<option value="1" selected>Y (전체취소)</option>
<option value="0">N (유지)</option>
</select>
</div>
<div class="col-auto">
<label class="form-label param-row" title="보유 종목 시장가 전량 매도 여부">시장가매도</label>
<select class="form-select form-select-sm" id="bt_eod_sell_holdings">
<option value="1" selected>Y (전량매도)</option>
<option value="0">N (오버나잇)</option>
</select>
</div>
<div class="col-auto d-flex align-items-end">
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" id="bt_eod_enabled" checked>
@@ -847,9 +891,21 @@
<label for="tl_univ_history_source" class="mb-0">이력소스</label>
<select class="form-select form-select-sm" id="tl_univ_history_source" style="width:160px"
title="BACKTEST_UNIVERSE_HISTORY_SOURCE — 키움 / LS">
<option value="kiwoom" selected>키움 (target)</option>
<option value="kiwoom" selected>키움 (target_candidates)</option>
<option value="ls">LS (ls_candidates)</option>
</select>
<label class="mb-0 ms-2">캔들</label>
<select class="form-select form-select-sm" id="tl_candle_source" style="width:70px">
<option value="">전체</option><option value="kis">KIS</option><option value="kiwoom">키움</option>
</select>
<label class="mb-0 ms-1">시세(틱)</label>
<select class="form-select form-select-sm" id="tl_tick_source" style="width:70px">
<option value="">전체</option><option value="kis">KIS</option><option value="kiwoom">키움</option>
</select>
<label class="mb-0 ms-1">호가</label>
<select class="form-select form-select-sm" id="tl_ob_source" style="width:70px">
<option value="">전체</option><option value="kis">KIS</option><option value="kiwoom">키움</option>
</select>
</div>
<div class="form-check form-check-inline mt-1">
<input class="form-check-input" type="checkbox" id="tl_use_tick_db" checked>
@@ -1768,9 +1824,21 @@
<label for="bo_univ_history_source" class="mb-0">이력소스</label>
<select class="form-select form-select-sm" id="bo_univ_history_source" style="width:160px"
title="BACKTEST_UNIVERSE_HISTORY_SOURCE — 키움 / LS">
<option value="kiwoom" selected>키움 (target)</option>
<option value="kiwoom" selected>키움 (target_candidates)</option>
<option value="ls">LS (ls_candidates)</option>
</select>
<label class="mb-0 ms-2">캔들</label>
<select class="form-select form-select-sm" id="bo_candle_source" style="width:70px">
<option value="">기본</option><option value="kis">KIS</option><option value="kiwoom">키움</option>
</select>
<label class="mb-0 ms-1">시세(틱)</label>
<select class="form-select form-select-sm" id="bo_tick_source" style="width:70px">
<option value="">기본</option><option value="kis">KIS</option><option value="kiwoom">키움</option>
</select>
<label class="mb-0 ms-1">호가</label>
<select class="form-select form-select-sm" id="bo_ob_source" style="width:70px">
<option value="">기본</option><option value="kis">KIS</option><option value="kiwoom">키움</option>
</select>
</div>
<div class="form-check mt-1">
<input class="form-check-input" type="checkbox" id="bo_env_timeline">
@@ -2180,9 +2248,21 @@
<label for="mom_univ_history_source" class="mb-0">이력소스</label>
<select class="form-select form-select-sm" id="mom_univ_history_source" style="width:160px"
title="BACKTEST_UNIVERSE_HISTORY_SOURCE — 키움 / LS">
<option value="kiwoom" selected>키움 (target)</option>
<option value="kiwoom" selected>키움 (target_candidates)</option>
<option value="ls">LS (ls_candidates)</option>
</select>
<label class="mb-0 ms-2">캔들</label>
<select class="form-select form-select-sm" id="mom_candle_source" style="width:70px">
<option value="">기본</option><option value="kis">KIS</option><option value="kiwoom">키움</option>
</select>
<label class="mb-0 ms-1">시세(틱)</label>
<select class="form-select form-select-sm" id="mom_tick_source" style="width:70px">
<option value="">기본</option><option value="kis">KIS</option><option value="kiwoom">키움</option>
</select>
<label class="mb-0 ms-1">호가</label>
<select class="form-select form-select-sm" id="mom_ob_source" style="width:70px">
<option value="">기본</option><option value="kis">KIS</option><option value="kiwoom">키움</option>
</select>
</div>
</div>
</div>
@@ -3694,10 +3774,34 @@
<div class="col-auto">
<label class="form-label param-row" title="BACKTEST_UNIVERSE_HISTORY_SOURCE — 키움 target_candidates_history / LS ls_candidates_history">이력소스</label>
<select class="form-select form-select-sm" id="opt_univ_history_source" style="width:160px">
<option value="kiwoom" selected>키움 (target)</option>
<option value="kiwoom" selected>키움 (target_candidates)</option>
<option value="ls">LS (ls_candidates)</option>
</select>
</div>
<div class="col-auto">
<label class="form-label param-row">캔들소스</label>
<select class="form-select form-select-sm" id="opt_candle_source" style="width:80px">
<option value="" selected>기본</option>
<option value="kis">KIS</option>
<option value="kiwoom">키움</option>
</select>
</div>
<div class="col-auto">
<label class="form-label param-row">틱소스</label>
<select class="form-select form-select-sm" id="opt_tick_source" style="width:80px">
<option value="" selected>기본</option>
<option value="kis">KIS</option>
<option value="kiwoom">키움</option>
</select>
</div>
<div class="col-auto">
<label class="form-label param-row">호가소스</label>
<select class="form-select form-select-sm" id="opt_ob_source" style="width:80px">
<option value="" selected>기본</option>
<option value="kis">KIS</option>
<option value="kiwoom">키움</option>
</select>
</div>
<div class="col-auto">
<button class="btn btn-sm btn-primary" id="opt_btn_start" onclick="optunaStart()">시작</button>
<button class="btn btn-sm btn-outline-danger" id="opt_btn_stop" onclick="optunaStop()" disabled>중지</button>