46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
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("")
|