FXTAA Русская версия

Day bar info: indicator of the daily range for MT4 and MT5

By lunchtime a pair has often already travelled its usual distance for the day. Knowing that before you enter is the difference between catching a move and catching the end of one.

Updated: 2026-09-23

The daily range — today's high minus today's low — is a blunt number that answers a sharp question: how much is left? Compared against what the pair normally does, it tells you whether a breakout has room or is running on fumes.

Reading the daily bar from any timeframe

You do not have to switch charts. The iHigh, iLow and iOpen functions take a timeframe argument, so a five-minute chart can read the day bar directly.

double dHigh = iHigh(Symbol(), PERIOD_D1, 0);   // 0 = today, still forming
double dLow  = iLow (Symbol(), PERIOD_D1, 0);
double dOpen = iOpen(Symbol(), PERIOD_D1, 0);

double rangePts = (dHigh - dLow) / Point;

Index 0 is the day still in progress, so these values change as you watch. That is correct here — you want the live range. For the average you must use closed days, index 1 and higher, or today's unfinished bar drags the average down.

The average, and why ADR beats ATR here

Average True Range on D1 includes gap adjustment. For "how far does this pair usually travel within a day", the plain high-minus-low average — often called ADR — answers more directly.

double AverageDailyRange(int days)
{
   double sum = 0;
   for(int i = 1; i <= days; i++)                 // start at 1: closed days only
      sum += (iHigh(Symbol(), PERIOD_D1, i) - iLow(Symbol(), PERIOD_D1, i)) / Point;
   return(sum / days);
}

Twenty days is the usual window — roughly a trading month, long enough to smooth single events without averaging away a genuine regime change.

The number that matters: remaining range

Range used, expressed as a percentage of the average, is the output worth putting on the chart.

double adr    = AverageDailyRange(20);
double used   = (iHigh(Symbol(), PERIOD_D1, 0) - iLow(Symbol(), PERIOD_D1, 0)) / Point;
double pctUsed = (adr > 0) ? used / adr * 100.0 : 0;

string label = StringFormat("O %s | range %.0f pts | %.0f%% of ADR",
                 DoubleToString(iOpen(Symbol(), PERIOD_D1, 0), Digits),
                 used, pctUsed);

Where it misleads

Range exhaustion is not a reversal signal. Trending days routinely run to 160% of ADR and keep going; that is what a trend is. The statistic tells you the day is unusual, not which way it resolves.

It is also asymmetric with time. Eighty percent of ADR used by the London open means something very different from eighty percent used by the New York close — in the first case the day has barely started.

The daily range is a fuel gauge, not a steering wheel. It tells you how far you can go, never which direction.

Practical uses

  1. Targets. Projecting the remaining ADR from the current price gives a realistic profit target instead of a hopeful one.
  2. Stop distance. A stop tighter than a tenth of ADR will be taken by noise, whatever the chart pattern says.
  3. Session filter. If the Asian session already used 70% of ADR, the London breakout you were waiting for has far less room than usual.