BluefxPraise/The_Oracle
0
1"""Walk-forward validation."""2 3import logging4from typing import Any, Dict, List5 6from backtest.backtest_engine import run as run_backtest7 8log = logging.getLogger("oracle.walkforward")9 10 11def walk_forward(pair: str, candles: List[Dict[str, Any]],12 train_bars: int = 300, test_bars: int = 100,13 weights=None, threshold: float = 70.0) -> Dict[str, Any]:14 if not candles or len(candles) < train_bars + test_bars:15 return {"folds": 0, "avg_pnl": 0, "details": []}16 folds = []17 i = train_bars18 while i + test_bars <= len(candles):19 window = candles[i - train_bars: i + test_bars]20 m = run_backtest(pair, window, days=0, weights=weights, threshold=threshold)21 m["fold_start"] = i22 folds.append(m)23 i += test_bars24 if not folds:25 return {"folds": 0, "avg_pnl": 0, "details": []}26 avg_pnl = sum(f["pnl"] for f in folds) / len(folds)27 avg_wr = sum(f["winrate"] for f in folds) / len(folds)28 return {29 "folds": len(folds),30 "avg_pnl": float(avg_pnl),31 "avg_winrate": float(avg_wr),32 "details": folds,33 }34 