Alan Ross

Alan Ross Forex

Free Forex Indicators, MetaTrader Tools and Honest Trading Guides

Learn Forex

Support and Resistance Indicator for MT4: 16 of 144 Variants Survived, All in the Same Three Hours

Key takeaways

  • I ran 144 settings combinations of a support and resistance rule on 16,926 EURUSD 5-minute bars: four swing windows, three zone widths, three holding times, four filters.
  • 115 were positive before costs. Only 16 survived a 1-pip spread — and all sixteen carried the same filter: trade only between 21:00 and 24:00 UTC.
  • Settings barely mattered. With no filter, 0 of 36 combinations cleared costs. With the EMA 200 trend filter, 0 of 36. With London hours only, 0 of 36. With the late window, 16 of 36.
  • The best variant — 20-bar swings, 1-pip zone, 1-hour hold, late session — made +1.27 pips a touch across 584 touches, or +0.27 after the spread.
  • That survivor is almost certainly an accounting illusion: 21:00–24:00 UTC is exactly when the real EURUSD spread stops being 1 pip.
  • Shorter holds beat longer ones everywhere. Unfiltered averages ran -0.16 to +0.12 pips at 1 hour and -0.39 to -0.04 at 4 hours.

There is no built-in support and resistance indicator in MetaTrader 4, which is why the marketplace is full of them and why nobody agrees on settings. Under the hood almost all of them do one of two things: mark swing highs and lows (fractals, ZigZag, “auto S/R”), or compute daily pivots. Both are simple enough to code exactly and test exhaustively — so I did.

The rule: a level is the highest high or lowest low in a window of N bars each side, confirmed N bars later. A touch is any bar covering that level within a tolerance, approached from one side, with a 12-bar cooldown. Enter at the close of the touching bar in the direction of the bounce, exit after a fixed number of bars, charge 1 pip for the spread from my spread and swap costs test.

Then every combination of: swing window 5, 10, 20 or 40 bars · zone width 1, 2 or 5 pips · hold 12, 24 or 48 bars · filter none, EMA 200 alignment, London hours (07:00–16:00 UTC) or the late window (21:00–24:00 UTC). 144 runs on the same 16,926 EURUSD 5-minute bars.

How many settings actually worked?

MetaTrader 4 indicator inputs dialog open over a EURUSD chart with horizontal levels
Result across 144 variantsCount
Positive before costs115 of 144
Positive after a 1-pip spread16 of 144
Best hold rate seen84.6%
Worst hold rate seen46.2%

That 115-to-16 collapse is the single most useful number on this page. Almost anything you build on levels looks like it works until you charge it a spread. The gap between “positive” and “positive after costs” is one pip, and one pip is where 99 of 144 variants died.

Which setting made the difference?

Desk monitor showing a MetaTrader 4 EURUSD chart with Fractals and a ZigZag indicator

Not the ones people argue about. Here are the 144 variants grouped by their filter — each group contains an identical set of 36 window/width/hold combinations.

FilterVariantsPositive after costBest avg pipsMedian hold rate
21:00–24:00 UTC only3616+1.2767.4%
With EMA 200 trend360+0.7155.2%
London hours only360+0.6854.8%
No filter360+0.1256.3%

Every survivor in this study shares one property, and it is not a setting. It is a clock. Swing window, zone width and holding time — the three things every support and resistance indicator exposes in its inputs dialog — could not produce a single profitable combination on their own across 36 attempts each.

What were the best sixteen?

WindowZoneHoldTouchesHeldWinAvgAfter cost
20 bars1 pip1 h58461.6%51.0%+1.27+0.27
20 bars2 pips1 h72771.4%48.6%+1.19+0.19
10 bars2 pips4 h87761.0%52.3%+1.15+0.15
5 bars2 pips4 h96661.2%52.2%+1.12+0.12
40 bars2 pips4 h47960.8%52.4%+1.10+0.10
20 bars1 pip2 h58462.3%56.0%+1.09+0.09

All of them are the late-session filter. Look down the window column: 5, 10, 20 and 40 bars all appear in the top six, with results inside 0.17 pips of each other. The parameter is doing nothing. The hour is doing everything.

Why I do not believe the winner

Because 21:00–24:00 UTC is the thinnest part of the EURUSD day. It is the New York close, the rollover window and the start of the Asian handover, and it is precisely where the assumption underneath this whole grid — a flat 1-pip spread — stops being true. Most retail EURUSD spreads widen to several pips through the rollover, and swaps are charged there too.

The best variant makes +0.27 pips per trade after a 1-pip charge. If the real cost in that window is 2 pips, it makes -0.73. The entire surviving population of this study fits inside a single pip of cost assumption, which means it is not a finding about levels — it is a finding about my cost model.

My best hours to trade EURUSD study and my session against all-day trading test both landed on the same warning from the other direction: results concentrated in illiquid hours are usually results about liquidity. This is what an overfit looks like when it is honest about itself.

What should the settings be, then?

If you are going to run a levels indicator regardless — and most people will — here is what the grid supports, ranked by how much evidence sits behind each choice.

