Files
kis_bot/scripts/apply_optuna_whipsaw_consensus.py

67 lines
2.3 KiB
Python
Executable File

#!/usr/bin/env python3
"""
scripts/apply_optuna_whipsaw_consensus.py
====================================
고속 Optuna 탐색으로 도출된 전략별 휩쏘 필터 수급 합의 파라미터(Consensus)를
실제 DB(MariaDB)의 환경변수 스키마에 안전하게 반영하는 스크립트입니다.
실행 예시:
.venv/bin/python3 scripts/apply_optuna_whipsaw_consensus.py --strategy BREAKOUT
.venv/bin/python3 scripts/apply_optuna_whipsaw_consensus.py --strategy MOMENTUM
"""
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_whipsaw_recommend import (
build_whipsaw_env_patch,
recommend_whipsaw_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=500, help="탐색 횟수 (기본 500회)")
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_whipsaw_parameters(strategy=strat, n_trials=args.n_trials)
if not rec.get("ok"):
print(f"❌ 합의 수치 도출 실패: 사유 = {rec.get('reason')}")
return 1
patch = build_whipsaw_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("=======================================================================")
print("👑 [최종 판정] 완결! DB 반영 완료 및 get_env 재조회 패스.")
print("=======================================================================")
if __name__ == "__main__":
sys.exit(main())