← All ideas
#062NewMean reversionIntraday

Re-entry inside the Bollinger Bands on 30-minute bars (Andrea Unger)

Price closed outside a Bollinger Band on a 30-minute chart and came back inside: enter against the move with a stop. Andrea Unger gave the entry and the timeframe. The band parameters, stop and exit were set by us.

The Algorithmic Advantage · Andrea Unger · Watch video

Markets

Futures, Indices

Timeframe

M30

Data

OHLC, Session times

Rules

Partly formalised

Difficulty

Easy

Status

Untested

Some rules were added by us and are marked in the text.

TradingView ports directly
EasyLanguage ports directly
MetaTrader 5 has pitfalls

Idea in brief

Andrea Unger, a four-time winner of the World Cup Trading Championship, builds a separate strategy for each futures market. Unger hardly uses indicators in setups, only as filters for conditions. Bollinger Bands are the exception: for Unger they are not an indicator but a measure of location on the chart, a point where it makes sense to act.

The setup is described in one sentence. On a 30-minute chart price ends up outside a band. When it returns inside the envelope, a trade against the move can be opened, always with a stop. A close below the lower band followed by a return gives a buy, a close above the upper band followed by a return gives a sell. According to Unger, for reversal entries the bands often work better than static levels such as pivot points or prior extremes.

Unger calls this a good setup to study, not a finished system. The band length, the width in standard deviations, the stop and the exit were not named. Below they are set by us as starting values and marked as such.

