rangeRider — Status & roadmap
Where this strategy is today
ENGINEERING COMPLETE — the code is correct, uniform and shippable. That is a statement about engineering, not about profitability; the performance verdict is separate and sits below it.
| Dimension | State |
|---|---|
| Correctness | 5 / 5 invariants pass |
| Console output | 13 tagged calls, 0 off-format |
| Side panel | 22 rows, padded to the 3-column grid |
| Chart marks | reference-levels |
| Palette | 8 / 8 canonical |
| GUI settings | 15 exposed · 0 read at runtime · 0 untunable · 0 inert |
| Deployed to a live install | Not yet — audited and staged, not yet shipped |
Performance verdict. Over three years on 7 markets it returns a median 4.3% against buy-and-hold's 39.2% — an edge of -20.1% — and is profitable on 7 of 7. On this window it is not a replacement for simply holding the asset, and nothing in these reports claims it is.
What it actually does
An ATR-spaced accumulation grid for sideways markets, with a trend brake.
- Buys on dips, spaced
GRID_ATR× ATR apart (0.4 ATR by default), up toMAX_DCAlayers (10), each layerDCA_DECAYsmaller than the last. - Sells only at a gain target:
max(breakEven + 0.3×ATR, breakEven × 1.01). - Pauses buying when ADX reaches 35, to avoid averaging down into a trend.
- Halts itself after 3 consecutive losses, or a daily loss beyond 2% of allocation.
The important structural fact is that there is no stop-loss sell. The only sell path is the gain target above break-even. Everything the strategy cannot sell profitably, it keeps.
Read from the shipped strategy source, not from its documentation.
The measured constraint
Time in market is 0.7%, over 191 round trips across all 7 markets and three years. Everything in the performance report rests on that fraction of the bars. A strategy out of the market 99% of the time is not therefore a low-risk one: the 2.9% drawdown happens entirely inside the time it is committed.
Settings, measured
This strategy does not use the engine config surface.
What to build next
Ordered by expected effect on the result, not by effort.
1. Treat the 100% win rate as an artifact, not a result
Read before acting on the others
This strategy shows a 100% win rate on all seven markets. That is not skill and it is not a bug — it is the direct consequence of having exactly one sell path, priced at or above break-even. Every trade it closes is profitable by construction.
The risk therefore does not appear in the trade record at all. It appears as inventory the strategy is still holding, and as drawdown: 12.3% on BTC and 12.9% on ETH over the window. Any comparison of this strategy against one that does cut losses must use return and drawdown, never win rate — and the same caution applies to every grid strategy in the pack built this way.
Nothing here needs fixing. It needs reading correctly.
2. Test a time-based or invalidation exit for stranded inventory
Highest priority
Because the only exit is a profitable one, a layer bought before a sustained decline is held indefinitely — the ADX brake stops it adding, but nothing releases what it already holds. Exposure across the window averages 3.5% but reaches 9.0% on BTC, and the drawdown figures are where that shows up.
Worth testing, in order of how little they change the character of the strategy: release a layer once the range it was bought into has demonstrably broken (price beyond the grid bounds by some ATR multiple for N bars); or a maximum hold age per layer; or a scaled-out exit that accepts break-even minus fees rather than requiring a gain. All three are additions to the sell path, not changes to the entry, so the accumulation behaviour that works is left alone.
3. Decide the honest benchmark
High priority
It returns a positive result on 7 of 7 markets and still loses to buy-and-hold on 5 of them, by a wide margin where the market trended hard — SOL +2.8% against a held +216.7%, XRP +14.6% against +152.1%.
That is the expected shape for a strategy that is out of the market 96.5% of the time and caps every win at a small gain target. It is not a growth strategy, so measuring it against buy-and-hold answers a question it was not built for. The fairer benchmarks are cash plus the realised gain (does it beat sitting in quote currency?) where it wins clearly, and risk-adjusted return per unit of exposure. Both are worth adding to the measurement rather than arguing about the buy-and-hold column.
4. Sweep the gain target and grid spacing together
High priority
GAIN_ATR (0.3) and GAIN_PCT (1.0) set how little the strategy will accept, and GRID_ATR (0.4) sets how often it gets the chance. They interact directly: a tighter target with wider spacing is a different strategy from a wider target with tight spacing, and only the pair has been shipped, never swept.
Both are now genuinely settable across their whole range, including 0, which was not true before this audit — so a sweep will now measure what it appears to measure.
5. Extend the settings measurement to this lineage
Worth testing
The audit measures which settings a strategy actually reads by running it with a recording proxy over its config object. That works for the 348 Gunbot Quant files, which read settings through a single shared config accessor, and does not yet work for the 79 Quantroduction files including this one — they build a plain settings object straight from the GUI values, so there is nothing to wrap.
Consequence: for this strategy the report can say 15 settings are exposed in the GUI, but cannot yet prove that all 15 are read, or that nothing it reads is missing from the GUI. Wrapping the settings object in the same recording proxy would close the gap for all 79 files at once and is the single highest-value improvement to the audit itself.
Operator output, measured
Everything below was read out of the strategy file by the presentation audit, not taken from its documentation. These are the surfaces an operator actually watches: the terminal log, the side panel, the chart, and the settings the GUI offers.
- Tagged, aligned, coloured
- 13
- Raw and off-format
- 0
- Exempt (object and error dumps)
- 24
Every non-exempt line carries the strategy name, an event tag and the palette colour for that tag, so one terminal running many pairs stays readable.
- Data rows
- 22
- Section headers
- 5
- Rows with no tooltip
- 1
- Padded to the 3-column grid
- yes
- Model
- reference-levels
draws price levels into customChartTargets and no per-trade marks, so there is no intent-vs-fill distinction to get wrong
- Non-canonical colours
- 0
One colour per meaning, identical in the log, the panel and the chart — the eight canonical roles.
Settings the GUI exposes
15 settings appear in the Gunbot strategy editor for this strategy. Which of them the code reads has not yet been measured for this lineage: it does not use the shared config surface, so there is nothing to wrap with a recording proxy.
LOG_LEVELWARMUP_CYCLESRR_GRID_ATRRR_MAX_DCARR_DCA_DECAYRR_ADX_PAUSERR_MAX_EXPRR_SPMIN_ORDER_QUOTERR_TLRR_CAPITAL_ALLOCRR_GAIN_ATRRR_GAIN_PCTRR_MAX_DDRR_FEE
Open presentation findings
- WARN · sidebar — 1 of 22 data row(s) carry no tooltip, so the value has no explanation in the GUI: Holding