Market structure is a chain of swing highs and lows. This swing point highs and lows indicator dots each swing that stands out by at least half a range, rays the latest high and low across the chart, and marks the bar that closes through one of them. An optional volume check can confirm the break.
This build ships as a compiled .ex4 for MT4 and .ex5 for MT5; the screenshots below come from EURUSD H1.
| Platforms | MT4 (.ex4) + MT5 (.ex5) |
|---|---|
| Chart window | Main price chart |
| Plots | 4: Swing High, Swing Low, Buy, Sell |
| Alerts | popup, push notification, email, sound |
| Inputs | 13 |
What the build shows
Dots, two rays and two marks on price.
`Swing High` dots orange red with code 159.
`Swing Low` dots dodger blue with code 159.
`Buy` marks a broken high, lime and two pixels wide.
`Sell` marks a broken low in red.
Dotted rays mark the latest swing levels.
- Swing High: arrow, orange red, width 1, arrow code 159
- Swing Low: arrow, dodger blue, width 1, arrow code 159
- Buy: arrow, lime, width 2, arrow code 233
- Sell: arrow, red, width 2, arrow code 234

What the formula does
The swing
`SwingLen` `3` bars on each side confirm a turn. `MinSwingAtr` `0.5` then asks it to stand half a 14-bar range above its neighbours.
The break
A buy needs a close above the latest swing high after a close at or below it. Sells mirror that at the latest low.
The volume check
`UseVolumeFilter` ships `false`. Switched on, the break bar needs tick volume above its `VolLookback` `20` bar average.
Making it useful
Dots show every prominent swing.
Rays show the two levels in play now.
A lime mark means the last high gave way.
A red mark means the last low gave way.
`DrawLevels` `true` keeps the rays visible.
Each swing needs three closed bars to confirm.
Alert channels in this build: popup, push notification, email and sound, one message per closed bar.
Breaks report as BUY or SELL with a short reason. `EnableAlerts` gates them, the popup is the only route that starts on, and the others wait in the inputs.
Every Swing Point Highs And Lows Indicator input
Core settings
| Setting | What it does | Default |
|---|---|---|
SwingLen |
Fractal bars each side of a swing pivot. Bars on each side of a swing, `3`. | 3 |
AtrPeriod |
ATR period (swing prominence + arrow offset). Range window, `14`. | 14 |
MinSwingAtr |
Min swing prominence in ATR (0 = show all). Smallest swing kept, in ranges, `0.5`. | 0.5 |
UseVolumeFilter |
Require above-average volume on breakout. Demand above-average volume, `false`. | off |
VolLookback |
Bars for volume average. Bars for the volume average, `20`. | 20 |
Display settings
| Setting | What it does | Default |
|---|---|---|
ArrowOffsetAtr |
Arrow/marker offset in ATR. How far marks sit from the bar, in ranges, `0.6`. | 0.6 |
DrawLevels |
Draw S/R rays at last swing high/low. Ray the latest high and low, `true`. | on |
Alert settings
| Setting | What it does | Default |
|---|---|---|
EnableAlerts |
Switch for break messages, `true`. | on |
EnablePopup |
Popup, `true`. | on |
EnablePushNotify |
(see inputs panel) | off |
EnableEmail |
(see inputs panel) | off |
EnableSound |
Speaker, `false`. | off |
SoundFile |
(see inputs panel) | alert.wav |

Settings that fit your chart
Structure breaks happen on every liquid chart. EURUSD H1 is the reference chart, with a few breaks a day. On M5 the prominence check keeps dots sparse. On D1 each break is a change in the larger structure.
When it will mislead you
A close through a swing is often a false break.
Tick volume is a proxy, not real traded volume.
Volume confirmation is off out of the box.
Messages start as popups and nothing else.
Copy the compiled Swing Point Highs And Lows Indicator file into your MQL4/Indicators folder, and the MT5 build into MQL5/Indicators, then restart the terminal and drag it onto a chart. The step-by-step guide with screenshots is at how to install MT4 and MT5 indicators.
Download the Swing Point Highs And Lows Indicator for MT4 and MT5
The zip holds the compiled Swing Point Highs And Lows Indicator build for MT4 and MT5, plus a short README. Compiled files only, no source. Enter your email below and the download link arrives in your inbox.
Download this indicator free
Enter your email and the file is yours. You also get the full MT4 and MT5 library.
FAQ
What does MinSwingAtr 0.5 filter out?
Small wiggles. A turn must stand at least half of the 14-bar average range away from its neighbours to earn a dot, so minor pauses inside a move are ignored.
Should UseVolumeFilter stay off on forex pairs?
Usually, yes. Forex tick volume is only a proxy for activity, and the check would silence many valid breaks. Try it on index or metal charts where volume tracks participation more closely.
Which level does a Buy mark break?
The most recent confirmed swing high, the one the upper ray marks. The close must move above it after the previous close sat at or below it.
What does DrawLevels add to the chart?
Two dotted rays at the latest swing high and low. They show at a glance which levels a close would need to break for the next mark.
Are results guaranteed?
No. Trading involves risk. Results are not guaranteed; past performance is not indicative of future results. Use the Swing Point Highs And Lows Indicator as one input. Always backtest before trading live.
Category: this is part of our Signal and Forecast collection. Browse more Signal and Forecast for MetaTrader, or explore every MT4 indicator and MT5 indicator on the site.
External references
- Learn more about the underlying method in Cable (foreign exchange) on Wikipedia.
- For wider market background, see Deathcross at Investopedia.
