Universal Bollinger uses custom exponential bands on log price (42 periods, 1.618 deviations) and a 100 SMA trend filter. Above the SMA it buys strong breakouts confirmed by RSI(2), and below it buys a close back inside the lower band, with mirrored rules for shorts. Positions close on a sharp ATR(2) move with RSI(2) at an extreme, or reverse on an opposite signal.
Best run of 11. Nikkei 225, 10 min, spread 10, from run sweeps:2026-09-26-NIKKEI-10m-opt.tsv:2.
| Period | Up to 2026-09-26 |
| Instrument | Nikkei 225, 10 minutes |
| Spread | 10 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-26 |
| positionSize Contracts per trade | 1 |
| bandPeriod Length of the exponential bands | 42 |
| bandWidth Band distance in standard deviations | 1.618 |
| seedPeriod SMA used to seed the bands on the first bars | 3 |
| trendPeriod SMA trend filter length | 100 |
| rsiPeriod RSI length | 2 |
| atrPeriod ATR length for the exit | 2 |
| breakoutRsiLong RSI above this confirms an upside band break | 70 |
| breakoutRsiShort RSI below this confirms a downside band break | 40 |
| reentryRsiLevel RSI side needed when price falls back inside a band | 50 |
| longExitRsi Long exit needs RSI below this | 5 |
| shortExitRsi Short exit needs RSI above this | 95 |
Every run
| Market | Timeframe | PF | Trades | Win % | Net | Max DD |
|---|---|---|---|---|---|---|
| Nikkei 225Best run | 10 min | n/a | 3,898 | 37.84 | 27,728 USD | -16,037 |
| EUR/USD | 4 hours | n/a | 681 | 41.85 | 80,338 USD | -62,580 |
| Dow Jones | Daily | n/a | 198 | 41.92 | 18,228 EUR | -8,765 |
| Silver | Daily | n/a | 247 | 34.01 | 16,417 USD | -12,212 |
| Nasdaq 100 | Daily | n/a | 166 | 38.55 | 15,964 EUR | -4,641 |
| Dow Jones | 1 hour | n/a | 715 | 40.00 | 12,870 EUR | -9,986 |
| Nasdaq 100 | 1 hour | n/a | 2,050 | 36.68 | 12,343 EUR | -7,675 |
| Dow Jones | 4 hours | n/a | 187 | 41.71 | 11,226 EUR | -6,553 |
| Gold | Daily | n/a | 254 | 34.65 | 2,528 EUR | -1,282 |
| S&P 500 | 30 min | n/a | 3,757 | 39.13 | 2,285 EUR | -1,459 |
| Gold | 4 hours | n/a | 524 | 40.84 | 1,609 EUR | -1,174 |
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.
// ============================================================ // Universal Bollinger // ProRealAlgos Strategy Library | prorealalgos.com // Type: Volatility // Direction: Long & short // Timeframe tested: 10 minutes // ============================================================ // --- Settings --- DEFPARAM CumulateOrders = false // --- Parameters --- positionSize = 1 // contracts per trade bandPeriod = 42 // length of the exponential bands bandWidth = 1.618 // band distance in standard deviations seedPeriod = 3 // SMA used to seed the bands on the first bars trendPeriod = 100 // SMA trend filter length rsiPeriod = 2 // RSI length atrPeriod = 2 // ATR length for the exit breakoutRsiLong = 70 // RSI above this confirms an upside band break breakoutRsiShort = 40 // RSI below this confirms a downside band break reentryRsiLevel = 50 // RSI side needed when price falls back inside a band longExitRsi = 5 // long exit needs RSI below this shortExitRsi = 95 // short exit needs RSI above this // --- Indicators --- // Bands built on log price with exponentially weighted mean and variance. logPrice = LOG(CustomClose) smoothing = 2 / (bandPeriod + 1) IF BarIndex < bandPeriod THEN logMean = Average[seedPeriod](logPrice) ELSE logMean = smoothing * logPrice + (1 - smoothing) * logMean ENDIF logError = logPrice - logMean squaredError = SQUARE(logError) IF BarIndex < bandPeriod + 1 THEN logVariance = squaredError ELSE logVariance = smoothing * squaredError + (1 - smoothing) * logVariance ENDIF logStdDev = SQRT(logVariance) upperBand = EXP(logMean + (bandWidth * logStdDev)) lowerBand = EXP(logMean - (bandWidth * logStdDev)) trendMA = Average[trendPeriod](close) rsiValue = RSI[rsiPeriod](close) atrValue = AverageTrueRange[atrPeriod](close)
25 more lines: the entry and exit rules.
Read this first
Questions
Yes. The bands are calculated in the code, so no custom indicator is needed. There is no stop, so add your own protection.
Nikkei 225 10 minutes made 27,727.80 USD over 3898 trades. EUR/USD, Dow Jones, Silver, Nasdaq 100, Gold and S&P 500 were also positive in the runs shown.
At 1 contract with a 10 point spread, Nikkei 225 10 minutes had a max drawdown of 16,037 USD.
RSI(2) and ATR(2) react within a few bars, so short charts give many signals. It was also tested on 30 minutes up to Daily.
Related
The ProRealAlgos community gets the full rules, the complete code and the automated portfolio.