Double Reversal — Bollinger + RSI, the best in our catalog
Our top performer across 45 days of real M1 data: up to 62% in train and — what actually matters — 56.9% on the window no tuning ever saw.
The rule (genuinely simple)
Double Reversal only enters when two independent signals agree on the same candle:
- Bollinger: price closes outside the band (±2 std devs of the 20 mean) — overstretched.
- RSI Reversal: RSI(14) crosses out of the extreme zone (leaves oversold <30 or overbought >70).
Close below the lower band + RSI leaving oversold → CALL. Upper band + overbought → PUT. Why it works: on real-forex M1 during market hours, price strongly tends to revert to the mean after stretches — and the two conditions together filter out the stretches that keep going.
Entry checklist, one closed candle at a time
The rule is short, but most people who "use Bollinger + RSI" apply a looser version of it. This is the exact sequence the strategy checks on every closed M1 candle:
- Wait for the close. A wick that pokes outside the band mid-candle means nothing. Only the closing price counts.
- Close vs band. Close below the lower band (20-period mean − 2 standard deviations) makes it a CALL candidate; close above the upper band makes it a PUT candidate.
- RSI(14) must be turning, not just extreme. For a CALL, RSI was below 30 and crosses back out of the zone on this candle; for a PUT, RSI was above 70 and crosses back out. An RSI of 22 that keeps falling is not a signal.
- Both on the same candle. Band without RSI turn = no trade. RSI turn with the close back inside the band = no trade.
- Context filters before the order goes out: real pair (not
_otc), inside the hour windows, Monday to Thursday, payout at or above your minimum.
Why step 3 matters: the bot also has a plain bollinger strategy that fires when price touches the band with RSI below 35 or above 65 (the defaults in the tutorial). That family measured only ~51–55% in our 13-strategy study. The difference between "weak" and "best in the catalog" is exactly the requirement that momentum has started to turn.
Worked example — illustrative candles
The prices below are invented to show the mechanics. They are not a real USD/JPY chart and not a real trade result. Times in UTC-3, a Tuesday evening inside the 18:00–23:59 window.
| Candle | Close | Lower band | RSI(14) | What the rule says |
|---|---|---|---|---|
| 18:38 | 147.262 | 147.231 | 38.5 | Inside the band — nothing |
| 18:39 | 147.198 | 147.214 | 27.4 | Closed below the band, but RSI is still inside the oversold zone — no trade yet |
| 18:40 | 147.201 | 147.206 | 30.6 | CALL: still closed below the band and RSI crossed back above 30 |
| 18:41 | 147.209 | — | — | Trade running (entry ≈ 147.201) |
| 18:42 | 147.215 | — | — | 2-candle expiry: 147.215 > 147.201 → win |
With a $5 stake and an 85% payout, the win pays +$4.25. Had the 18:42 candle closed at 147.195, the loss would have been −$5. A loss costs more than a win pays — that asymmetry is why accuracy has to beat the break-even line (54.1% at 85%) before anything else matters.
The lesson is in the 18:39 row: a plain band strategy buys there, while Double Reversal waits one more candle for the selling pressure to ease. If price had kept falling with RSI stuck in the low 20s, there would have been no trade at all — that is the filter that removes "stretches that keep going".
The numbers — with out-of-sample validation
| Pair | Overall | Train | Test | FRESH (out-of-sample) |
|---|---|---|---|---|
| USD/JPY | 59.7% | 62.0% | 58.1% | 56.9% (n=334) ✅ |
| GBP/JPY | 58.0% | 59.8% | 58.9% | 54.6% (n=273) ✅ |
| GBP/USD | 54.9% | 56.7% | 57.1% | 50.3% (n=312) ❌ |
| AUD/USD | 54.7% | 56.0% | 54.8% | 52.2% (n=291) ❌ |
| EUR/USD | 53.9% | 55.0% | 54.6% | 51.7% (n=323) ❌ |
| EUR/JPY | 51.0% | — | — | 46.4% (n=280) ❌ |
Honest read: the edge is concentrated in USD/JPY and GBP/JPY. USD majors worked in the old window and degraded in the recent directional period — which is why we publish the fresh window: it predicts the future, the train window doesn't.
Setting it up in the bot (2 clicks)
In the IaTraderPro panel: estrategias = reversao_dupla (or combine with exaustao_bb in individual mode — the union doubles the signals at the same accuracy: 58.4% fresh, n=498). Data-backed tweaks: 2-candle expiry (120s on 60s candles), pairs USDJPY + GBPJPY, windows 9–10:59am and 6–11:59pm (UTC-3), minimum payout 80%.
What 56.9% means in money
Two formulas do all the work. Break-even accuracy = 1 / (1 + payout). Expectancy per $1 staked = accuracy × payout − (1 − accuracy). Example: 58% accuracy at an 85% payout gives 0.58 × 0.85 − 0.42 = +0.073 per $1; the same 58% at 80% payout gives +0.044. Applied to the fresh (out-of-sample) numbers above:
| Payout | Break-even | USD/JPY fresh 56.9% | GBP/JPY fresh 54.6% | DR + Exhaustion union, fresh 58.4% |
|---|---|---|---|---|
| 70% | 58.8% | −0.033 | −0.072 | −0.007 |
| 80% | 55.6% | +0.024 | −0.017 | +0.051 |
| 85% | 54.1% | +0.053 | +0.010 | +0.080 |
| 90% | 52.6% | +0.081 | +0.037 | +0.110 |
In plain terms: on USD/JPY with a $5 stake, the expected value is about +$0.26 per trade at 85% payout, +$0.12 at 80% — and negative at 70%. GBP/JPY on its own is below break-even at an 80% payout. The minimum-payout filter matters as much as the signal.
Expected value is not a forecast of your week. If true accuracy were exactly 58% at 85% payout, 100 trades of $5 would expect +$36.50, but one standard deviation is about $46 — roughly one in five 100-trade stretches would still end negative. Over 200 trades, the chance of at least one run of 5 straight losses is about 79%. And the 56.9% itself is an estimate: on n=334 its 95% interval is roughly 51.6%–62.2%, whose low end is below break-even at every payout in the table. We read it as "an edge probably exists", never as a guarantee.
When not to run it
- OTC pairs. The broker's synthetic price showed no edge for any variation (~50%). Use
USDJPY, neverUSDJPY_otc. See the OTC test. - Fridays. Accuracy fell to 48.8% in the fresh window — below break-even at any payout above. Our production config uses
dias = mon-thu. - Overnight (00:00–08:59 UTC-3). Thin liquidity means nothing pulls a stretched price back; hours 00, 04 and 05 fell below break-even.
- Strongly trending sessions. GBP/USD, EUR/USD and AUD/USD dropped to 50–52% in the fresh window because the market turned directional — trends are where reversion loses. The bot's
adx_minfilter applies to Strong Trend and Pullback, not to this strategy, so your guardrails here arepausar_apos_perdaswithcooldown_minand a dailystop_loss_dia. They limit damage; they do not create an edge. - Around high-impact news. Our study did not isolate news candles, so we have no number for this. The reasoning is simple: a jump caused by new information (a central-bank decision, the US jobs report) is repricing, not an overstretched move, and the mean-reversion logic does not apply. Switch the bot off before scheduled releases for USD, JPY or GBP.
- Payout under 80%. See the table above.
Expiry, pairs and hours — the three settings that move the result
2 candles, not 1
In the study, the same signal measured 2 minutes ahead instead of 1 won ~3 percentage points more (60.8% vs 57.5%, measured on Exhaustion+Band). Reversion needs time: the candle right after the signal often still carries the leftover push. On 60-second candles that means a 120 s expiry.
JPY pairs, but not every JPY pair
USD/JPY and GBP/JPY held up out-of-sample; EUR/JPY collapsed to 46.4%, so "JPY" is not a magic word. The bot holds one order at a time, so a second pair does not add signals — it can take the slot from a better one. That is why our production config trades pares = USDJPY and keeps pares_sombra = GBPJPY logged but not ordered (pairs study).
Two windows
09:00–10:59 and 18:00–23:59 UTC-3 — that is 12:00–13:59 and 21:00–02:59 UTC. In the panel: horas_boas = 09:00-10:59,18:00-23:59 (hours study).
Full bot setup, line by line
conta = demo— always start here.pares = USDJPY, optionallypares_sombra = GBPJPY.periodo = 60(M1 candles) and a 120 s expiry in the panel.estrategias = reversao_duplaorreversao_dupla,exaustao_bb, withmodo = individual.payout_min = 80— raise it if your broker pays more on the pair.horas_boas = 09:00-10:59,18:00-23:59anddias = mon-thu.martingale = nao— martingale creates no edge, it multiplies wins and losses.
About tweaking: the parameters are editable in the panel, but our data points one way. Loosening the thresholds pushes Double Reversal toward the plain Bollinger strategy that measured ~51–55%, and adding CCI or Z-Score only repeats what the band already measures. If you change anything, run simular_csv.py first and only trust results with n ≥ 150 on candles your settings never saw.
Combining with Exhaustion+Band: individual vs majority mode
The bot has two modes. In individual, the first active strategy that fires places the trade — with two strategies, that is the union of their signals. In maioria, every active strategy votes and the bot only trades when the votes reach maioria_min (0 = automatic, half + 1).
| Setup | Signal volume | What our data says |
|---|---|---|
| Double Reversal alone, individual | Baseline | 56.9% fresh on USD/JPY (n=334) |
| DR + Exhaustion+Band, individual (union) | About 2× | 58.4% fresh (n=498) — the tested champion |
DR + Exhaustion+Band, maioria | Rare | Not tested — no published number |
Why majority is the wrong tool for this pair: with exactly two active strategies, half + 1 = 2, so the bot waits for both to fire on the same candle. They are orthogonal — one reads distance from the mean plus an RSI turn, the other reads candle anatomy — so that coincidence is uncommon, and you would throw away most signals with no evidence of higher accuracy. Majority mode only makes sense with three or more strategies, for example adding RSI Reversal as an auxiliary vote (~52–55%, borderline alone). Treat that as an experiment: backtest it before it goes near a demo account.
Testing it in demo
- Set
conta = demo, a small fixed stake, USD/JPY only, windows and Monday–Thursday as above. - Let it run until you have at least 150 trades — the same minimum sample the study uses.
- Compare your win rate with the break-even for your payout, not with 50%.
- Keep the sample size in mind: with 150 trades, a true 58% can show up anywhere from ~50% to ~66% (95% interval). 150 trades catch a broken setup — OTC by mistake, wrong expiry — not the exact edge.
More on this in the demo account guide.
🤖 Get the free trading bot
Open-source bot for Quotex & IQ Option (13 strategies). Edit it with ChatGPT/Claude — no coding. Free, no spam.
FAQ
Does it work on OTC? No. On OTC no variation beat ~50% (see the test).
Why not add CCI or Z-Score as confirmation? We tested: they're redundant — they measure the same thing as Bollinger ("price ±2σ from the mean"). The only confirmation that adds value is RSI (momentum), and it's already in the rule.
Isn't 56–61% low? At 87% payout, break-even is 53.5%. Above that, expectancy is positive — the rest is risk management and volume. Anyone promising 70%+ is selling overfit.
⚠️ Binary options carry a high risk of losing all your capital. Educational content based on demo-account data — not investment advice. Past results do not guarantee future results. No bot or strategy guarantees profit.