Joshua Dunnink · Trading Systems
Rubberband artwork

Rubberband

AUDCAD · M15 · MetaTrader 5 Expert Advisor

Coming soon. This Expert Advisor is in final testing and is not for sale yet. Its description, manual and research are published so you can follow it before release.

Read the manualHow it was built

Headline backtest

Profit factor 2.95 · worst equity drawdown 2.37% · 103 trades · return +3.8% on 10,000

Backtest, real ticks, Fusion Markets, 2026-03-01 to 2026-09-01, version 1.40. The weakest of the live brokers tested, not the strongest.

Rubberband balance curve (backtest)
Chart: closed-trade balance of this same run. Its label computes profit factor per closed trade and shows the closed-balance drawdown, so both can differ from the tester-report figures above.

Figures on this page come from the MetaTrader 5 Strategy Tester on real broker ticks. They are backtests, not live results.

Rubberband is a MetaTrader 5 (MT5) Expert Advisor that trades AUDCAD (forex) on the M15 chart with a regime-aware mean-reversion grid. It reads how far price has stretched from its own recent average and fades the stretch with a small averaging basket, then closes the whole basket once price comes back.

How a trade is made:

Stretch. A linear regression channel is fit over the last 20 M15 bars. The distance from price to the channel, in standard deviations (the regression z-score), measures how far price has pulled away from its own trend line.

Entry. A basket seeds only when the z-score is strongly extended and RSI(14) confirms the same extreme (oversold for a buy, overbought for a sell); a Kaufman efficiency-ratio filter skips the seed when the market is trending too cleanly for a fade to make sense.

Regime. A live four-state 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 profit target to the state it finds - wider spacing and a stronger extension are demanded in a trending or high-volatility market, tighter and more frequent entries in a range.

Basket. If price keeps moving against the first leg, the EA adds an equal-lot leg every fixed multiple of ATR, up to 15 legs. The basket closes as soon as its floating profit reaches the regime's target; an optional per-position time or ATR stop can close a single leg on its own, independent of the basket.

Safety. A tier-scaled account guard flattens an open basket only if its floating loss reaches a level set well above the normal float for that risk tier. On a terminal restart with a basket still open, the grid rebuilds its own add-spacing from the account's live positions rather than from any saved state, and a basket's exit is not marked complete until every one of its legs is confirmed closed by the broker.

Friday and weekend control. InpFriNoNewHour (server hour, 0-23) stops the EA from seeding a NEW basket from that hour on a Friday; a basket that is already open keeps adding and exiting exactly as before - only the seed is gated. The default is 12 (noon, server time): from Friday noon the EA opens no new basket, so it does not carry a fresh floating position into the weekend gap. It is independent of the existing InpPropFridayCloseHour (default 0 = off), which would flatten every open basket at a chosen Friday hour and block new trading until Monday - left off by default, because forcing a still-open basket shut removes the chance it had to close on its own target. Set InpFriNoNewHour to 0 to let the EA trade every Friday hour as earlier versions did.

What the EA does not do: no martingale doubling, no news-calendar reading, no files, no DLLs, no external resources, no trading on any symbol other than the one you attach it to.

Risk profile

One input, InpRiskProfile, picks the position-sizing tier. RP_LOW is the compiled default since version 1.39 and needs no .set file; InpSizePolicy (default Automatic) decides whether the EA scales the tier to your balance or trades the exact lot you set yourself.

Backtest, MetaTrader 5 Strategy Tester, OANDA AUDCAD.pro real ticks, 2022-01 to 2026-06 (about 4.5 years, measured before the Friday weekend cutoff described above existed - every basket in this run could still seed on a Friday evening):

HIGH and HOT tiers are available in the same dropdown for a larger account and a larger floating drawdown than shown here; a CUSTOM tier lets you set your own fixed lot or your own balance-risk percentage.

Results

Both runs below are on version 1.42's compiled configuration, Friday weekend cutoff included (InpFriNoNewHour at its default of 12):

Pepperstone is the headline: it is the live-account feed, on the cutoff configuration (about 20 months).

Two more feeds, from the build immediately before the Friday weekend cutoff existed (build 1.40), on a shorter, earlier window:

The same rules take near-identical trades on every broker; where the money differs, the smaller and the longer-window result are the ones to plan with.

How Rubberband differs from Boomerang

Rubberband and Boomerang are both AUDCAD reversion systems. They are separate builds, and the mechanism differs in four places:

Frequently asked questions

Q: Which broker and account type does Rubberband need? A: A hedging account with a low AUDCAD spread. No DLLs or external calls are used.

Q: What is the minimum deposit? A: 300 in account currency at any profile; 500 is recommended at the default LOW risk tier.

Q: Which chart and timeframe do I attach it to? A: One AUDCAD chart on the M15 timeframe.

Q: Which is the one risk setting, and where should I start? A: InpRiskProfile - LOW is the compiled default and needs no .set file; MEDIUM, HIGH and HOT sit in the same dropdown for a larger account and a larger floating drawdown.

Q: Does Rubberband use a grid or martingale? A: It is an averaging grid without martingale: 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 price comes back. No leg is doubled or scaled up.

Q: Why does it sometimes not open a new basket, especially on a Friday? A: A basket seeds only when the regime detector's z-score is strongly extended and RSI(14) confirms the same extreme; a trending market skips the seed. By default the EA also stops opening a new basket from Friday noon server time, so it does not carry a fresh floating position into the weekend gap - a basket already open keeps managing itself as normal.

Q: Do I need a VPS, and what happens after a restart? A: Continuous operation is recommended (a VPS or an always-on PC). On a terminal restart with a basket still open, the grid rebuilds its own add-spacing from the account's live positions rather than from any saved state.

Q: Can I backtest Rubberband myself? A: Yes. The LOW tier runs on its compiled defaults with no .set file, so it can be tested in the MetaTrader 5 Strategy Tester on real ticks using the feed, window and starting balance stated in the Results section of this listing.

Requirements

Risk disclosure

This is an averaging grid: it holds a small basket of same-direction positions open until price reverts, and an open basket can go significantly underwater before it does. An extreme, non-reverting move can produce a large loss. By default the EA opens no new basket in the last hours of the Friday session, so a new position is less likely to be carried into the weekend gap; a basket that is already open still manages itself exactly as on any other day. Trade only risk capital, respect the minimum account, and keep margin headroom for the floating drawdown of the tier you choose. Backtest results do not guarantee future performance. Past results do not predict future results.

Evidence

equity FUSION (backtest chart)
equity FUSION - Strategy Tester, real ticks, backtest
equity PEPPERSTONE (backtest chart)
equity PEPPERSTONE - Strategy Tester, real ticks, backtest
equity VANTAGE (backtest chart)
equity VANTAGE - Strategy Tester, real ticks, backtest
equity OANDA (backtest chart)
equity OANDA - Strategy Tester, real ticks, backtest