Daily Range Indicator: Today’s Open With a Projected Band

Written by Dominic Walsh · Published · Last updated

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
Daily range indicator on EURUSD H1 with the daily open and projected band edges
Daily range indicator on EURUSD H1 with the daily open and projected band edges

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
Daily range indicator inputs showing RangeFactor and PriorRangeDays
Daily range indicator inputs showing RangeFactor and PriorRangeDays

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.

  • 1,380+ indicators
  • MT4 and MT5 files
  • No spam, unsubscribe any time

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

Dominic Walsh - Forex trader and MT4/MT5 developer

About the author

Written by Dominic Walsh, a Forex trader and MT4/MT5 indicator, Expert Advisor and script developer. Every tool on forexmt4systems.com is tested on live charts before release and ships with ready-to-use compiled MT4 (.ex4) and MT5 (.ex5) files. Learn more about the trader and developer behind this site.

How we build, test and correct every tool: Editorial & Testing Policy. Trading carries risk; see the disclaimer.

Leave a Comment