diff --git a/kis_trader/backtest/breakout_tick_loader.py b/kis_trader/backtest/breakout_tick_loader.py index 1d074bf..22c71a8 100644 --- a/kis_trader/backtest/breakout_tick_loader.py +++ b/kis_trader/backtest/breakout_tick_loader.py @@ -274,20 +274,23 @@ def load_common_ticks_by_code( try: import os import time - if os.environ.get("BACKTEST_USE_RUST") == "1" and os.path.exists(pq_path): + # 2026-09-06: 파케이 초고속 로드는 엔진(BACKTEST_USE_RUST) 과 별개. + # I/O 최적화일 뿐 → Python/Rust 어느 엔진이든 사용 가능. 파일 없거나 실패면 DB 폴백. + # 근거: 사용자 승인 A안 (docs/rust_engine_parity_port_plan.md). + if os.path.exists(pq_path): import kis_rust_core _st = time.time() - + codes_list = list(codes) if codes else None tick_source = os.environ.get("TICK_SOURCE", "").strip() or None - + res = kis_rust_core.load_parquet_ticks_fast( pq_path, chunk_s_val, chunk_e_val, codes_list, tick_source ) - + _local_out.update(res["data"]) _n = res["count"] - + _et = time.time() logger.info(f"⚡ [Rust Parquet 초고속 로드] day={day_str} rows={_n} (Rust I/O + PyDict: {_et - _st:.3f}s)") return chunk_s_val, chunk_e_val, _local_out, _n diff --git a/kis_trader/backtest/optuna_breakout.py b/kis_trader/backtest/optuna_breakout.py index 094a06e..46ca1f6 100644 --- a/kis_trader/backtest/optuna_breakout.py +++ b/kis_trader/backtest/optuna_breakout.py @@ -436,7 +436,7 @@ def run_breakout_optuna( rust_session_id = f"optuna_break_{uuid.uuid4().hex[:8]}" try: import kis_rust_core - import json + # json 은 파일 상단 import. 함수 안 재import 시 UnboundLocalError (scalping 과 동일). candles_json = json.dumps(ctx.codes_candles) kis_rust_core.init_backtest_session_json( rust_session_id, diff --git a/kis_trader/backtest/optuna_momentum.py b/kis_trader/backtest/optuna_momentum.py index 269880f..6061eee 100644 --- a/kis_trader/backtest/optuna_momentum.py +++ b/kis_trader/backtest/optuna_momentum.py @@ -489,7 +489,7 @@ def run_momentum_optuna( rust_session_id = f"optuna_mome_{uuid.uuid4().hex[:8]}" try: import kis_rust_core - import json + # json 은 파일 상단 import. 함수 안 재import 시 UnboundLocalError (scalping 과 동일). candles_json = json.dumps(ctx.codes_candles) kis_rust_core.init_backtest_session_json( rust_session_id, diff --git a/kis_trader/backtest/optuna_scalping.py b/kis_trader/backtest/optuna_scalping.py index 2e90b76..0793376 100644 --- a/kis_trader/backtest/optuna_scalping.py +++ b/kis_trader/backtest/optuna_scalping.py @@ -424,7 +424,8 @@ def run_scalp_optuna( rust_session_id = f"optuna_scalp_{uuid.uuid4().hex[:8]}" try: import kis_rust_core - import json + # json 은 파일 상단에서 이미 import. 함수 안 재import 하면 Python 이 + # json 을 로컬 변수로 취급 → if False 경로에서 UnboundLocalError. candles_json = json.dumps(ctx.codes_candles) kis_rust_core.init_backtest_session_json( rust_session_id,