Every number on this site comes from the same pipeline. It runs offline, the results are fixed, and each page carries the hash of the inputs that produced it.
| Source | Binance public market data mirror (spot, daily candles) |
| BTC/USDT | 3188 bars · 2018-01-01 → 2026-09-23 · 0 gaps |
| ETH/USDT | 3188 bars · 2018-01-01 → 2026-09-23 · 0 gaps |
| Gaps | Not interpolated. Filling them would invent prices that never traded. |
| Fees | 0.10% taker on both legs |
| Slippage | 0.05% against the fill, every fill |
| Starting capital | 10,000 USDT |
| Instrument | Long-only spot. No leverage, no shorting. |
| Signal timing | Signals read the close and fill at the next open. Filling on the same close would be reading the future. |
| Intrabar order | When a bar could trigger both a favourable and an unfavourable event, the unfavourable one fills first. |
| Ruin threshold | Account equity at or below 10% of starting capital. |
A single backtest is one sample. The rolling window has to be long enough that what comes out reflects the rules rather than one market phase — so every strategy here is run over 365 daily bars, shifted forward 30 days at a time, giving 95 start dates.
Win rates are reported with a 95% Wilson confidence interval. Where that interval spans 50%, the figure cannot be told apart from chance and the page says so rather than dropping the number.
There is no button to re-run a backtest with your own parameters. That is not a missing feature.
Indicator maths is shared between the chart you see and the backtest that produced the numbers — one implementation, not two. A 188-case test suite pins the conventions (warm-up handling, seeding, population standard deviation) and a golden snapshot fails the build if any output value moves.
Each result page carries an input hash over the symbol, period, parameters, assumption set and engine version. Same hash, same numbers.
| Engine | v0.3.0 |
| Built | 2026-09-23T09:00Z |
| Assumption set | a1-taker10-slip05 |