Alan Ross

Alan Ross Forex

Free Forex Indicators, MetaTrader Tools and Honest Trading Guides

Manual Strategies

Support and Resistance Tested: Random Levels Held Better Than Real Ones

Key takeaways

  • I coded swing support and resistance as a rule and measured 8,092 touches on 16,926 EURUSD 5-minute bars. The level held 56.3% of the time.
  • Then I invented 2,778 fake levels at random prices and ran the identical test. The random levels held 59.8% — better than the real ones, in all five random runs.
  • The famous “bounce rate” is mostly the width of your line. At a 1-pip tolerance levels held 49.5%; at 10 pips, 82.8%; at 20 pips, 94.3%. Same levels, same bars.
  • Trading the bounce lost 9,000 pips after costs. Trading the break instead of the bounce lost 7,183. Both sides of the same moment were losers.
  • “The more times a level is tested, the stronger it gets” is backwards here: first touches held 60.0%, second touches 53.0%, third 52.8%.
  • With a 10-bar swing window there are 72 levels per 10 pips of range — one every 0.14 pips. On a chart that dense, price cannot move without touching support.

Support and resistance is the one thing almost every trader believes in. Indicators come and go, but horizontal lines are treated as the furniture of the market itself — not a tool with a hit rate, just how price works. That belief is exactly why it deserves a number.

So I turned it into a rule with no room for opinion. A level is a swing high or swing low: the highest high (or lowest low) in a window of ten bars on each side. The level only becomes known ten bars after the fact, so there is no peeking into the future. A touch is any bar whose range covers the level within 2 pips, approached from one side, with a 12-bar cooldown so one long consolidation cannot count as forty touches. The level “held” if, 24 bars later, price was still on the side it approached from.

Then I ran it over 16,926 EURUSD 5-minute bars from June 3 to August 26, 2026 — the same dataset behind my candlestick pattern test and my MACD crossover backtest, so everything here is directly comparable.

Did the levels hold?

EURUSD chart with horizontal support and resistance lines drawn across it

Yes. 8,092 touches, 56.3% of them held. That is a perfectly respectable number and it is the number most articles about support and resistance would stop at.

Swing windowLevels foundTouchesHeldAvg pips
5 bars each side5,2919,01156.6%-0.05
10 bars each side2,7788,09256.3%-0.11
20 bars each side1,4306,70856.0%-0.20
40 bars each side6994,54355.2%-0.25

Notice how flat that column is. Making the level eight times more selective — from 5,291 levels down to 699 — moved the hold rate by 1.4 points, and moved it the wrong way. That flatness was the first thing that bothered me, because a real effect usually gets stronger when you demand more of it.

What happens if the levels are fake?

Trading screen showing a EURUSD 5-minute chart with several drawn price levels

This is the test that settled it. I threw away the swing highs and lows and generated 2,778 levels at random prices inside the same range, born at random times in the first half of the data. Everything else stayed identical: 2-pip tolerance, 12-bar cooldown, 24-bar outcome. Five different random seeds.

Level sourceLevelsHeldAvg pips
Real swing highs and lows2,77856.3%-0.11
Random prices, run 12,77859.8%+0.04
Random prices, five runs2,778 each59.7% – 60.0%+0.04 avg

Lines drawn at prices nobody ever traded held 3.5 points better than lines drawn at actual swing highs and lows, and did so in every single run, inside a range of 0.3 points. There is no story to tell about the real levels being special, because the fake ones were slightly better.

The reason is not mystical. It is the same reason my rule against random entry test found so little between a coded strategy and a coin flip: price on a five-minute chart mostly oscillates, so any horizontal line it touches will more often than not have price back on the same side two hours later. That is a property of the price series, not of the line.

Why does the hold rate keep changing?

Because “touched the level” is not a fact, it is a setting. I re-ran the identical levels and only changed how close price has to come before I call it a touch.

ToleranceTouchesHeldAvg pipsWin rate
1 pip6,78749.5%-0.0548.4%
2 pips8,09256.3%-0.1148.0%
3 pips8,89862.3%-0.1347.5%
5 pips9,34567.5%-0.1647.3%
10 pips9,50682.8%-0.2047.3%
20 pips9,10994.3%-0.1547.3%

Read the two end columns together. As the line gets fatter the hold rate climbs from a coin flip to 94%, and the money gets slightly worse at every step. You can manufacture any bounce rate you like between 50% and 95% without changing a single level — just by deciding how thick your line is. When someone tells you their zones hold 80% of the time, they have told you about their zones, not about the market.

One honest note on the low end: the Yahoo five-minute feed I use quantises price to roughly 1.31 pips, so a tolerance below about 1.3 pips cannot be measured on this data. The 1-pip row is the floor here, not a claim about tick data.

How many levels are there anyway?

Over the whole sample EURUSD travelled a total range of 386.2 pips. Here is how many levels each definition planted in it.

Swing windowLevelsLevels per 10 pipsOne level every
5 bars5,291137.00.07 pips
10 bars2,77871.90.14 pips
20 bars1,43037.00.27 pips
40 bars69918.10.55 pips

Even at the strictest setting there are eighteen levels in every ten pips of price. The median EURUSD five-minute bar is 1.33 pips tall — meaning an average single bar covers two or three levels on its way past. Every reversal you will ever see happened at a level, because there is nowhere else for it to happen. This is the trap the eye falls into on a chart: you notice the levels that were touched and turned, and never count the hundreds that were touched and ignored.

Does a level get stronger each time it is tested?

