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:

  1. Wait for the close. A wick that pokes outside the band mid-candle means nothing. Only the closing price counts.
  2. 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.
  3. 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.
  4. Both on the same candle. Band without RSI turn = no trade. RSI turn with the close back inside the band = no trade.
  5. 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.

CandleCloseLower bandRSI(14)What the rule says
18:38147.262147.23138.5Inside the band — nothing
18:39147.198147.21427.4Closed below the band, but RSI is still inside the oversold zone — no trade yet
18:40147.201147.20630.6CALL: still closed below the band and RSI crossed back above 30
18:41147.209——Trade running (entry ≈ 147.201)
18:42147.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

PairOverallTrainTestFRESH (out-of-sample)
USD/JPY59.7%62.0%58.1%56.9% (n=334) ✅
GBP/JPY58.0%59.8%58.9%54.6% (n=273) ✅
GBP/USD54.9%56.7%57.1%50.3% (n=312) ❌
AUD/USD54.7%56.0%54.8%52.2% (n=291) ❌
EUR/USD53.9%55.0%54.6%51.7% (n=323) ❌
EUR/JPY51.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:

PayoutBreak-evenUSD/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, never USDJPY_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_min filter applies to Strong Trend and Pullback, not to this strategy, so your guardrails here are pausar_apos_perdas with cooldown_min and a daily stop_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, optionally pares_sombra = GBPJPY.
  • periodo = 60 (M1 candles) and a 120 s expiry in the panel.
  • estrategias = reversao_dupla or reversao_dupla,exaustao_bb, with modo = individual.
  • payout_min = 80 — raise it if your broker pays more on the pair.
  • horas_boas = 09:00-10:59,18:00-23:59 and dias = 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).

SetupSignal volumeWhat our data says
Double Reversal alone, individualBaseline56.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, maioriaRareNot 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

  1. Set conta = demo, a small fixed stake, USD/JPY only, windows and Monday–Thursday as above.
  2. Let it run until you have at least 150 trades — the same minimum sample the study uses.
  3. Compare your win rate with the break-even for your payout, not with 50%.
  4. 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.