Join today
Strategies / Mean reversion / Reversal Catcher

Reversal Catcher Strategy

After a bar dips below the lower Bollinger Band (20, 1.5), this system waits for a bar that closes back inside the bands and above the previous high. It also needs TEMA(21) above TEMA(50) and price crossing above the session VWAP. It exits at the upper band or when TEMA(21) crosses below TEMA(50).

Mean reversionLong onlySwingEUR/USD1 hour
n/aProfit factor
14,600Net profit USD
63.80%Win rate
326Trades
-4,252Max drawdown
44.79Avg trade

Best run of 22. EUR/USD, 1 hour, spread 1, from run sweeps:2026-09-26-EURUSD-1h-opt.tsv:3.

Entry rules, long

  1. The previous bar's low was below the lower Bollinger Band (20, 1.5)
  2. The close is back between the lower and upper band
  3. Members only
  4. TEMA(21) is above TEMA(50)
  5. Price crosses above the session VWAP

Exit rules

  1. Members only
  2. Or when TEMA(21) crosses below TEMA(50)
  3. A stop is set at a distance equal to the previous bar's low in price units, which is so wide it acts as no stop in practice

Test conditions

PeriodUp to 2026-09-26
InstrumentEUR/USD, 1 hour
Spread1 points
Contracts1
Starting capital1,000,000
CostsSpread only. Commissions and overnight financing are not included.
BarsUp to 200,000 bars, fewer where the instrument has less history
Last tested2026-09-26

Parameters

positionSize
Contracts per trade
1
bandPeriod
Bollinger Band length
20
bandWidth
Bollinger Band width in standard deviations
1.5
fastPeriod
Fast TEMA length
21
slowPeriod
Slow TEMA length
50

Every run

Markets and timeframes tested

MarketTimeframePFTradesWin %NetMax DD
EUR/USDBest run1 hourn/a 32663.8014,600 USD-4,252
USD/JPY1 hourn/a 18763.10126,850 JPY-39,590
USD/JPY15 minn/a 27761.7333,330 JPY-24,320
USD/JPY5 minn/a 8760.9213,760 JPY-9,540
EUR/USD4 hoursn/a 6360.3210,264 USD-2,824
SilverDailyn/a 1163.645,608 USD-2,173
Silver4 hoursn/a 3969.234,676 USD-1,424
Brent Crude30 minn/a 29167.703,909 EUR-1,069
Silver1 hourn/a 17964.803,510 USD-2,211
Nikkei 2251 hourn/a 10063.001,871 USD-1,760
US Crude Oil1 hourn/a 17163.161,757 EUR-842
Brent Crude1 hourn/a 11453.511,695 EUR-1,079
DAX 404 hoursn/a 2762.961,539 EUR-675
Silver3 minn/a 8254.881,161 USD-565
Nasdaq 10015 minn/a 29164.60997 EUR-795
Nikkei 2253 minn/a 4761.70949 USD-743
Brent CrudeDailyn/a 475.00703 EUR-701
Nikkei 2251 minn/a 2259.09564 USD-284
Gold15 minn/a 26066.54187 EUR-60.30
Gold5 minn/a 10866.67118 EUR-70.90
Gold3 minn/a 6966.6792.10 EUR-23.80
Gold2 minn/a 4870.8343.40 EUR-37.90

Charts

Results by run

Net profit against max drawdown

Net profitMax drawdown
0-50K-25K100K200KUSD/JPY · 1 hourUSD/JPY · 15 minEUR/USD · 1 hourUSD/JPY · 5 minEUR/USD · 4 hoursSilver · DailySilver · 4 hoursBrent Crude · 30 minSilver · 1 hourNikkei 225 · 1 hourUS Crude Oil · 1 hourBrent Crude · 1 hourDAX 40 · 4 hoursSilver · 3 minNasdaq 100 · 15 minNikkei 225 · 3 min

The code

ProBuilder, rewritten to house standard

