Joshua Dunnink · Trading Systems

← Rubberband

Rubberband — Research Note

What the machine does, why AUDCAD, what was changed on the way to the shipped version, and what each change did — with the tests that decided it.

Version 1.42 · September 2026

All figures in this note are Strategy Tester runs on real broker ticks. They are backtests, not a live-account record. Every number names the build, the broker feed and the window it came from; a number that cannot be traced that way does not appear here.


0. The result in one table

Rubberband runs out of the box on its LOW risk tier (about 1.5% of balance per basket) and, since version 1.42, does not open a new basket in the last hours of the Friday session. Two live-broker feeds, compiled defaults, 10,000 starting balance:

feed · window net profit factor equity drawdown
Pepperstone · 2025-01 to 2026-09 (about 20 months) +5.7% 1.64 3.88%
OANDA (demo, spread-survival check) · 2024-09 to 2026-09 (about 2 years) +9.6% 2.46 3.68%

Pepperstone is the live-account feed and the smaller of the two; it is the number to plan with. Two further feeds (Fusion, Vantage) are measured on the build immediately before this weekend policy existed (1.40, a shorter 2026-03 to 2026-09 window) and have not yet been re-run on the 1.42 configuration — see the version history for those figures.

How the machine got from a raw idea to that table is the rest of this note. Each section names a mechanism, shows the figure that decided it, and states what it changed. The exact geometry (thresholds, ATR multiples, spacing) is deliberately not written out here; it is in the product's inputs.


1. How it was tested


2. The market mechanism: fading an AUDCAD stretch

AUDCAD pairs two commodity-linked currencies — the Australian dollar against iron ore and other exports, the Canadian dollar against oil — whose macro drivers often move in the same direction against the rest of the market and partly cancel each other out in the cross itself. That is the reason the product looks for reversion rather than continuation on this pair: without one dominant currency doing the driving, a stretch away from the recent average is, more often than not, a stretch that comes back rather than the start of a new trend.

Rubberband measures the stretch with a linear regression channel fit over the last 20 M15 bars: the distance from price to that channel, in standard deviations, is the regression z-score. A basket seeds only when the z-score is strongly extended and RSI(14) confirms the same extreme. A Kaufman efficiency-ratio filter is the machine's own acknowledgement that the mechanism is conditional, not universal — it skips the seed when the market is trending too cleanly for a fade to make sense, because a stretch that keeps stretching is exactly the case the mechanism does not want to be in.

A live four-state regime detector (range, high volatility, trend, quiet) reads the daily trend efficiency and the daily ATR percentile and re-tunes the entry threshold, the grid spacing and the basket's profit target to the state it finds. The basket itself is the second half of the mechanism: if price keeps moving against the first leg, the EA adds an equal-lot leg every fixed multiple of ATR, up to 15 legs, and closes the whole basket once its floating profit reaches the regime's target — averaging into the stretch rather than exiting at the first sign it was wrong, on the premise that the stretch itself is the signal, not a one-shot prediction of the next few bars.


3. Design decisions, in build order

v1.0 — the base engine. Regime-adaptive mean-reversion grid (range / high-volatility / trend / quiet states) plus a risk-profile facade and a tier-scaled account tail-guard. This is the mechanism described in section 2; everything after this version adjusts it or adds an optional switch around it.

v1.10 — confidence lot-size boosting (opt-in). A single switch enlarges the lot only on the highest-confidence entries (calm-market extreme reversions). Real-tick backtest, OANDA AUDCAD, 2022-26, LOW tier: off +78% at 11.4% drawdown, on +92% at 13.2% drawdown — more return for a small amount of extra drawdown, still comfortably inside the drawdown-acceptance rule. Ships off by default.

v1.20 — a self-adaptive quiet-volatility regime (opt-in). A GA-derived detector for the low-volatility state AUDCAD entered from 2024. This is a selectivity mode: it raises the profit factor and the share of consistent months without raising net or lowering the balance-series drawdown. Ships off; the default golden is unchanged.

v1.30 — "ride the trend" (opt-in exit). When a trade is aligned with the multi-day trend rather than against it, the EA holds and trails the exit instead of booking the small fixed profit, and freezes new adds while riding. Backtest, real ticks, OANDA AUDCAD, 2022-26: profit factor rose from 1.50 to 1.70, balance drawdown fell from 7.6% to 6.6%, and the share of profitable months rose from 67% to 74%, for a modest reduction in net. Counter-trend trades — most of the book — still book fast at the regime's fixed target; only the trend-aligned minority changes behaviour. Ships off by default.

2026-07 — exit geometry study (research, not shipped as-is). A study of price immediately after a basket closes found it continues in the same direction by a median of about 1.98 ATR — the basket is exiting into room, not into exhaustion. Two configurations tested whether that room could be harvested: a wider-target configuration with a 10-leg depth cap, and the same wide targets with no depth cap at all. Backtest, real ticks, OANDA AUDCAD, 2021: the depth-capped configuration returned net +$2,879 at a profit factor of 2.28 and a realised drawdown of 7.3%. The uncapped configuration carried a rare, much deeper tail event and was judged portfolio-use only, at reduced weight, rather than a standalone default. Neither configuration replaced the shipped basket target; the finding that a depth cap is what turns a wide-target tail risk into a bounded one carried forward as understanding, not as a specific shipped parameter.

