Join today
Strategies / Volatility / Volatility Breakout

Volatility Breakout: Riding Unusually Wide Bars

When a bar is at least 0.9 times as wide as the 72-bar average daily range, the system follows its direction: long on an up bar, short on a down bar. It takes profit at 1.9 times the average daily range or leaves after 9 bars. An opposite signal flips the position.

VolatilityLong & shortSwingDAX 401 hour
1.39Profit factor
6,346Net profit EUR
50.74%Win rate
475Trades
-1,049Max drawdown
13.36Avg trade

Best run of 23. DAX 40, 1 hour, spread 3, from run pf:2026-09-24-DAX40-1h.tsv:2.

Entry rules, long

  1. Members only
  2. The bar closes at or above its open

Entry rules, short

  1. Members only
  2. The bar closes below its open

Exit rules

  1. Members only
  2. Close after 9 bars in the trade
  3. An opposite signal reverses the position
  4. No stop loss

Test conditions

PeriodUp to 2026-09-25
InstrumentDAX 40, 1 hour
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-25

Parameters

positionSize
Size per point
1
rangePeriod
Bars in the average of the previous day's range
72
atrPeriod
ATR length (1 is the bar's own true range)
1
volatilityFactor
Share of the average daily range a bar must reach
0.9
targetFactor
Target as a multiple of the average daily range
1.9
maxBarsInTrade
Time exit after this many bars
9

Every run

Markets and timeframes tested

MarketTimeframePFTradesWin %NetMax DD
DAX 40Best run1 hour1.39 47550.746,346 EUR-1,049
Dow Jones1 hourn/a 17455.175,386 EUR-1,917
Silver10 minn/a 11342.482,862 USD-1,813
Brent Crude30 minn/a 16347.852,437 EUR-1,330
Dow Jones15 minn/a 8946.072,231 EUR-1,223
Dow Jones10 minn/a 7450.002,177 EUR-832
DAX 4030 minn/a 32747.091,738 EUR-1,161
US Crude Oil15 minn/a 15145.701,457 EUR-665
Silver5 minn/a 5238.461,391 USD-1,040
Silver2 minn/a 2100.001,027 USD-259
FTSE 10030 minn/a 22042.73978 EUR-792
Nikkei 2253 minn/a 1566.67945 USD-540
Silver3 minn/a 366.67859 USD-482
DAX 405 minn/a 14639.04707 EUR-610
Nasdaq 1003 minn/a 2055.00623 EUR-409
Nikkei 2252 minn/a 757.14600 USD-415
S&P 50015 minn/a 12850.78588 EUR-193
DAX 4010 minn/a 13544.44556 EUR-378
Dow Jones2 minn/a 1030.00452 EUR-346
Gold3 minn/a 955.5697.10 EUR-43.40
S&P 5002 minn/a 1353.8594.96 EUR-47.31
S&P 5001 minn/a 757.1476.58 EUR-64.92
Gold1 minn/a 2100.0022.30 EUR-14.60

Charts

Results by run

Net profit against max drawdown

Net profitMax drawdown
0-2K-1K5K10KDAX 40 · 1 hourDow Jones · 1 hourSilver · 10 minBrent Crude · 30 minDow Jones · 15 minDow Jones · 10 minDAX 40 · 30 minUS Crude Oil · 15 minSilver · 5 minSilver · 2 minFTSE 100 · 30 minNikkei 225 · 3 minSilver · 3 minDAX 40 · 5 minNasdaq 100 · 3 minNikkei 225 · 2 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.

// ============================================================
// Volatility Breakout
// ProRealAlgos Strategy Library  |  prorealalgos.com
// Type: Volatility
// Direction: Long & short
// Timeframe tested: 1 hour
// ============================================================

// --- Settings ---
DEFPARAM CumulateOrders = false

// --- Parameters ---
positionSize = 1          // size per point
rangePeriod = 72          // bars in the average of the daily range
atrPeriod = 1             // ATR length, 1 = this bar's true range
volatilityFactor = 0.9    // bar range must reach this share of the average daily range
targetFactor = 1.9        // target as a multiple of the average daily range
maxBarsInTrade = 9        // time exit after this many bars

// --- Indicators ---
// On Monday use the range from two days back, since Sunday has no real range.
IF OpenDayOfWeek = 1 THEN
  dayRange = DHigh(2) - DLow(2)
ELSE
  dayRange = DHigh(1) - DLow(1)
ENDIF

avgDayRange = Average[rangePeriod](dayRange)
atrValue = AverageTrueRange[atrPeriod](close)
targetDistance = avgDayRange * targetFactor
wideBar = atrValue >= volatilityFactor * avgDayRange
barsInTrade = BarIndex - TradeIndex

28 more lines: the entry and exit rules.

Read this first

Known weaknesses

  • There is no stop loss. A trade can only end at the target, after 9 bars, or on a reversal signal.
  • Several runs have tiny samples, such as 2 trades on Gold 1 minute and 2 on Silver 2 minutes, so their profits say little.
  • The target is passed as points even though it is a price distance. On instruments where one point is not one price unit, the real target differs from the formula.
  • Only the DAX 40 1 hour run has a recorded profit factor (1.39); the rest are sweep results.

Indicators used

ATR

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

Is it ProOrder ready?

Yes, it runs unattended and sizes in per point units. Check the target distance on your instrument first, because of how the points conversion works.

Which markets were tested?

DAX 40 1 hour was the headline run with 6,346.40 EUR over 475 trades. All 22 other runs in the table were positive, including Dow Jones 1 hour at 5,386.40 EUR and Silver 10 minutes at 2,861.50 USD.

What was the risk at 1 contract?

The DAX 40 1 hour run had a max drawdown of 1,049.20 EUR at 1 contract with a 3 point spread.

Why the 1 hour chart?

The entry compares one bar to a whole day of range. On 1 hour bars that happens often enough for 475 trades while still filtering small moves.

Related

Strategies like this one

ATR Band

Uses the same indicator.

10.31 PF · 53 trades

Buy After Price Fall

Best run on the same market, DAX 40.

1.88 PF · 312 trades

Dual MA Long Trend

A similar profit factor.

1.39 PF · 241 trades

Join the ProRealAlgos waitlist and see which volatility systems members run.

The ProRealAlgos community gets the full rules, the complete code and the automated portfolio.

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