-
Please edit your (original) post and use the CODE button (Alt-S)! (For large amounts of code, attach it.)
General rules and best pratices of the Forum. - General - MQL5 programming forum (2019)
Messages Editor -
int iGMT=(int)NormalizeDouble(((double)TimeCurrent()-(double)TimeGMT())/3600,0)
You are truncating instead of rounding.
-
int iStart=iBarShift(NULL,60,iTime(NULL,1440,0),false)+(iGMT<0?MathAbs(iGMT):(iGMT>0?-iGMT:iGMT));
On MT4: Unless the current chart is that specific symbol(s)/TF(s) referenced, you must handle 4066/4073 errors before accessing candle/indicator values.
Download history in MQL4 EA - Forex Calendar - MQL4 programming forum - Page 3 #26.4 (2019) -
datetime dtTmp=Time[iStart]; int iStartYear=TimeYear(dtTmp); int iStartMonth=TimeMonth(dtTmp); int iStartDay=TimeDay(dtTmp); int iStartHour=TimeHour(dtTmp)+Hour_start; int iStartMinute=TimeMinute(dtTmp)+Minute_start; int iStartSecond=TimeSeconds(dtTmp)+Second_start; datetime dtStart= (datetime)((string)iStartYear+"."+ (string)iStartMonth+"."+ (string)iStartDay+" "+ (string)iStartHour+":"+ (string)iStartMinute+":"+ (string)iStartSecond);
You have a datetime (dtTmp). No need for all that, just add Hour_start*3600 + Minute_start*60 + Second_start.
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
The following example is using iBarShift for parsing datetimes 🙂
input int Hour_shift=-5; //Hour shift
input int Hour_start=1; //Start hr; 0-23
input int Minute_start=0; //Start min; 0-59
input int Second_start=0; //Start sec; 0-59
input int Hour_end=9; //Stop hr; 0-23
input int Minute_end=59; //Stop min ; 0-59
input int Second_end=59; //Stop sec; 0-59
int OnInit()
int iStart=iBarShift(NULL,60,iTime(NULL,1440,0),false)+(iGMT<0?MathAbs(iGMT):(iGMT>0?-iGMT:iGMT));{
int iGMT=(int)NormalizeDouble(((double)TimeCurrent()-(double)TimeGMT())/3600,0)+Hour_shift;
Print("GMT Hour Shift: "+ (string)iGMT);
datetime dtTmp=Time[iStart];
int iStartYear=TimeYear(dtTmp);
int iStartMonth=TimeMonth(dtTmp);
int iStartDay=TimeDay(dtTmp);
int iStartHour=TimeHour(dtTmp)+Hour_start;
int iStartMinute=TimeMinute(dtTmp)+Minute_start;
int iStartSecond=TimeSeconds(dtTmp)+Second_start;
datetime dtStart=
(datetime)((string)iStartYear+"."+
(string)iStartMonth+"."+
(string)iStartDay+" "+
(string)iStartHour+":"+
(string)iStartMinute+":"+
(string)iStartSecond);
Print("Day Start: "+ (string)dtStart);
int iEndYear=TimeYear(dtTmp);
int iEndMonth=TimeMonth(dtTmp);
int iEndDay=TimeDay(dtTmp);
int iEndHour=TimeHour(dtTmp)+(Hour_end-Hour_start) ;
int iEndMinute=TimeMinute(dtTmp)+Minute_end;
int iEndSecond=TimeSeconds(dtTmp)+Second_end;
datetime dtEnd=
(datetime)((string)iEndYear+"."+
(string)iEndMonth+"."+
(string)iEndDay+" "+
(string)iEndHour+":"+
(string)iEndMinute+":"+
(string)iEndSecond);
Print("Day End: "+ (string)dtEnd);
return(INIT_SUCCEEDED);
}
The GMT shift is +3, so the offset between +3 and -5 is -2 hours ~ which must be applied to both sides
2021.09.20 03:20:46.189 EA5 USDJPY,H1: Day End: 2021.09.20 07:59:59
2021.09.20 03:20:46.189 EA5 USDJPY,H1: Day Start: 2021.09.17 22:00:00
2021.09.20 03:20:46.188 EA5 USDJPY,H1: GMT Hour Shift: -2
How else?