InputWhat the data says
Swing windowBarely matters. Hold rates: 56.6% at 5 bars, 56.3% at 10, 56.0% at 20, 55.2% at 40. Use 10–20 for a readable chart, not for performance.
Zone widthSets your hold rate, not your edge. 1 pip = 49.5% held, 2 pips = 56.3%, 5 pips = 67.5%, 10 pips = 82.8%. Average pips got slightly worse at every widening.
Hold timeThe only input with a real gradient. Unfiltered averages ran -0.16 to +0.12 at 1 hour, -0.30 to +0.06 at 2 hours, -0.39 to -0.04 at 4 hours. Shorter is better.
Trend filterWorth more than all three above combined: +0.45 pips with the EMA 200 against -0.45 without. Still not enough to clear a spread on its own.
Alerts on touchAt 72 levels per 10 pips on a 10-bar window, an alert on every touch fires constantly. Restrict alerts to 40-bar swings or you will mute them by Wednesday.

How do I set this up in MT4 without buying anything?

You do not need a paid indicator to reproduce any of this. MT4 ships with everything required.

  • Fractals (Insert → Indicators → Bill Williams → Fractals) marks exactly the swing highs and lows I tested, using a 2-bar window. It confirms two bars late, which is the same honest delay my rule uses — no repainting, unlike the signal indicators I took apart in why arrow indicators repaint.
  • ZigZag (Insert → Indicators → Custom → ZigZag) gives the larger 20- and 40-bar swings. Set Depth to 20 for the window that produced the best variant here. Note that ZigZag’s last leg does repaint until the swing completes — never trade its most recent point.
  • Horizontal line (the toolbar, or Ctrl+H) for the levels you keep. Double-click to select, then Properties → set the line to 1 pixel. A thick line on the screen is a wide zone in your head, and that is the setting that quietly moves your hold rate from 50% to 83%.
  • Daily pivots need no indicator at all: PP = (yesterday’s high + low + close) / 3, R1 = 2·PP − low, S1 = 2·PP − high. They scored 59.2% held across 7,324 touches, statistically level with everything else.
  • Save a template (right-click → Template → Save Template) once you have Fractals, ZigZag and your EMA 200 on the chart, so every new window opens the same way. The full first-time setup is in my MT4 first chart guide.

Do these settings transfer to MT5?

The indicators are identical — Fractals and ZigZag ship with both platforms with the same inputs. What changes is the timeframe menu: MT5 adds M2, M3, M4, M6, M10, M12 and M20, which means seven more windows to over-optimise across. Given that 36 combinations on one timeframe produced zero survivors here, adding timeframes is adding lottery tickets, not information. I measured what those extra timeframes actually give you in my MT4 against MT5 comparison.

The deeper risk is the one I measured directly in my EA optimisation test: 519 in-sample pips became a loss out of sample. A 144-cell grid with 16 survivors clustered in one time window is that same story in miniature, and I would rather show it to you than hide it.

What I would actually do with this

  • Do not buy an S/R indicator for its settings. Four swing windows spanning an 8x range in selectivity produced hold rates inside 1.4 points.
  • Draw thin lines. Zone width is the single biggest lever on how right you feel, and it has no effect on how much you make.
  • Hold shorter. Every hold comparison in the grid favoured 1 hour over 4.
  • Add the EMA 200 before you add anything else. It was worth ±0.45 pips per touch — more than window, width and hold combined.
  • Treat late-session results as suspect by default. All 16 survivors here live in the three hours where the spread I charged them is least realistic.

Frequently asked questions

What is the best setting for a support and resistance indicator on MT4?

On this data, a 20-bar swing window with a 1-pip zone and a 1-hour hold produced the best result — 584 touches, 61.6% held, +1.27 pips before costs. But it only cleared the spread inside a 21:00–24:00 UTC filter, and every one of the other 128 variants that used a different filter failed after costs.

How wide should a support zone be?

Narrower than feels comfortable. Widening the zone from 1 pip to 10 pips raised the apparent hold rate from 49.5% to 82.8% while the average result per touch got worse, from -0.05 to -0.20 pips. A wide zone buys confidence, not profit.

Which MT4 indicator draws support and resistance automatically?

Fractals (built in, Bill Williams group) marks swing highs and lows and confirms two bars late without repainting. ZigZag draws the larger swings but repaints its final leg until the swing completes. Both reproduce the levels tested here without buying anything.

Does ZigZag repaint?

Its confirmed points do not, its last point does. ZigZag cannot know a swing has ended until price moves far enough away, so the newest leg moves. Trade only the completed points — the same rule I applied to every level in this study, which are confirmed N bars after the fact.

How many support and resistance levels should I have on a chart?

Far fewer than an auto-indicator gives you. A 10-bar swing window produced 2,778 levels across a 386-pip range — 72 levels per 10 pips. At that density every turn in price happens at a level by arithmetic alone, as I show in my support and resistance test.

Are pivot points better than drawn levels on MT4?

They are equivalent and they are cheaper to maintain. Daily pivots held 59.2% across 7,324 touches against 56.3% for 10-bar swing levels, and both lost after costs. The full method-by-method comparison is in support and resistance against Fibonacci and pivots.

Should I add a trend filter to a levels strategy?

Yes — it is the highest-value input available. Touches aligned with the 200-bar EMA averaged +0.45 pips against -0.45 for counter-trend touches. It was not enough to make the rule profitable, but nothing else in the grid came close. My moving average settings guide covers picking the period.

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.