Join waitlist
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. The bar closes at or above its open

Entry rules, short

  1. The bar closes below its open

Exit rules

  1. Close after 9 bars in the trade
  2. An opposite signal reverses the position
  3. 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 (6)
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

Top 10 of 23 runs. The full list is in the table above.

Net profitMax drawdown

The code

ProBuilder, rewritten to house standard

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

Setup

How to load it

  1. Copy the code with the copy button on 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.

Indicators used

ATR
Read this firstKnown weaknesses4 points
  • 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.

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