refactor: enhance Optuna backtesting framework, optimize orderbook filtering, and update database management utilities.
This commit is contained in:
87
scripts/apply_optuna_ob_consensus.py
Executable file
87
scripts/apply_optuna_ob_consensus.py
Executable file
@@ -0,0 +1,87 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
scripts/apply_optuna_ob_consensus.py
|
||||
====================================
|
||||
1,000회 고속 Optuna 탐색으로 도출된 전략별 호가 수급 합의 파라미터(Consensus)를
|
||||
실제 DB(MariaDB)의 환경변수 스키마에 안전하게 반영하고,
|
||||
'get_env_from_db' 규칙에 따라 100% 재조회 검증을 마치는 통합 반영 스크립트입니다.
|
||||
|
||||
실행 예시:
|
||||
.venv/bin/python3 scripts/apply_optuna_ob_consensus.py --strategy BREAKOUT
|
||||
.venv/bin/python3 scripts/apply_optuna_ob_consensus.py --strategy SCALP
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
if str(ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(ROOT))
|
||||
|
||||
from database import TradeDB
|
||||
from kis_trader.backtest.optuna_orderbook_recommend import (
|
||||
build_orderbook_env_patch,
|
||||
recommend_orderbook_parameters,
|
||||
)
|
||||
|
||||
|
||||
def main():
|
||||
ap = argparse.ArgumentParser(description="Optuna 호가 합의 파라미터 DB 반영 CLI")
|
||||
ap.add_argument("--strategy", default="MOMENTUM", help="반영 대상 전략명 (MOMENTUM, BREAKOUT, SCALP, TAIL)")
|
||||
ap.add_argument("--n-trials", type=int, default=1000, help="탐색 횟수 (기본 1000회)")
|
||||
args = ap.parse_args()
|
||||
|
||||
strat = args.strategy.upper()
|
||||
print("=" * 75)
|
||||
print(f"🔄 [Optuna 호가 합의 파라미터 DB 자동 반영 엔진]")
|
||||
print(f" - 대상 전략 : {strat}")
|
||||
print(f" - 탐색 규모 : {args.n_trials}회 고속 합의 탐색")
|
||||
print("=" * 75)
|
||||
|
||||
rec = recommend_orderbook_parameters(strategy=strat, n_trials=args.n_trials)
|
||||
if not rec.get("ok"):
|
||||
print(f"❌ 합의 수치 도출 실패: 사유 = {rec.get('reason')}")
|
||||
return 1
|
||||
|
||||
patch = build_orderbook_env_patch(rec)
|
||||
if not patch:
|
||||
print("❌ DB 패치 변환 실패: 대상 파라미터가 없습니다.")
|
||||
return 1
|
||||
|
||||
db = TradeDB()
|
||||
print("📥 [DB 반영 전 대상 파라미터 확인]")
|
||||
for k, v in patch.items():
|
||||
print(f" • {k} ➔ {v}")
|
||||
print()
|
||||
|
||||
# DB 반영 (insert_env_snapshot)
|
||||
db.insert_env_snapshot(patch)
|
||||
print("✅ DB 환경변수 스키마에 패치 전송 완료.")
|
||||
|
||||
# 캐시 무효화 (실전/백테 즉시 반영)
|
||||
try:
|
||||
from kis_trader.utils.env import invalidate_merged_env_cache
|
||||
invalidate_merged_env_cache()
|
||||
except Exception as exc:
|
||||
print(f"⚠️ 캐시 무효화 경고: {exc}")
|
||||
|
||||
# [검증 의무] DB 스냅샷 재조회 후 저장값 100% 정합성 검증
|
||||
print("🛡️ [필수 검증] DB 최신 스냅샷 재조회 및 100% 정합성 검증 중...")
|
||||
saved_env = db.get_merged_env_snapshot()
|
||||
for k, expected_v in patch.items():
|
||||
actual_v = str(saved_env.get(k, "")).lower()
|
||||
exp_v = str(expected_v).lower()
|
||||
if actual_v != exp_v:
|
||||
print(f"❌ [검증 불일치] {k}: expected={exp_v}, actual={actual_v}")
|
||||
return 1
|
||||
print(f" ✅ {k} : {actual_v} (100% 일치)")
|
||||
|
||||
print("-" * 75)
|
||||
print(f"👑 [{strat}] 호가 수급 필터 & 익절 가드 파라미터 DB 완공 및 검증 완결!")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user