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.
Best run of 16. Nasdaq 100, 30 min, spread 3, from run sweeps:2026-09-07-NAS100-30m-opt.tsv:8.
| Period | Up to 2026-09-07 |
| Instrument | Nasdaq 100, 30 minutes |
| Spread | 3 points |
| Contracts | 1 |
| Starting capital | 1,000,000 |
| Costs | Spread only. Commissions and overnight financing are not included. |
| Bars | Up to 200,000 bars, fewer where the instrument has less history |
| Last tested | 2026-09-07 |
| 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
| Market | Timeframe | PF | Trades | Win % | Net | Max DD |
|---|---|---|---|---|---|---|
| Nasdaq 100Best run | 30 min | n/a | 9,756 | 53.35 | -42,800 EUR | -45,750 |
| S&P 500 | 1 hour | n/a | 6,394 | 56.16 | -4,483 EUR | -5,016 |
| Gold | 5 min | n/a | 7,706 | 60.72 | -5,926 EUR | -6,051 |
| S&P 500 | 15 min | n/a | 8,199 | 60.00 | -6,921 EUR | -7,596 |
| Gold | 15 min | n/a | 8,205 | 59.77 | -7,030 EUR | -7,165 |
| Gold | 1 hour | n/a | 6,127 | 55.83 | -7,362 EUR | -7,423 |
| S&P 500 | 5 min | n/a | 7,628 | 58.67 | -7,405 EUR | -7,888 |
| Gold | 30 min | n/a | 8,971 | 57.45 | -10,575 EUR | -10,670 |
| S&P 500 | 30 min | n/a | 9,046 | 56.59 | -11,498 EUR | -11,814 |
| DAX 40 | 15 min | n/a | 8,216 | 63.00 | -20,829 EUR | -24,876 |
| DAX 40 | 5 min | n/a | 7,510 | 62.37 | -24,178 EUR | -25,311 |
| Nasdaq 100 | 5 min | n/a | 7,659 | 61.39 | -25,752 EUR | -27,328 |
| Nasdaq 100 | 15 min | n/a | 8,587 | 60.55 | -25,855 EUR | -32,017 |
| Nasdaq 100 | 1 hour | n/a | 7,104 | 52.14 | -28,971 EUR | -31,276 |
| DAX 40 | 1 hour | n/a | 5,984 | 55.26 | -35,182 EUR | -37,773 |
| DAX 40 | 30 min | n/a | 9,124 | 60.32 | -47,270 EUR | -49,151 |
Charts
The code
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
Questions
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.
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.
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.
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
Copy trading on US indices is available to ProRealAlgos members as spots open.