41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
from data.loader import load_candles, resample_candles
|
|
from engine.backtester import run_backtest
|
|
from strategies.ict_strategy import ICTStrategy
|
|
import time
|
|
|
|
candles_1m = load_candles("data/2023gj.csv")
|
|
candles_5m = resample_candles(candles_1m, period=5)
|
|
|
|
strategy = ICTStrategy(
|
|
session="london",
|
|
lookback=7,
|
|
ob_max_age=50,
|
|
atr_mult=2.5,
|
|
use_liquidity_sweep=True,
|
|
sweep_lookback=5,
|
|
)
|
|
|
|
total_start = time.perf_counter()
|
|
|
|
for rr in [1.0, 1.5, 2.0, 2.5, 3.0]:
|
|
t0 = time.perf_counter()
|
|
trades = run_backtest(candles_5m, strategy, 10000, risk_reward=rr)
|
|
elapsed = time.perf_counter() - t0
|
|
if not trades:
|
|
print(f"RR={rr}: No trades ({elapsed:.2f}s)")
|
|
continue
|
|
total_pnl = sum(t.pnl for t in trades)
|
|
winners = [t for t in trades if t.pnl > 0]
|
|
losers = [t for t in trades if t.pnl <= 0]
|
|
wr = len(winners) / len(trades) * 100
|
|
avg_win = sum(t.pnl for t in winners) / len(winners) if winners else 0
|
|
avg_loss = sum(t.pnl for t in losers) / len(losers) if losers else 0
|
|
|
|
print(
|
|
f"RR={rr}: Trades={len(trades)}, WR={wr:.1f}%, PnL={total_pnl:.2f}, "
|
|
f"AvgW={avg_win:.3f}, AvgL={avg_loss:.3f}, Time={elapsed:.2f}s"
|
|
)
|
|
|
|
total_elapsed = time.perf_counter() - total_start
|
|
print(f"Total run time: {total_elapsed:.2f}s")
|