The base already has two cards with Bollinger Bands. The W-bottom (#035) trades on daily charts and requires two lows and a confirmed reversal. The squeeze (#018) uses band width as a regime filter before a breakout. Here there is a single move outside the band, an immediate entry on the return, intraday and in both directions.

Why it might work

Unger explains the choice of direction by the nature of the market. Some markets suit breakouts. Others are almost always better traded against the move: buying dips and selling highs. Unger checks which market is which with simple scripts on historical data and does not try to trade a trend where the market goes nowhere. Unger grew up on the E-mini S&P 500, calls it a mean reversion market and admits that breakout entries on it feel uncomfortable even when they make money. There Unger prefers to buy with limit orders against the move.

The bands adapt to current volatility. A static level is the same on a quiet day and on a turbulent one. A move outside the band means the move is unusually large for the recent bars, and a return inside shows that the pressure has faded, at least for one bar.

The 30-minute timeframe is a matter of principle for the author. Unger believes lower timeframes are full of noise: on a 5-minute bar a single tick noticeably changes the range, and Unger would not build indicators on such a chart. The interview has no numerical comparison of the bands with pivot points. This is the author's experience.

Rules

Bands and setup

// 30-minute futures bars                            // author: 30 minutes, no lower
Mid   = SMA(Close, 20)                               // Finetiq: classic length
Dev   = StdDev(Close, 20)                            // population deviation, as in standard bands
Upper = Mid + 2 * Dev                                // Finetiq: 2 standard deviations
Lower = Mid - 2 * Dev

SetupLong  = Close[1] < Lower[1]                     // author: price outside the envelope
SetupShort = Close[1] > Upper[1]                     // Finetiq: "outside" is measured by the close

Entry

// author: price returned inside the envelope, a trade against the move
IF SetupLong  AND Close > Lower  THEN BUY AT NEXT BAR OPEN
IF SetupShort AND Close < Upper  THEN SELL SHORT AT NEXT BAR OPEN
// the condition fires on the first close inside, no matter how many bars price spent outside

// variant for testing: a limit entry after the return
// (on the E-mini the author prefers limit orders against the move)
IF SetupLong AND Close > Lower
    BUY LIMIT at Lower                               // Finetiq: wait for a pullback to the band, the order lives 1 bar

Stop (Finetiq)

// author: a stop is mandatory, its size is not named
ExtremeLow  = Lowest(Low, N)   over the bars outside the band and the return bar
ExtremeHigh = Highest(High, N) over the same bars

Long:  StopLoss = ExtremeLow  - 0.25 * ATR(14)       // Finetiq: beyond the extreme of the move outside the band
Short: StopLoss = ExtremeHigh + 0.25 * ATR(14)

// stop too far away: skip the signal
IF |Close - StopLoss| > 2 * ATR(14) THEN CANCEL      // Finetiq

Exit (Finetiq)

// whichever comes first
Long:  SELL LIMIT at Mid                             // Finetiq: target at the middle line, recalculated on every bar
Short: BUY LIMIT at Mid
EXIT STOP at StopLoss

EXIT at SessionClose - 30 min                        // Finetiq: modeled on the author's skeletons with an end-of-day exit
// variant: hold until the end of the second session (in the skeletons the author also mentions an exit after two days)

// limits
no more than 1 position at a time                    // Finetiq
no new entries in the last hour of the session       // Finetiq

Market selection (author, formalization Finetiq)

// author: countertrend is traded only where the market historically tends to revert
// Finetiq: on the training period run this entry and the mirror breakout entry
//          (buy on the first close above Upper, sell on the first close below Lower)
IF average countertrend trade > round-trip costs AND countertrend beats breakout
    the market is allowed for trading

Parameters

Parameter Value Source
Timeframe 30 minutes, no lower author
Setup close outside the band author (by the close: Finetiq)
Trigger first close back inside the band author
Direction against the move, both ways author
Band length 20 bars Finetiq
Band width 2 standard deviations Finetiq
Entry at market at the open of the next bar Finetiq
Entry variant limit at the band level, 1 bar Finetiq (idea of limit entries: author)
Stop extreme of the move outside the band ± 0.25 ATR(14) Finetiq (having a stop: author)
Filter for distant stops more than 2 ATR(14) Finetiq
Target middle line Finetiq
Time exit 30 minutes before the session close Finetiq
Holding variant until the end of the second session Finetiq (after the author's skeletons)
Market E-mini S&P 500 and mean reversion markets author

What to test

  1. Band neighborhood. Length 15, 20, 30 and width 1.5, 2, 2.5 standard deviations. If the result holds only around one pair of values, it is overfitting, not a property of the market.
  2. Timeframe. The same entry on 15, 30 and 60 minutes. Unger claims that below 30 minutes noise drowns out the signal. Check whether the average trade on 15 minutes falls faster than the number of trades grows.
  3. Bands versus static levels. The same logic, "a close beyond the level, then a close back inside", on yesterday's high and low and on pivot points. This is a direct test of the author's main claim.
  4. Exit. The middle line versus the opposite band, versus an end-of-session exit with no target and versus holding until the end of the second session. The author did not name an exit, and the exit may well decide the outcome.
  5. Markets. E-mini S&P versus crude oil, gold and bonds, and for each of them countertrend versus the mirror breakout. By the author's method, countertrend should not work everywhere.
  6. Daily ADX filter. Unger uses a daily ADX(5) below 35 as a breakout filter (card prev-high-breakout-adx). Test the reverse for this setup: whether the return inside the bands works better on days with ADX(5) above 35 or below it.
  7. Costs. Calculate the average trade in ticks and compare it with commission plus 1 tick of slippage on entry and on the stop. The author's criterion: if the average trade does not cover them, the system is not tradable, even with a rising equity curve.

Platform notes

TradingView (Pine Script)

  • ta.bb(close, 20, 2) returns the middle, upper and lower bands. The deviation inside is the population one, as in MQL5's iBands and EasyLanguage's StdDev, so the levels will match.
  • For CME futures the chart includes overnight trading by default. The bands on the first bars of the regular session are then calculated from overnight bars. Decide which session you use and restrict entries to the window time(timeframe.period, "0930-1500", "America/New_York").
  • The target at the middle line changes every bar: call strategy.exit("X", "L", limit = basis, stop = stopLevel) on every bar, and the order will update.
  • If both the target and the stop are hit within one 30-minute bar, the tester does not know the sequence. You need use_bar_magnifier = true (paid plans) or a check on a lower timeframe.

MultiCharts and TradeStation (EasyLanguage)

  • It is simpler to build the bands yourself so as not to depend on the implementation: Average(Close, 20) - 2 * StdDev(Close, 20). StdDev is the population deviation. StdDevS, the sample deviation, would give slightly wider bands.
  • Time is the bar's closing time. The last hour of a session that closes at 16:00 ET starts with the bar Time = 1530. Exit 30 minutes before the close: If Time >= 1530 then Sell next bar at market.
  • Sell next bar at Mid limit and a stop at a price live for one bar. Send them again on every bar while the position is open.
  • The symbol's session template decides whether overnight bars enter the band calculation. To compare with other platforms, set it explicitly.

MetaTrader 5 (MQL5)

  • iBands calculates the population deviation of closes, like Pine and EasyLanguage.
  • An S&P 500 CFD trades almost around the clock and is quoted with a basis to the futures. Bands and signals on the CFD will differ, especially during overnight hours with a wide spread. Restrict entries to the regular session hours converted to server time, taking daylight saving time into account.
  • 30-minute bars are stamped with their opening time on the broker's server. The 16:00 ET session close on a GMT+2/+3 server is usually 23:00, but in the weeks when daylight saving time is out of sync it shifts by an hour.
  • Take the signal from the closed bar (index 1) and check for a new bar, otherwise the entry will repeat on every tick.

Where the idea can break

  • In the interview the setup takes less than a minute: no test, no numbers, no parameters. The author offers it as a starting point for research.
  • Almost everything except the entry and the timeframe is our formalization. The stop, target and time exit are starting values, not Unger's rules.
  • The author's method is built around a specific market. Applying one parameter set to all futures contradicts this approach, and failure on trending markets is to be expected.
  • In a strong trend price walks along the band. Closes alternating outside and inside produce a series of entries against the move, and each of them can end at the stop.
  • Intraday mean reversion produces a small average trade. Slippage and commission on 30-minute bars can easily eat the whole result.
  • High volatility after news widens the bands after the fact. A return inside after a data release may simply be the bands widening, not a price reversal.

Sources

  • 038 - Andrea Unger - 672% Returns? Sure! Would You Like Some Risk with That?

    The Algorithmic Advantage · Andrea Unger · 2025-05-07

    • 00:23Host: four trading championship titles, three in a row
    • 22:10System skeleton: exit at the end of the day or after two days, always a stop
    • 24:53Some markets for breakouts, others for countertrend
    • 32:02Indicators only as a filter and no lower than 30 minutes
    • 36:28Daily ADX(5) below 35 as a breakout filter
    • 38:25Bollinger Bands as a location, not an indicator
    • 38:5230 minutes, a return inside the envelope, countertrend with a stop
    • 1:36:04On the E-mini S&P, a preference for countertrend with limit orders

Author's claims

These figures and statements are the author's. We have not verified them.

  • According to the host, Andrea Unger won the trading championship four times, three of them in a row.
  • Unger: the same breakout entry works much better with a daily ADX(5) below 35 than above 35. Unger gives no test figures, and the statement does not concern the return inside the bands.

Related ideas

Updated: 2026-09-11