Download MetaTrader 5
To add comments, please log in or register
Do you need a programmer? Make an order to let the developer find you!
Carlo Colombo
Carlo Colombo 2014.07.01 07:20 

Hello, I've found a wrong response from IBarShift.

On the MQL4 user manual iBarShift reports :

"Returned value
Bar shift with the open time specified. If the bar having the specified open time is missing, the function will return -1 or the nearest bar shift depending on the exact. "

It writes the "nearest" bar.

Now the example.

I want to calculate offset D1 bars using H1 bars.
The only way to add 2 Hours offset to a Daily timeframe is to add 2 hours to D1 open times and get H1 bars in order to know OHLC of new offset/virtual bar.

// it's Monday 7 July 2003 at 02:00
datetime ThisBarTime = iTime( Symbol(),  PERIOD_D1, 1 ); 
Print ("ThisBarTime A " + TimeToString(ThisBarTime));

The Print returns the Sunday bar open time, this because Sunday data are present and start from 21:00
>>> 2003.07.07 02:00  ThisBarTime A 2003.07.06 00:00

ThisBarTime += 7200; // add two hours offset
Print ("ThisBarTime B " + TimeToString(ThisBarTime));

New date is at 02:00 of Sunday
>>> 2003.07.07 02:00  ThisBarTime B 2003.07.06 02:00

Using iBarShift I want to get the NEAREST bar to 02:00 of Sunday, the nearest bar is the bar at 21:00 of Sunday
int SubTFStartBar = iBarShift( Symbol(), PERIOD_H1, ThisBarTime);
Print ("SubTFStartBar " + IntegerToString(SubTFStartBar) + " barTime " + TimeToString(iTime(Symbol(),PERIOD_H1,SubTFStartBar)));

This is the wrong result, the nearest bar is not the bar of Friday at 20:00, but the near bar on Sunday 21:00
>>> 2003.07.07 02:00  SubTFStartBar 6 barTime 2003.07.04 20:00

Another call to know the H1 end bar after 24 hours
int SubTFEndBar   = iBarShift( Symbol(), PERIOD_H1, ThisBarTime + (PERIOD_D1 * 60) - (PERIOD_H1 * 60) );
Print ("SubTFEndBar " + IntegerToString(SubTFEndBar) + " barTime " + TimeToString(iTime(Symbol(),PERIOD_H1,SubTFEndBar)));

Correct response, for the end of the period.
>>> 2003.07.07 02:00  SubTFEndBar 1 barTime 2003.07.07 01:00 

I know that I can substitute the iBarShift with a "while" cycle that search correctly what I want, but I don't understand why iBarShift don't return the correct bar number.

whroeder1 2014.07.01 12:05  
positiveday: or the nearest bar shift depending on the exact.
Translation problem, reported 2013.05.23 iBarShift doesn't match documentation. - MQL4 forum
Carlo Colombo
Carlo Colombo 2014.07.02 10:42  

Many thanks, I had searched but not found that thread.
From my point of view it's not a translation problem but only a bug of the function.

To add comments, please log in or register