Every file in the library uses the same header, the same section order and the same variable names. The numbers above were produced by the original version before the rewrite, and the rewrite has not yet been compiled in ProRealTime.

// ============================================================
// Reversal Catcher
// ProRealAlgos Strategy Library  |  prorealalgos.com
// Type: Mean reversion
// Direction: Long only
// Timeframe tested: 1 hour
// ============================================================

// --- Settings ---
DEFPARAM CumulateOrders = false

// --- Parameters ---
positionSize = 1       // contracts per trade
bandPeriod = 20        // Bollinger length
bandWidth = 1.5        // Bollinger width in standard deviations
fastPeriod = 21        // fast TEMA
slowPeriod = 50        // slow TEMA

// State, seeded so every value is defined on the first bar.
ONCE inTrade = 0
ONCE barsToday = 0
ONCE vwapValue = 0

// --- Indicators ---
midBand = Average[bandPeriod](close)
stdDevValue = SQRT(Summation[bandPeriod]((close - midBand) * (close - midBand)) / bandPeriod)
upperBand = midBand + (stdDevValue * bandWidth)
lowerBand = midBand - (stdDevValue * bandWidth)

fastMA = TEMA[fastPeriod](close)
slowMA = TEMA[slowPeriod](close)

// Session VWAP, reset on a new day.
IF Day <> Day[1] THEN
  barsToday = 1
  vwapValue = TypicalPrice
ELSE
  barsToday = barsToday + 1
  IF volume > 0 THEN
    vwapValue = Summation[barsToday](volume * TypicalPrice) / Summation[barsToday](volume)
  ENDIF
ENDIF

23 more lines: the entry and exit rules.

Read this first

Known weaknesses

  • The stop is set at the previous bar's low as a distance, so in practice there is no working stop loss.
  • Profit factor was not recorded, since all results here are from parameter sweeps.
  • VWAP needs volume data. On instruments without volume it stays at the day's first typical price, which changes how the trigger behaves.
  • Gold results are tiny, for example EUR 43.4 on 2 minutes from 48 trades, far too little to rely on.

Indicators used

Bollinger BandsTEMAVWAP

How to load it

  1. Copy the code with the copy button above the code block.
  2. In ProRealTime, open a chart of the instrument and timeframe you want to test, then open ProOrder > New trading system and choose "Create with programming".
  3. Paste the code, give the system a name and save it.
  4. Click "Backtest", set your own spread and position size, and run it before you consider trading it live.

Questions

About this strategy

Does the Reversal Catcher run in ProOrder?

It can, but note the stop is so wide it rarely fires. The rewritten code was not compile-checked, so run it in ProBacktest before going live.

How did it do across markets?

Every run listed was positive. USD/JPY 1 hour made JPY 126,850, and the best recorded run, EUR/USD 1 hour, made USD 14,600 over 326 trades with a 63.8% win rate.

What drawdown came with 1 contract?

The EUR/USD 1 hour run had a max drawdown of USD 4,252. On USD/JPY 1 hour the drawdown reached JPY 39,590.

Why the 1 hour timeframe?

Both the best recorded run and the largest profit came from 1 hour charts, where the band and TEMA filters produce fewer, cleaner signals.

Related

Strategies like this one

Bollinger Squeeze

Uses the same indicator.

14.30 PF · 86 trades

Slow MACD Slope

Best run on the same market, EUR/USD.

6.80 PF · 7,305 trades

Monday Dip Buy

Also a mean reversion strategy.

n/a PF · 146 trades

Reversal systems work best as part of a mix. See how the ProRealAlgos portfolio does it by joining the waitlist.

The ProRealAlgos community gets the full rules, the complete code and the automated portfolio.

Past backtest results do not guarantee future results. This is not financial advice. Curated and maintained by ProRealAlgos. ProRealTime™ is a trademark of ProRealTime SAS. prorealalgos.comStatsDocs