donchianBreakoutMM — Performance
Window 6 months (2026-03-13 → 2026-09-12, 263,001 bars of 1m) · Markets ADA, BTC, DOGE, ETH, LINK, SOL, XRP
Costs 0.10% taker fee + 2 bps slippage on every fill
Timeframe declares 1m — tested at its own timeframe
Capital 119 quote — probe at 1,000 peaked at 11.3% deployed (113 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 |
214 | 107 | -16.0% | -21.7% | 5.6% | 16.6% | -6.29 | 20% | 0.12 | 0.7% |
BTC |
228 | 114 | -16.0% | 8.1% | -24.1% | 17.0% | -3.32 | 18% | 0.08 | 6.6% |
DOGE |
208 | 104 | -16.4% | -13.3% | -3.1% | 16.7% | -6.45 | 24% | 0.10 | 0.7% |
ETH |
184 | 92 | -16.3% | 19.2% | -35.5% | 16.5% | -6.34 | 24% | 0.12 | 0.7% |
LINK |
214 | 107 | -16.5% | 20.9% | -37.4% | 18.9% | -1.52 | 31% | 0.10 | 9.5% |
SOL |
228 | 114 | -16.0% | 15.2% | -31.2% | 16.1% | -6.10 | 23% | 0.14 | 0.7% |
XRP |
220 | 110 | -16.3% | -5.6% | -10.7% | 16.5% | -5.93 | 22% | 0.16 | 1.5% |
Median across markets: -16.3% return, 16.6% max drawdown, Sharpe -6.10.
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
- Profitable on 0 of 7 markets, beat buy-and-hold on 1. Those differ because buy-and-hold itself returned a median 8.1% here, so "beat buy-and-hold" can mean nothing more than having held less.
- Best-to-worst spread is 0.5% (BTC -16.0% vs LINK -16.5%). That is reasonably tight across very different assets.
- Time in market is 0.7%. The equity curve is mostly flat cash, so the result rests on a small fraction of the bars however long the window. The 16.6% drawdown is incurred inside that 0.7%, not spread across the window — being out of the market most of the time does not make the committed time any safer.
- Fees cost 17.98% of starting capital at the median, across 748 round trips.
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 | -16.3% | 6.8% |
| Median max drawdown | 16.6% | 33.0% |
| Profitable markets | 0 / 7 | 4 / 7 |
| Ends still holding | — | 7 / 7 |
| Exits refused by the rule | 0 | 445,669 |
| Market | A return | B return | A max DD | B max DD | B ends holding |
|---|---|---|---|---|---|
ADA |
-16.0% | -18.0% | 16.6% | 45.2% | yes |
BTC |
-16.0% | 6.8% | 17.0% | 25.9% | yes |
DOGE |
-16.4% | -11.0% | 16.7% | 36.8% | yes |
ETH |
-16.3% | 16.1% | 16.5% | 33.2% | yes |
LINK |
-16.5% | 14.7% | 18.9% | 30.3% | yes |
SOL |
-16.0% | 12.7% | 16.1% | 33.0% | yes |
XRP |
-16.3% | -6.6% | 16.5% | 32.7% | yes |
How to read this. Variant B reports the higher return — 6.8% against -16.3% — and that is mostly not an improvement. A loss that is never closed does not disappear, it sits in inventory. That is why max drawdown rises from 16.6% to 33.0%, and why the strategy ends still holding on 7 of 7 markets: B's reported return leaves out the positions it never resolved. The rule refused 445,669 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 |
|---|---|---|---|---|
REVERSION_MID |
748 | 100.0% | -0.08% | -1.66% |
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 |
107 | 498 | 0.21 |
BTC |
114 | 263 | 0.43 |
DOGE |
104 | 906 | 0.11 |
ETH |
92 | 470 | 0.20 |
LINK |
107 | 327 | 0.33 |
SOL |
114 | 958 | 0.12 |
XRP |
110 | 392 | 0.28 |
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
- 1 hard invariant(s) failing — must be fixed before this ships
- holds a position only 2.9% of the time — it commits properly (peak 99.7%) but the result rests on very few bars, so treat it as a small sample
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.