A research framework that fits strategies on rolling in-sample windows and validates every signal against out-of-sample data it has never seen. No curve-fit. No look-ahead. No narrative drift — only edges that survive the next candle.
Most crypto backtests are theatre: parameters tuned on the same data they are then evaluated on, look-ahead leakage baked into features, slippage assumed away. The walk-forward protocol exists to make the backtest honest.
Each week the system scores a fixed zoo of 24 configurations on the trailing 30-day window, trades the average of the top 3 out-of-sample for the next week, then rolls forward and re-ranks. OOS returns aggregate into the only equity curve that matters — the one built from weeks the selection never saw when it was chosen.
Every Monday 00:00 UTC, each coin's fixed zoo of 24 configurations (trend EMA crosses, Donchian breakouts, mean-reversion, and cash) is ranked by Sharpe over the trailing 30-day window of 4h bars — net of costs and funding.
The book trades the equal-weight average of the top 3 ranked configurations for the coming week — a plateau, not the single winner, to blunt the winner's curse. If nothing scores positive, the book sits in cash.
Position size targets 50% annualized volatility with a 1.5x cap. The selection is frozen and held out-of-sample for the week; every fill, cost (0.15%/side), and real Binance funding event is recorded against it.
The next Monday the window rolls forward and the zoo is re-ranked on fresh data. The contiguous sequence of weekly out-of-sample returns concatenates into the equity curve — the only performance record reported.
Every position passes through signal generation, risk overlay, execution simulation, and validation. No layer trusts the layer before it; each one re-checks the assumptions it needs to operate.
Trades the equal-weight average of the top 3 configurations from a fixed zoo of 24 configs per coin (trend crosses, breakouts, mean-reversion, and cash). Configurations are ranked by Sharpe over a trailing 30-day window. If nothing scores positive, the book sits in cash.
Enforces a 50% annualized volatility target with a 1.5x cap for position sizing. Incorporates realistic frictions: 0.15% transaction costs per side on every position change, and real Binance funding charged.
Utilizes 4h bars with a weekly refit every Monday 00:00 UTC. The trailing window is 30 days for scoring, meaning the parameters update dynamically without look-ahead or predictive modeling. It adapts to the market instead of predicting it.
Trades BTC and ETH only, 50/50 split, each asset managed in its own independent book. Secondary assets and complex features (e.g. sentiment) were explicitly rejected during research.
Every metric below is computed on the contiguous out-of-sample equity curve. In-sample numbers are kept in the diagnostic logs — never on this page. Open the interactive dashboard for the full equity curve, drawdown profile, and per-asset attribution.
The interactive dashboard exposes the full OOS equity curve, rolling drawdown, monthly returns heatmap, and per-asset contribution.
# Fetch data, fit, walk-forward, render
python -m wf.main \
--universe "BTC,ETH" \
--train-window 30d \
--test-window 7d \
--report "./docs/interactive/dashboard.html"
# → Walk-forward weekly refit completed
# → Full period: Sharpe 1.20 +/- 0.64 · MaxDD -28.0% · CAGR +44.2%/yr
# → Dashboard written to docs/interactive/dashboard.html
Unlike backtests that ignore execution realities, the walk-forward validation framework enforces strict penalties. Every parameter combination is evaluated under realistic transaction friction, execution slippage, and funding cost dynamics.
Position size dynamically targets 50% annualized volatility, capped at 1.5x representing modest simulated leverage to scale exposure safely.
Research showed drawdown brakes destroy returns: with a kill switch, 2025 returned -12.6% vs +41.0% without. Survival relies on config scoring instead.
The system does not predict market states using classifiers. It dynamically adapts by scoring a zoo of 24 configurations over the trailing 30-day window.
Simulation model charges 0.15% per side on every position change and real Binance funding rates on perps, evaluating realistic execution frictions.
Config weighting averages the top 3 configurations to reduce winner's-curse. If no configuration has a positive score, the book sits in cash.
Window optimization runs out-of-sample on 4h bars with a weekly refit every Monday 00:00 UTC, preventing overfitting and forward leakage.