This long only setup buys sharp selloffs. It waits for close to fall below 97.5% of the lower Bollinger band while RSI(10) is under 20 and the 200 period SMA is falling. The position is sold 2 bars later or stopped out at 2.5%.
Best run of 44. FTSE 100, 1 hour, spread 2, from run pf:2026-09-16-FTSE100-1h.tsv:1.
| Period | Up to 2026-09-16 |
| Instrument | FTSE 100, 1 hour |
| Spread | 2 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-16 |
| positionSize Contracts per trade | 1 |
| bandPeriod Band centre SMA | 100 |
| stdDevPeriod Standard deviation length | 10 |
| bandWidth Band width in deviations | 1 |
| bandDiscount Close must be this fraction of the lower band | 0.975 |
| trendPeriod Falling trend SMA | 200 |
| trendLag Bars back for the trend comparison | 2 |
| rsiPeriod RSI length | 10 |
| oversoldLevel RSI entry level | 20 |
| maxBarsInTrade Time exit bars | 2 |
| stopLossPct Protective stop, percent | 2.5 |
Every run
| Market | Timeframe | PF | Trades | Win % | Net | Max DD |
|---|---|---|---|---|---|---|
| FTSE 100Best run | 1 hour | 1.74 | 117 | 58.12 | 1,179 EUR | -440 |
| Nasdaq 100 | 1 hour | 1.68 | 228 | 51.75 | 3,243 EUR | -554 |
| DAX 40 | 30 min | 1.39 | 141 | 53.90 | 1,352 EUR | -595 |
| Nikkei 225 | 1 hour | 1.23 | 147 | 54.42 | 2,851 USD | -2,071 |
| USD/JPY | 1 hour | n/a | 32 | 53.12 | 62,610 JPY | -42,220 |
| EUR/USD | Daily | n/a | 61 | 60.66 | 32,279 USD | -4,852 |
| USD/JPY | 15 min | n/a | 4 | 100.00 | 21,830 JPY | -450 |
| Nikkei 225 | Daily | n/a | 46 | 60.87 | 11,659 USD | -3,933 |
| USD/JPY | 10 min | n/a | 1 | 100.00 | 5,760 JPY | -3,760 |
| Silver | 2 min | n/a | 78 | 58.97 | 3,833 USD | -2,625 |
| Dow Jones | 30 min | n/a | 46 | 67.39 | 3,124 EUR | -607 |
| EUR/USD | 1 hour | n/a | 11 | 81.82 | 2,932 USD | -1,720 |
| Nikkei 225 | 5 min | n/a | 26 | 69.23 | 2,654 USD | -1,706 |
| Dow Jones | 15 min | n/a | 29 | 65.52 | 2,647 EUR | -826 |
| Nikkei 225 | 10 min | n/a | 41 | 48.78 | 2,092 USD | -1,938 |
| Dow Jones | 1 hour | n/a | 51 | 49.02 | 1,910 EUR | -1,748 |
| DAX 40 | Daily | n/a | 55 | 43.64 | 1,871 EUR | -1,039 |
| Nasdaq 100 | 15 min | n/a | 75 | 57.33 | 1,830 EUR | -745 |
| Silver | 1 min | n/a | 28 | 60.71 | 1,469 USD | -912 |
| Brent Crude | 2 min | n/a | 52 | 65.38 | 1,197 EUR | -731 |
| Brent Crude | 5 min | n/a | 55 | 52.73 | 937 EUR | -778 |
| DAX 40 | 15 min | n/a | 59 | 66.10 | 934 EUR | -542 |
| FTSE 100 | 30 min | n/a | 72 | 50.00 | 875 EUR | -367 |
| Brent Crude | 1 min | n/a | 42 | 47.62 | 825 EUR | -666 |
| S&P 500 | 30 min | n/a | 74 | 63.51 | 526 EUR | -79.10 |
| Dow Jones | 3 min | n/a | 3 | 66.67 | 522 EUR | -192 |
| Gold | Daily | n/a | 68 | 58.82 | 489 EUR | -53.10 |
| DAX 40 | 5 min | n/a | 8 | 37.50 | 457 EUR | -160 |
| Dow Jones | 5 min | n/a | 3 | 66.67 | 369 EUR | -127 |
| Nasdaq 100 | 3 min | n/a | 8 | 50.00 | 305 EUR | -177 |
| Gold | 30 min | n/a | 83 | 55.42 | 303 EUR | -223 |
| Nikkei 225 | 2 min | n/a | 2 | 100.00 | 289 USD | -225 |
| Gold | 2 min | n/a | 11 | 81.82 | 256 EUR | -92.50 |
| Gold | 10 min | n/a | 20 | 60.00 | 256 EUR | -161 |
| DAX 40 | 3 min | n/a | 3 | 66.67 | 242 EUR | -187 |
| S&P 500 | 15 min | n/a | 35 | 45.71 | 207 EUR | -182 |
| Gold | 3 min | n/a | 14 | 78.57 | 191 EUR | -191 |
| Nikkei 225 | 1 min | n/a | 2 | 100.00 | 138 USD | -7.40 |
| S&P 500 | 5 min | n/a | 8 | 87.50 | 118 EUR | -27.25 |
| Nasdaq 100 | 2 min | n/a | 1 | 100.00 | 110 EUR | -13.40 |
| GBP/USD | 10 min | n/a | 1 | 100.00 | 95.30 USD | -31.80 |
| FTSE 100 | 10 min | n/a | 6 | 50.00 | 84.10 EUR | -53.30 |
| FTSE 100 | 3 min | n/a | 1 | 100.00 | 83.50 EUR | -14.30 |
| S&P 500 | 3 min | n/a | 3 | 66.67 | 73.25 EUR | -23.50 |
Charts
Above 1.0 made money, below 1.0 lost money.
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 Reversal // ProRealAlgos Strategy Library | prorealalgos.com // Type: Mean reversion // Direction: Long only // Timeframe tested: 1 hour // ============================================================ // --- Settings --- DEFPARAM CumulateOrders = false DEFPARAM PreloadBars = 1000 // --- Parameters --- positionSize = 1 // contracts per trade bandPeriod = 100 // SMA at the centre of the band stdDevPeriod = 10 // standard deviation length bandWidth = 1 // band distance in standard deviations bandDiscount = 0.975 // close must be this fraction of the lower band or lower trendPeriod = 200 // SMA that must be falling trendLag = 2 // compare the trend SMA with its value this many bars ago rsiPeriod = 10 // RSI length oversoldLevel = 20 // RSI must be below this maxBarsInTrade = 2 // exit after this many bars stopLossPct = 2.5 // protective stop, percent of entry price // --- Indicators --- midBand = Average[bandPeriod](close) stdDevValue = STD[stdDevPeriod](close) lowerBand = midBand - bandWidth * stdDevValue trendMA = Average[trendPeriod](close) rsiValue = RSI[rsiPeriod](close)
17 more lines: the entry and exit rules.
Read this first
Questions
Yes. It is a ProOrder system with a fixed 2.5% stop loss and a 2 bar time exit, so every trade has a defined end.
Nasdaq 100 1 hour reached a profit factor of 1.68 and 3,243.1 EUR, and DAX 40 30 minutes reached 1.39. Nikkei 225 1 hour was weaker at 1.23 with a 2,071.4 USD drawdown.
On FTSE 100 1 hour the worst drawdown was 439.9 EUR at 1 contract. The average trade was 10.08 EUR, so costs matter a lot here.
FTSE 100 1 hour gave the best profit factor, 1.74, and Nasdaq 100 1 hour was close at 1.68. The 2 bar time exit keeps trades short on hourly bars.
Related
The ProRealAlgos community gets the full rules, the complete code and the automated portfolio.