이번에 들어간 내용

한투 호가 = 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:
Your Name
2026-08-19 22:11:31 +09:00
parent d1dc274f0e
commit 0ecac7cb95
229 changed files with 8487 additions and 1647 deletions

View File

@@ -18,6 +18,7 @@ from kis_trader.backtest import breakout_backtest_common as bbc
from kis_trader.backtest.optuna_search_space import breakout_grid_axis_keys, suggest_breakout_params
from kis_trader.backtest.optuna_breakout_tpe_space import (
breakout_tpe_axis_keys,
normalize_tpe_breakout_sl_mode,
suggest_breakout_params_tpe,
)
from kis_trader.backtest.optuna_mode_combo import enrich_out_data_with_mode_combo
@@ -78,6 +79,7 @@ class BreakoutSearchContext:
end_key: str
cache_holder: Dict[str, Any] = field(default_factory=dict)
shared_tick_store: Any = None # ws_ticks 공유메모리 핸들 (종료 시 unlink)
tpe_sl_mode: str = "fixed" # TPE 고정 손절모드(탐색 축 아님)
def prepare_breakout_search_context(
@@ -93,6 +95,7 @@ def prepare_breakout_search_context(
total_budget_krw: Optional[float] = None,
orderbook_filter: str = "off",
history_source: Optional[str] = None,
sl_mode: Optional[str] = None,
) -> Optional[BreakoutSearchContext]:
grids = _breakout_grids()
# tpe = 연속 Optuna 전용 (Grid 메뉴 미사용)
@@ -150,6 +153,14 @@ def prepare_breakout_search_context(
f"총한도 {total_budget_f:,.0f}원 | 매매 {format_session_hm(base_fixed)}"
)
logger.info("📌 진입 모드: %s", breakout_entry_mode())
tpe_sl_mode = "fixed"
if mode == "tpe":
tpe_sl_mode = normalize_tpe_breakout_sl_mode(sl_mode)
base_fixed["sl_mode"] = tpe_sl_mode
logger.info(
"📌 TPE 손절모드 고정: %s (탐색 축 아님 · atr_sl_*/sl_pct 중 해당만)",
tpe_sl_mode,
)
from kis_trader.backtest.universe_history_source import (
resolve_backtest_universe_history_source,
@@ -298,11 +309,12 @@ def prepare_breakout_search_context(
total_budget_krw=total_budget_f,
period_days=period_days,
portfolio=portfolio,
grid_keys=breakout_tpe_axis_keys() if mode == "tpe" else breakout_grid_axis_keys(mode),
grid_keys=breakout_tpe_axis_keys(tpe_sl_mode) if mode == "tpe" else breakout_grid_axis_keys(mode),
start_key=start_key,
end_key=end_key,
cache_holder=cache_holder,
shared_tick_store=shared_tick_store,
tpe_sl_mode=tpe_sl_mode,
)
@@ -339,7 +351,7 @@ def run_breakout_optuna(
def objective(trial: optuna.Trial) -> float:
if ctx.mode == "tpe":
combo = suggest_breakout_params_tpe(trial)
combo = suggest_breakout_params_tpe(trial, sl_mode=ctx.tpe_sl_mode)
else:
combo = suggest_breakout_params(trial, ctx.mode)
result = evaluate_breakout_param_combo(