CoolFace
Apppublic

BluefxPraise/The_Oracle

sourceHugging Faceupdated 5mo agoView on Hugging Face
0likes
walkforward.py34 linesDownload Raw Back to backtest
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