← rangeRider

rangeRider — Performance

BLOCKEDAudited 2026-09-15· hand-written (no shared engine) engine· quantroduction· spot

Window 3.2 years (2023-07-15 → 2026-09-14, 111,044 bars of 15m) · Markets ADA, BTC, DOGE, ETH, LINK, SOL, XRP Costs 0.10% taker fee + 2 bps slippage on every fill Timeframe declares 15m — tested at its own timeframe Capital 908 quote — probe at 1,000 peaked at 86.3% deployed (863 quote at risk) Sizing fixed quote per order (TRADING_LIMIT = 100)


How this was measured

Every decision is taken on a bar that has closed, and the resulting market order fills at the next bar's open plus slippage. Resting stop and target orders fill intrabar, and when one bar's range covers both the stop and the target the stop is taken first — the pessimistic reading wherever candle data cannot resolve the order of events inside a bar.

The engine is validated separately by 53 known-answer tests covering accounting, fee arithmetic, determinism and the no-look-ahead boundary. Nothing below means anything unless those pass, so the pipeline aborts if they do not.

Result by market

Market Orders Round trips Return Buy & hold Edge Max DD Sharpe Win rate Profit factor Time in market
ADA 17 3 1.2% -31.1% 32.2% 17.1% 0.09 100% — 6.7%
BTC 320 63 21.8% 161.0% -139.3% 13.1% 0.65 100% — 12.5%
DOGE 103 25 6.8% 9.9% -3.1% 23.8% 0.22 100% — 8.4%
ETH 732 142 5.5% 34.3% -28.8% 44.0% 0.23 100% — 98.0%
LINK 100 20 6.7% 49.6% -42.9% 20.5% 0.22 100% — 6.1%
SOL 197 41 13.4% 307.6% -294.3% 26.0% 0.35 100% — 6.1%
XRP 237 49 15.9% 113.2% -97.3% 27.8% 0.33 100% — 17.5%

Median across markets: 6.8% return, 23.8% max drawdown, Sharpe 0.23.

The median is the honest number, not the best market. Ranking a strategy on its best pair measures which pair was picked, not what the strategy does.

Reading these numbers

Variant B — no stop loss, never sells below the position average

The same strategy on the same data, with one rule added: no exit may be priced below the position's average cost. That also removes every stop-loss, since a stop sits below the entry by definition. It is the "never realise a loss" version.

A — as shipped B — no-loss exits
Median return 6.8% 6.8%
Median max drawdown 23.8% 23.8%
Profitable markets 7 / 7 7 / 7
Ends still holding — 1 / 7
Exits refused by the rule 0 0
Market A return B return A max DD B max DD B ends holding
ADA 1.2% 1.2% 17.1% 17.1% no
BTC 21.8% 21.8% 13.1% 13.1% no
DOGE 6.8% 6.8% 23.8% 23.8% no
ETH 5.5% 5.5% 44.0% 44.0% yes
LINK 6.7% 6.7% 20.5% 20.5% no
SOL 13.4% 13.4% 26.0% 26.0% no
XRP 15.9% 15.9% 27.8% 27.8% no

How to read this. Variant B does not even report a higher return here — 6.8% against 6.8% — so on this strategy refusing to take losses costs on both measures. The rule refused 0 exits over the window.

Read the two together rather than picking one. A is what the strategy does; B is what it looks like with its losses deferred instead of taken, and the gap between them measures how much of A's result comes from cutting.

Why it exited

Every exit the engine executed, attributed to the message the strategy emitted on that bar. One bar is one decision, so an event announced on both the console and the side panel is counted once.

Exit Count Share Mean gain Worst
GRID SELL 6 1.7% +1.25% 1.00%
(unexplained) 337 98.3% — —

337 of 343 exits (98.3%) carry no explanation. The position changed and the strategy said nothing about why. That is usually a resting order — a customSellTarget or customStopTarget the exchange fills without calling back into the strategy — in which case the strategy's own P&L, trade count and win rate never saw those trades either. See the fixes report.

Cost sensitivity

The strategy places the same number of orders at 0% fees as at 0.10%. That is a correctness property rather than a performance one: it proves no balance gate becomes unsatisfiable once costs leave the wallet. A strategy that fails this check stops trading silently the moment it meets a real fee schedule.

Market Orders at 0.10% fee Orders at 0% fee Ratio
ADA 14 86 0.16
BTC 257 300 0.86
DOGE 78 28 2.79
ETH 590 639 0.92
LINK 80 188 0.43
SOL 156 171 0.91
XRP 188 262 0.72

Correctness invariants

Invariant Result
runs clean on every market PASS
no phantom chart marks PASS
no negative balances PASS
cost independent (fees change P&L, not the ability to act) FAIL
places orders somewhere PASS

Outstanding notes

What this window cannot tell you

A single year is a small sample, and this one was a broad downtrend.

The engine models spot, long-only, one price per bar. It carries no order book, so it cannot see spread, queue position or depth, and a strategy whose edge is the spread cannot be measured here at all.


Every number on this page is read from the run record that produced it — the audit pipeline writes the page and the record together, so the two cannot drift apart.