29 lines
1.3 KiB
Python
29 lines
1.3 KiB
Python
from data.loader import load_candles, resample_candles
|
|
from engine.backtester import run_backtest
|
|
from strategies.categorical_strategy import CategoricalStrategy
|
|
|
|
candles_1m = load_candles("data/gbpjpy_jan.csv")
|
|
candles_5m = resample_candles(candles_1m, period=5)
|
|
|
|
best_pnl = float("-inf")
|
|
best_params = None
|
|
|
|
for lookback in [10, 15, 20, 30, 40, 50]:
|
|
for threshold in [0.2, 0.3, 0.4, 0.5, 0.7, 1.0]:
|
|
for atr_mult in [0.3, 0.4, 0.5, 0.6, 0.7]:
|
|
strategy = CategoricalStrategy(
|
|
lookback=lookback,
|
|
range_threshold=threshold,
|
|
atr_multiplier=atr_mult
|
|
)
|
|
trades = run_backtest(candles_5m, strategy, 10000)
|
|
if len(trades) < 50:
|
|
continue
|
|
total_pnl = sum(t.pnl for t in trades)
|
|
win_rate = len([t for t in trades if t.pnl > 0]) / len(trades) * 100
|
|
if total_pnl > best_pnl:
|
|
best_pnl = total_pnl
|
|
best_params = (lookback, threshold, atr_mult)
|
|
print(f"New best: LB={lookback}, TH={threshold}, ATR={atr_mult} -> PnL={total_pnl:.2f}, WR={win_rate:.1f}%, Trades={len(trades)}")
|
|
|
|
print(f"\nBest: lookback={best_params[0]}, threshold={best_params[1]}, atr_mult={best_params[2]}, PnL={best_pnl:.2f}") |