Join today
Strategies / Mean reversion / Bollinger Fade

Bollinger Fade: Selling the Bands, Buying the Middle

This intraday system fades closes outside the Bollinger Bands (20, 2), buying below the lower band and shorting above the upper band. Trades close when price returns to the 20-period middle band or a 1% stop is hit.

Mean reversionLong & shortIntradayNasdaq 10030 min
n/aProfit factor
-42,800Net profit EUR
53.35%Win rate
9,756Trades
-45,750Max drawdown
-4.39Avg trade

Best run of 16. Nasdaq 100, 30 min, spread 3, from run sweeps:2026-09-07-NAS100-30m-opt.tsv:8.

Entry rules, long

  1. Members only
  2. No position is open

Entry rules, short

  1. Members only
  2. No position is open

Exit rules

  1. Stop loss at 1% from entry
  2. Members only
  3. Close a short when price closes below the middle band

Test conditions

PeriodUp to 2026-09-07
InstrumentNasdaq 100, 30 minutes
Spread3 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-07

Parameters

positionSize
Contracts per trade
1
bandPeriod
Bollinger average and deviation length
20
bandWidth
Band distance in standard deviations
2
stopLossPct
Protective stop, percent of entry price
1

Every run

Markets and timeframes tested

MarketTimeframePFTradesWin %NetMax DD
Nasdaq 100Best run30 minn/a 9,75653.35-42,800 EUR-45,750
S&P 5001 hourn/a 6,39456.16-4,483 EUR-5,016
Gold5 minn/a 7,70660.72-5,926 EUR-6,051
S&P 50015 minn/a 8,19960.00-6,921 EUR-7,596
Gold15 minn/a 8,20559.77-7,030 EUR-7,165
Gold1 hourn/a 6,12755.83-7,362 EUR-7,423
S&P 5005 minn/a 7,62858.67-7,405 EUR-7,888
Gold30 minn/a 8,97157.45-10,575 EUR-10,670
S&P 50030 minn/a 9,04656.59-11,498 EUR-11,814
DAX 4015 minn/a 8,21663.00-20,829 EUR-24,876
DAX 405 minn/a 7,51062.37-24,178 EUR-25,311
Nasdaq 1005 minn/a 7,65961.39-25,752 EUR-27,328
Nasdaq 10015 minn/a 8,58760.55-25,855 EUR-32,017
Nasdaq 1001 hourn/a 7,10452.14-28,971 EUR-31,276
DAX 401 hourn/a 5,98455.26-35,182 EUR-37,773
DAX 4030 minn/a 9,12460.32-47,270 EUR-49,151

Charts

Results by run

Net profit against max drawdown

Net profitMax drawdown
0-50K-25KS&P 500 · 1 hourGold · 5 minS&P 500 · 15 minGold · 15 minGold · 1 hourS&P 500 · 5 minGold · 30 minS&P 500 · 30 minDAX 40 · 15 minDAX 40 · 5 minNasdaq 100 · 5 minNasdaq 100 · 15 minNasdaq 100 · 1 hourDAX 40 · 1 hourNasdaq 100 · 30 minDAX 40 · 30 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.

// ============================================================
// Bollinger Fade
// ProRealAlgos Strategy Library  |  prorealalgos.com
// Type: Mean reversion
// Direction: Long & short
// Timeframe tested: 30 minutes
// ============================================================

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

// --- Parameters ---
positionSize = 1       // contracts per trade
bandPeriod = 20        // Bollinger average and deviation length
bandWidth = 2          // band distance in standard deviations
stopLossPct = 1        // protective stop, percent of entry price

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

26 more lines: the entry and exit rules.

Read this first

Known weaknesses

  • All 15 tested runs lost money, including the keyStats run on Nasdaq 100 30 minutes at EUR -42,799.80.
  • A win rate of 53.35% looks decent but the average trade was EUR -4.39, so the losing trades were larger than the winners.
  • On DAX 40 30 minutes the maximum drawdown reached EUR 49,150.70 with 1 contract.
  • Only sweep data exists, so profit factor was not recorded, and the results are from the code before its rewrite.

Indicators used

Bollinger Bands

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

Will this run in ProOrder?

Yes, it is written as an automated system with 1 contract per trade and a 1% stop loss. No tested run made money, so treat it as a baseline rather than a live candidate.

What happened on each market?

S&P 500, Gold, DAX 40 and Nasdaq 100 were tested on 5 minute to 1 hour charts. S&P 500 1 hour lost the least at EUR -4,482.65, and DAX 40 30 minutes lost the most at EUR -47,269.60.

How much capital does 1 contract need?

The best listed run had a maximum drawdown of EUR 45,749.80 at 1 contract. Plan capital around drawdowns of that size, plus your broker margin.

Why does a high win rate still lose?

Price often snaps back to the middle band, but when a trend keeps going the trade runs into the 1% stop. Those stop outs outweighed the many small wins.

Related

Strategies like this one

Bollinger Squeeze

Uses the same indicator.

14.30 PF · 86 trades

Negated Hammer

Best run on the same market, Nasdaq 100.

3.20 PF · 372 trades

Monday Dip Buy

Also a mean reversion strategy.

n/a PF · 146 trades

Curious which mean reversion setups did make it through testing? Get on the ProRealAlgos waitlist.

Copy trading on US indices is available to ProRealAlgos members as spots open.

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