refactor: enhance Optuna backtesting framework, optimize orderbook filtering, and update database management utilities.

This commit is contained in:
Your Name
2026-08-12 10:19:19 +09:00
parent cb7e5037a0
commit c6bd62a25f
218 changed files with 31613 additions and 759 deletions

View File

@@ -0,0 +1,45 @@
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("")