The channel is the 20 EMA plus or minus 2 times ATR(10). A close above the upper line opens a long and a close below the lower line opens a short. Trades close when price crosses back through the 20 EMA or hit a 1% stop.
Best run of 16. Nasdaq 100, 30 min, spread 3, from run sweeps:2026-09-07-NAS100-30m-opt.tsv:14.
| 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 EMA length at the channel centre | 20 |
| atrPeriod ATR length for the channel width | 10 |
| atrMultiplier Channel width in ATRs each side | 2 |
| stopLossPct Protective stop as percent of entry price | 1 |
Every run
| Market | Timeframe | PF | Trades | Win % | Net | Max DD |
|---|---|---|---|---|---|---|
| Nasdaq 100Best run | 30 min | n/a | 4,800 | 35.25 | 83.50 EUR | -7,693 |
| DAX 40 | 1 hour | n/a | 2,746 | 35.11 | 2,704 EUR | -5,869 |
| DAX 40 | 30 min | n/a | 4,712 | 34.85 | 2,020 EUR | -6,069 |
| Gold | 30 min | n/a | 4,251 | 34.30 | 602 EUR | -1,811 |
| Gold | 1 hour | n/a | 2,678 | 35.88 | 329 EUR | -1,231 |
| Gold | 5 min | n/a | 4,176 | 31.63 | -1,057 EUR | -1,442 |
| Gold | 15 min | n/a | 4,188 | 30.56 | -1,628 EUR | -2,510 |
| Nasdaq 100 | 5 min | n/a | 4,397 | 33.45 | -2,512 EUR | -4,879 |
| S&P 500 | 30 min | n/a | 4,754 | 33.24 | -2,548 EUR | -3,780 |
| S&P 500 | 5 min | n/a | 4,500 | 30.13 | -3,341 EUR | -3,392 |
| Nasdaq 100 | 1 hour | n/a | 3,124 | 33.13 | -3,904 EUR | -9,198 |
| S&P 500 | 1 hour | n/a | 3,061 | 34.20 | -4,081 EUR | -4,297 |
| S&P 500 | 15 min | n/a | 4,715 | 31.73 | -5,071 EUR | -5,160 |
| DAX 40 | 5 min | n/a | 4,727 | 29.41 | -11,029 EUR | -12,366 |
| DAX 40 | 15 min | n/a | 4,628 | 32.48 | -11,929 EUR | -14,467 |
| Nasdaq 100 | 15 min | n/a | 4,691 | 32.62 | -12,165 EUR | -12,494 |
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.
// ============================================================ // Keltner Breakout // ProRealAlgos Strategy Library | prorealalgos.com // Type: Breakout // Direction: Long & short // Timeframe tested: 30 minutes // ============================================================ // --- Settings --- DEFPARAM CumulateOrders = false // --- Parameters --- positionSize = 1 // contracts per trade bandPeriod = 20 // EMA at the centre of the channel atrPeriod = 10 // ATR length for the channel width atrMultiplier = 2 // channel width in ATRs each side stopLossPct = 1 // protective stop, percent of entry price // --- Indicators --- midBand = ExponentialAverage[bandPeriod](close) atrValue = AverageTrueRange[atrPeriod](close) upperBand = midBand + atrMultiplier * atrValue lowerBand = midBand - atrMultiplier * atrValue
27 more lines: the entry and exit rules.
Read this first
Questions
Technically yes, but the tests do not support running it as is. The rewritten code was also not compile-checked.
DAX 40 1 hour made EUR 2,703.9, DAX 40 30 minutes EUR 2,019.8, and Gold on 30 minutes and 1 hour was slightly positive. The rest lost.
The best run drew down EUR 7,693 at position size 1, many times its net profit.
On 5 and 15 minute charts the 3 point spread eats a large share of each small move, and those were the worst results.
Related
Copy trading on US indices is available to ProRealAlgos members as spots open.