import os import glob import json import fnmatch results_dir = "kis_trader/backtest/results" strats = ["MOMENTUM", "BREAKOUT", "SCALP", "TAIL"] for strat in strats: # Find latest json file for this strategy pattern = f"optuna_{strat.lower()}_fast_20*.json" files = glob.glob(os.path.join(results_dir, pattern)) if not files: print(f"[{strat}] No JSON file found.") continue latest_file = max(files, key=os.path.getmtime) with open(latest_file, 'r', encoding='utf-8') as f: data = json.load(f) ob = data.get("orderbook_recommend", {}) ws = data.get("whipsaw_recommend", {}) print(f"=== {strat} ===") if ob.get("ok"): p = ob.get("params", {}) s = ob.get("recommended_stats", {}) print(f" [호가 필터]") print(f" - 승률: {s.get('win_rate', 0)}% (모수: {s.get('count', 0)}건)") print(f" - PnL 보정치: +{s.get('pnl_diff', 0):,}원") print(f" - 파라미터: max_spread={p.get('orderbook_max_spread_pct')}%, min_ratio={p.get('orderbook_min_bid_ask_ratio')}, ask_mult={p.get('orderbook_entry_ask_max_mult')}, bid_mult={p.get('orderbook_entry_bid_depth_mult')}") else: print(f" [호가 필터] 추천 없음 ({ob.get('reason', 'N/A')})") if ws.get("ok"): p = ws.get("params", {}) s = ws.get("recommended_stats", {}) print(f" [휩쏘 필터]") print(f" - 승률: {s.get('win_rate', 0)}% (모수: {s.get('count', 0)}건)") print(f" - PnL 보정치: +{s.get('pnl_diff', 0):,}원") print(f" - 파라미터: subbar={p.get('whipsaw_subbar_sec')}초, lookback={p.get('whipsaw_lookback_sec')}초, dip_pct={p.get('whipsaw_dip_pct')}") else: print(f" [휩쏘 필터] 추천 없음 ({ws.get('reason', 'N/A')})") print("")