v1.33 — a spread-relative add/seed guard (opt-in). The seed basket's median winner is about two pips. A spread census on live broker archives found raw-ECN feeds running 0.4-0.8 pips through the session (28-39% of that target) and standard-spread feeds running 1.5-2 pips (75-100% of it) — an absolute points cap cannot tell those two situations apart, so the guard is expressed as a fraction of the basket's own target instead, which self-calibrates with volatility without needing a broker-specific number. Ships off pending a broker-by-broker read.

v1.34 — alternate seed families (research, not shipped as default). Two alternate entry conditions — percentile rank of the recent close, and a Bollinger-band close-outside rule — were tested through the product's own exit machine, holding every other rule fixed, so the comparison was between entry families and nothing else. See section 4 for what came of it.

v1.39 — LOW becomes the default risk tier. Detailed in the manual (section 2b): the LOW tier's tighter account-breaker budget keeps a basket floating rather than letting it realise at the wider budget the previous default used. This is a sizing-and-safety decision, not a change to the entry or exit mechanism.

v1.40 — restart and failed-close safety. The basket-close routine now confirms every leg is actually gone before it clears the basket's state, and on a terminal restart the grid's add-spacing anchor is rebuilt from the account's own open positions rather than from any saved value. A deal-for-deal A/B against the prior build on OANDA, 2024-09 to 2026-09, matched on 529 of 532 trades; the three that differed were a single basket caught in a genuine market-closed retry sequence, where the new logic keeps the basket's regime-locked profit target intact through the failed retries instead of losing it. This is a robustness fix, not a change to when or how the machine trades.

2026-09-28 — the deep-basket study. A backtest read of every basket in a two-year OANDA record (2024-09 to 2026-09, real ticks) found that baskets held open across a weekend, and baskets seeded in the 14:00-18:00 server window on the first Friday of a month (when the US and Canadian jobs reports land together), were both over-represented among the deepest equity dips — three of the twelve deepest baskets were weekend-held against about 0.3 expected by chance, and two were first-Friday-jobs seeds against the same 0.3 expected. Both kinds of basket recovered on net over the record: weekend-held baskets averaged +22.3 each, and first-Friday-jobs baskets averaged +12.5 each — they cost equity dips along the way, not money at the end. That distinction is what shaped the response in v1.41/1.42: rather than force those baskets shut (which would convert a recovering float into a realised loss — the same mechanism the 2026-07 exit study and the section-4 rejected flatten-all both point to), the fix is to stop a new one from starting.

v1.41/1.42 — the Friday weekend cutoff. InpFriNoNewHour (server hour, default now 12) stops the EA from seeding a new basket from that hour on a Friday; a basket that is already open keeps adding to itself and exiting exactly as on any other day — only the seed is gated. It shipped in 1.41 behind an off-by-default switch while its effect was measured on two feeds, and the owner reviewed the full measurement before turning it on by default in 1.42. Backtest, real ticks: baskets left open across a weekend fell from 7 to 0 on OANDA (2024-09 to 2026-09) and from 5 to 1 on Pepperstone (2025-01 to 2026-09), and equity drawdown fell from 6.08% to 3.68% (OANDA) and from 5.43% to 3.88% (Pepperstone) over those same windows. This is a deliberate, owner-set safety choice: the machine is a little more selective about opening a fresh basket in the closing hours of the week, in exchange for not holding a brand-new position open across the weekend gap.


4. What was tested and rejected

So that the reader knows what is not in the product, and why:


5. Validation

Limits


Appendix — traceability

All entries below are Strategy Tester backtests, real ticks.

version change proof
1.0 base regime-adaptive mean-reversion grid + risk facade + tail-guard —
1.10 confidence lot-size boosting (opt-in) OANDA AUDCAD 2022-26: off +78%/11.4% DD, on +92%/13.2% DD
1.20 self-adaptive quiet-volatility regime (opt-in) selectivity mode; default golden unchanged
1.30 ride-the-trend trailing exit (opt-in) OANDA AUDCAD 2022-26: PF 1.50 to 1.70, balance DD 7.6% to 6.6%
1.33 spread-relative add/seed guard (opt-in) live-feed spread census; ships off pending a broker-by-broker read
1.34 alternate seed families (research inputs) screened against the shipped seed through the product's own exit machine; not adopted on AUDCAD
1.39 LOW becomes the default risk tier manual section 2b
1.40 restart / failed-close safety OANDA AUDCAD 2024-09 to 2026-09: 529/532 deals identical, 3 explained by a market-closed retry
1.41 Friday weekend cutoff (InpFriNoNewHour), shipped off pre-registered A/B, OANDA + Pepperstone AUDCAD
1.42 Friday weekend cutoff turned on by default compiled defaults reproduce the 1.41 cutoff-on arm exactly

Every table in this note names its feed and window; the compiled binary that produced each row is recorded by its hash in the product manifest.