Most days cover a distance similar to the day before. The daily range indicator turns that into a working level set: it takes today’s daily open, measures the prior day’s range, and projects a band above and below at a fraction of it. When price reaches an edge and closes back inside, the bar gets an arrow.
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 | 5: Daily Open, Projected Upper, Projected Lower, BUY band touch, SELL band touch |
| Alerts | popup, push notification, email, sound |
| Inputs | 8 |
What the Daily Range Indicator draws on the chart
Daily Open is the silver line at today’s opening price on the daily candle.
Projected Upper is the dodger blue band edge above it.
Projected Lower is the tomato edge below.
BUY band touch marks a bar that dipped to the lower edge and closed back above it, with SELL band touch as the mirror at the upper edge.
- Daily Open: line, silver, width 2
- Projected Upper: line, dodger blue, width 2
- Projected Lower: line, tomato, width 2
- BUY band touch: arrow, lime, width 2, arrow code 233
- SELL band touch: arrow, red, width 2, arrow code 234

How the Daily Range Indicator calculates its values
Reading the daily candle from any chart
This is the multi-timeframe part. day_shift takes iBarShift on PERIOD_D1 for the current bar’s time, then daily_open reads iOpen on that daily bar. Working through the daily series means the level stays identical whether you view it on M15 or H4, rather than drifting with the chart you happen to have open.
Sizing the band from the prior range
half_band takes `RangeFactor` times prior_range, where prior_range averages the last `PriorRangeDays` complete days. UpperBuf then holds daily_open plus half_band and LowerBuf holds daily_open minus it. A factor of 0.50 places each edge half a typical day’s range from the open, so the full band spans roughly one prior day.
Requiring a rejection, not a touch
buy_touch needs low[i] to reach at or below LowerBuf[i] while close[i] finishes above it. sell_touch inverts that at the upper edge. Price has to reach the level and come back within the same bar. A candle that closes outside the band produces nothing, because that is expansion rather than rejection.
How to read the signals
The silver line resets each day, so a fresh session starts with price sitting on it.
Price spending the day above the open reads differently from a day spent below it.
An arrow marks a rejection at an edge. A close outside the band marks the opposite case and stays unmarked.
A day that expands well past both edges is telling you the prior range was a poor guide for this one.
Alert channels in this build: popup, push notification, email and sound, one message per closed bar.
Four channels ship beneath `EnableAlerts`: popup, push notification, email and sound, with `SoundFile` pointing at the clip. Popup starts enabled. Since the rejection test reads a completed close, the message follows a bar that has finished inside the band.
Every Daily Range Indicator input
Core settings
| Setting | What it does | Default |
|---|---|---|
RangeFactor |
Projected band = open +/- factor * priorRange. Share of the prior range placed either side of the open, default `0.50`. Raise it toward 1.0 for wider, rarely reached edges. | 0.50 |
PriorRangeDays |
How many prior days to average for the projected range (>=1). How many completed days feed the range average, default `1`. Increase it to smooth out one unusually quiet or wild session. | 1 |
Alert settings
| Setting | What it does | Default |
|---|---|---|
EnableAlerts |
(see inputs panel) | on |
EnablePopup |
(see inputs panel) | on |
EnablePushNotify |
(see inputs panel) | off |
EnableEmail |
(see inputs panel) | off |
EnableSound |
(see inputs panel) | off |
SoundFile |
(see inputs panel) | alert.wav |

Settings that fit your chart
The levels come from the daily candle, so intraday charts suit this best. The screenshot note calls for EURUSD H1, where the daily open and both edges stay visible across the session. On M5 the same levels apply and simply take longer to reach. On the daily chart itself the tool has little to add, since each bar is the range it is measuring.
When the Daily Range Indicator fails
Yesterday predicts today only loosely. A quiet session followed by a news day gives a band price clears in the first hour.
The daily open depends on your broker’s server clock, so two brokers in different timezones produce different lines on the same instrument.
Rejection arrows fire at a level regardless of context, and a band edge reached during the Asian session means something different from one reached at the New York open.
Copy the compiled Daily Range 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.
Related on forexmt4systems.com: Range Trading Strategy.
Background reading on the method behind the Daily Range Indicator: Narrow Range Day Nr7 at StockCharts ChartSchool, True Range on Wikipedia.
Download the Daily Range Indicator for MT4 and MT5
The zip holds the compiled Daily Range 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 RangeFactor at 0.50 place on the chart?
Each band edge sits half the prior day’s range from the daily open, so the full band spans about one typical day. Traders who want edges that are rarely reached raise it toward 1.0. Those who want more interaction lower it toward 0.25, at the cost of many more arrows.
Why does PriorRangeDays default to 1?
Because yesterday is usually the most relevant guide to today. One day keeps the band responsive to a change in conditions. Raising it to 3 or 5 averages out a single unusual session, which suits instruments that alternate between quiet and violent days.
Does the daily open change if I switch timeframe?
No, and that is the point of reading the daily series directly. day_shift and iOpen fetch the value from PERIOD_D1 regardless of the chart you are on, so the silver line sits at the same price on M15 and H4. It does depend on your broker’s server clock.
Why does a close outside the band produce no arrow?
Because the tool is looking for rejection, not expansion. buy_touch needs low[i] to reach the lower edge AND close[i] to finish above it. A bar that closes beyond the band has broken through rather than bounced, which is a different event this build does not mark.
Are results guaranteed?
No. Trading involves risk. Results are not guaranteed; past performance is not indicative of future results. Use the Daily Range Indicator as one input. Always backtest before trading live.
Category: this is part of our Sessions collection. Next, plainly, yet, browse more Sessions for MetaTrader, or explore every MT4 indicator and MT5 indicator on the site.
External references
- The core method is documented in Narrow Range Day Nr7 at StockCharts ChartSchool.
- Additional market context is at True Range on Wikipedia.
