Join today
Strategies / Breakout / Keltner Breakout

Keltner Channel Breakout

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.

BreakoutLong & shortIntradayNasdaq 10030 min
n/aProfit factor
83.50Net profit EUR
35.25%Win rate
4,800Trades
-7,693Max drawdown
0.02Avg trade

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

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 above the 20 EMA

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
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

Markets and timeframes tested

MarketTimeframePFTradesWin %NetMax DD
Nasdaq 100Best run30 minn/a 4,80035.2583.50 EUR-7,693
DAX 401 hourn/a 2,74635.112,704 EUR-5,869
DAX 4030 minn/a 4,71234.852,020 EUR-6,069
Gold30 minn/a 4,25134.30602 EUR-1,811
Gold1 hourn/a 2,67835.88329 EUR-1,231
Gold5 minn/a 4,17631.63-1,057 EUR-1,442
Gold15 minn/a 4,18830.56-1,628 EUR-2,510
Nasdaq 1005 minn/a 4,39733.45-2,512 EUR-4,879
S&P 50030 minn/a 4,75433.24-2,548 EUR-3,780
S&P 5005 minn/a 4,50030.13-3,341 EUR-3,392
Nasdaq 1001 hourn/a 3,12433.13-3,904 EUR-9,198
S&P 5001 hourn/a 3,06134.20-4,081 EUR-4,297
S&P 50015 minn/a 4,71531.73-5,071 EUR-5,160
DAX 405 minn/a 4,72729.41-11,029 EUR-12,366
DAX 4015 minn/a 4,62832.48-11,929 EUR-14,467
Nasdaq 10015 minn/a 4,69132.62-12,165 EUR-12,494

Charts

Results by run

Net profit against max drawdown

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

// ============================================================
// 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

Known weaknesses

  • The best run on Nasdaq 100 30 minutes made EUR 83.5 over 4,800 trades, an average of EUR 0.02 per trade, with a max drawdown of EUR 7,693.
  • Only 4 of 15 market runs were positive. DAX 40 15 minutes ended at EUR -11,928.6 and Nasdaq 100 15 minutes at EUR -12,165.1.
  • Profit factor was not recorded because all results come from parameter sweeps.

Indicators used

Keltner ChannelEMAATR

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

Can the Keltner Breakout run in ProOrder?

Technically yes, but the tests do not support running it as is. The rewritten code was also not compile-checked.

Where did it make money?

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.

What drawdown came with 1 contract?

The best run drew down EUR 7,693 at position size 1, many times its net profit.

Why does it struggle on short timeframes?

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

Strategies like this one

Monday Dip Buy

Uses the same indicator.

n/a PF · 146 trades

Negated Hammer

Best run on the same market, Nasdaq 100.

3.20 PF · 372 trades

Breakout Regime Filter

Also a breakout strategy.

6.28 PF · 70 trades

See which breakout systems passed our tests and went live. Join 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