Paste returns or trade P&L from any backtest. Run 10,000 block-bootstrap resamples in your browser. Read off the 5th/50th/95th percentile confidence intervals for Sharpe and max drawdown — and see the full resampled distribution as a histogram. Built for Hyperliquid 15-minute return series.
500 values parsed.
One value per bar. Decimal (0.0012) or with % (0.12%). Comma- or newline-separated.
Default 10,000, max 100,000.
20-40 for HL 15-min; 96 for daily-persistence.
Adjust inputs and click Run Monte Carlo. Bootstrap runs in your browser — no upload.
A single backtest produces one Sharpe and one max drawdown — a point estimate. Block-bootstrap Monte Carlo answers the question the point estimate cannot: across many plausible realizations of the same underlying return process, what is the distribution of outcomes? You read the answer off as a confidence interval.
for i in 1..N:
sample = moving_block_bootstrap(returns, L)
sharpe[i], max_dd[i] = metrics(sample)
ci_low, median, ci_high = percentile(sharpe, [5, 50, 95])Why blocks. Real return series are autocorrelated — momentum, mean reversion, volatility clustering, funding-regime persistence. Plain (i.i.d.) bootstrap destroys all of that. Block bootstrap resamples contiguous chunks of length L, which preserves local autocorrelation while still randomizing the global sample. For HL 15-minute bars, L = 20-40 is the right default for most signal classes; carry strategies with multi-day persistence want L = 96 (one day) or more.
What to do with the CI. The lower quantile is your honest planning number, not the median. A Sharpe with 90% CI [0.4, 3.8] is a fundamentally different decision than [1.7, 2.5] even at identical point estimate. For max drawdown the 95th-percentile bootstrap value is the right capital-planning number, not the single observed max DD in your backtest sample.
The widget caps N at 100,000 to keep in-browser runtime under a few seconds for typical return series. For larger series or tail-of-tail statistics, the same algorithm runs unbounded outside the browser — drop the same returns into a Python notebook with NumPy and run as many resamples as you want.
Keel is a Strategy OS for AI-assisted systematic trading on Hyperliquid. Build, backtest, and run live strategies with realistic fees, slippage, and funding modeled. Free to start — connect a Hyperliquid wallet when you’re ready to go live.
It takes a CSV of trade P&L or per-bar returns, resamples it thousands of times using block bootstrap to preserve autocorrelation, computes Sharpe and max drawdown on each synthetic run, and returns the distribution. You get 5th/50th/95th percentile confidence intervals and a histogram of each metric across all resamples.
Plain bootstrap resamples individual returns independently. That assumes no autocorrelation. Real return series — and especially Hyperliquid 15-minute returns — have non-trivial autocorrelation from momentum, mean-reversion, volatility clustering, and funding-regime persistence. Plain bootstrap breaks all of that and produces confidence intervals that are too tight. Block bootstrap resamples contiguous chunks of length L so the local serial structure is preserved.
Block length should approximately match the autocorrelation horizon of your returns. For HL 15-minute bars: default 20-40 (5-10 hours) for most signals; bump to 96 (one day) for carry strategies with multi-day persistence; drop to 8-12 for sub-hour mean reversion. When unsure, sweep across 10/20/40/96 — the point-estimate median should be stable, but the CI width should grow with block length up to the autocorrelation horizon.
Default is 10,000. That is enough for stable 5th/95th percentile estimates. For 99% CIs or extreme-tail statistics push to 20-50K. Below 5K the percentile estimates start to wobble run-to-run. Above 100K rarely changes anything meaningful. The widget caps at 100K to keep in-browser runtime under a few seconds.
No. The CSV is parsed in your browser and the bootstrap runs entirely in JavaScript on this page. Nothing is sent to a server. You can run this air-gapped on local Keel backtest output.
Today Keel reports point-estimate metrics from the backtest engine. Bootstrap CIs on those metrics are on the roadmap — no committed ship date. This widget is the bridge until native MC ships. Once it does, you will get the same CIs directly in the Keel metrics card without exporting and re-importing.
Single-sample max drawdown with duration and recovery. Pair with this MC widget to see how much your single observed max DD could plausibly have been worse.
Side-by-side risk-adjusted return ratios. Bootstrap CIs on Sortino are equally informative — drop your returns into both tools.
Sibling rigor tool. Monte Carlo handles sequence risk; walk-forward handles parameter overfit. Use both before sizing a live strategy.
For the longer-form HL framing — why 15-minute bars on Hyperliquid are autocorrelated, how to size block length for carry vs momentum, what wide CIs on max drawdown should change about live sizing — see Monte Carlo simulation on Hyperliquid backtests. Native Monte Carlo inside the Keel backtest engine is on the roadmap; this widget is the bridge until then.