The standard claim is yes — a third touch is more meaningful than a first. I tracked every level individually and grouped its touches by order of arrival.

Touch numberTouchesHeldAvg pips
1st touch24060.0%-0.30
2nd touch23453.0%-1.33
3rd touch23152.8%-1.03
4th and beyond7,38756.4%-0.04

The first touch was the best one, and the second and third were the worst in the table by both measures. If anything the data says a level is at its most useful the moment before anyone has confirmed it — which is precisely when nobody is willing to trade it. The same shape showed up in my optimised against default settings test: the more a rule is validated on its own history, the less it delivers next.

Was there any money in it?

No, in either direction. Entry at the close of the touching bar, exit 24 bars later, one pip charged per trade for the spread I measured in my spread and swap costs test.

Trade the touchTradesWin rateAvg pipsNet after cost
Bounce — fade the level8,09248.0%-0.11-9,000.8
Break — trade through the level8,09245.0%+0.11-7,183.2

These are the same 8,092 moments traded in opposite directions, and both lose. That is the signature of no information at all: when a signal has an edge, reversing it produces a mirror-image profit. Here reversing it produces a second, differently-shaped loss, because the only thing being harvested is the spread.

Stops and targets did not save it either. Ten pips each way resolved 3,717 targets against 3,491 stops — a 45.9% win rate and 5,814 pips of net loss. A 20-pip target with a 10-pip stop hit 21.2% of the time, when 33.3% is break-even. The distances come from my stop loss distance test, and the movement data explains the result: after a touch, price ran an average of 6.72 pips in favour and 6.78 pips against. It reached 10 pips of profit 23.1% of the time and 10 pips of loss 21.4% of the time. Symmetric to within two points.

What did move the numbers?

Only one thing, and it was not the level. Splitting every touch by whether it was aligned with the 200-bar EMA:

Same levels, filtered by trendTouchesAvg pips
Trading with the EMA 2004,574+0.45
Trading against the EMA 2005,639-0.45

Plus and minus the same number to the decimal. All the variation in the result came from which way the trend was pointing, not from the line — the level was a coin the trend was flipping. That result sits comfortably beside my moving average crossover test and the trend-filter behaviour in my ADX above 25 test: direction is measurable, location is not.

Support did hold slightly less often than resistance in every single test I ran — 55.1% against 57.5% on the main run — and that asymmetry repeated across pivots, round numbers and Fibonacci levels, which I take apart in the companion piece on support and resistance against Fibonacci and pivots.

What I would actually do with this

  • Stop quoting a bounce rate. It is a function of your zone width, not of the market. Anything from 50% to 94% is available on the same levels.
  • Never trade a level naked. Both the bounce and the break lost over 8,092 touches. The moment carries no direction of its own.
  • Use levels as scenery, trade the trend. The only split that produced a real difference was EMA 200 alignment: +0.45 with it, -0.45 against it.
  • Distrust the “well-tested level”. Second and third touches held worse than first touches on this data.
  • Count the levels you ignored. At 72 levels per 10 pips, every turn happens at one. That is not evidence, it is arithmetic.

Frequently asked questions

Does support and resistance actually work in forex?

Not as a standalone entry on this data. Across 8,092 touches of swing levels on 16,926 EURUSD 5-minute bars, fading the level lost 0.11 pips per trade and trading the break through it lost after costs too. The levels held 56.3% of the time, but randomly generated levels held 59.8% on the same bars.

How often does price bounce off support or resistance?

Anywhere between 49.5% and 94.3% of the time, depending entirely on how wide you draw the level. At a 1-pip tolerance it is 49.5%, at 2 pips 56.3%, at 10 pips 82.8%. The profitability does not improve at any of those settings.

Are support levels stronger than resistance levels?

The opposite, slightly and consistently. Resistance held 57.5% of the time against 55.1% for support on swing levels, and the same direction of gap appeared on daily pivots, round numbers and Fibonacci levels.

Does a level get stronger the more times it is tested?

Not here. First touches held 60.0% of the time, second touches 53.0% and third touches 52.8%. The most-tested levels were not the best ones.

Should I trade the bounce or the breakout?

On this dataset, neither in isolation — the same 8,092 moments lost 9,000 pips traded as bounces and 7,183 pips traded as breaks. If you must pick, filter by trend: touches aligned with the EMA 200 averaged +0.45 pips, against it -0.45. My Ichimoku cloud breakout test found the same dependence on direction.

What settings should I use for a support and resistance indicator on MT4?

I tested 144 combinations of swing window, zone width, holding time and filters. Sixteen finished positive after costs and every one of them shared the same time-of-day filter rather than the same settings — the full grid is in my support and resistance settings guide for MT4.

What data was this run on?

16,926 EURUSD 5-minute bars, June 3 to August 26, 2026, covering a 386.2-pip range. Levels are known only after their confirmation bar, so there is no lookahead — the same set behind my Fibonacci retracement test and my Parabolic SAR test.

Want a clean indicator to install right now?

It is my own enhanced DeMARK Trend Line indicator for MetaTrader 4 and 5. Non repaint, clean, and free.

Download the Free DeMARK Indicator

Written by Alan Ross

Forex trader and MetaTrader indicator developer. I build and test MT4 and MT5 tools, then write the honest version of how they actually work. More about me.

Last reviewed September 2026
Alan Ross
Alan Ross

Forex educator and indicator developer. I build and trade my own MetaTrader tools, and share the ones that genuinely help.

Leave a comment

Your email address will not be published. Comments are reviewed before they appear.