//+------------------------------------------------------------------+
//| Fonction de démarrage du script |
//+------------------------------------------------------------------+
void OnStart()
{
//--- La date est un dimanche
datetime time=D'2002.04.25 12:00';
string symbol="GBPUSD";
ENUM_TIMEFRAMES tf=PERIOD_H1;
bool exact=false;
//--- S'il n'y a pas de barre à l'heure spécifiée, iBarShift retournera l'indice de la barre la plus proche
int bar_index=iBarShift(symbol,tf,time,exact);
//--- Vérification du code d'erreur après l'appel à iBarShift()
int error=GetLastError();
if(error!=0)
{
PrintFormat("iBarShift(): GetLastError=%d - La date demandée %s "+
"pour %s %s n'est pas trouvée dans l'historique disponible",
error,TimeToString(time),symbol,EnumToString(tf));
return;
}
//--- La fonction iBarShift() a été exécutée avec succès, retourne un résultat pour exact=false
PrintFormat("1. %s %s %s(%s): l'indice de la barre est %d (exact=%s)",
symbol,EnumToString(tf),TimeToString(time),
DayOfWeek(time),bar_index,string(exact));
datetime bar_time=iTime(symbol,tf,bar_index);
PrintFormat("L'heure de la barre #%d est %s (%s)",
bar_index,TimeToString(bar_time),DayOfWeek(bar_time));
//--- Demande l'indice de la barre à la date spécifiée : s'il n'y a pas de barre, -1 est retourné
exact=true;
bar_index=iBarShift(symbol,tf,time,exact);
//--- La fonction iBarShift() a été exécutée avec succès, retourne un résultat pour exact=true
PrintFormat("2. %s %s %s (%s):l'indice de la barre est %d (exact=%s)",
symbol,EnumToString(tf),TimeToString(time)
,DayOfWeek(time),bar_index,string(exact));
}
//+------------------------------------------------------------------+
//| Retourne le nom du jour de la semaine |
//+------------------------------------------------------------------+
string DayOfWeek(const datetime time)
{
MqlDateTime dt;
string day="";
TimeToStruct(time,dt);
switch(dt.day_of_week)
{
case 0: day=EnumToString(DIMANCHE);
break;
case 1: day=EnumToString(LUNDI);
break;
case 2: day=EnumToString(MARDI);
break;
case 3: day=EnumToString(MERCREDI);
break;
case 4: day=EnumToString(JEUDI);
break;
case 5: day=EnumToString(VENDREDI);
break;
default:day=EnumToString(SAMEDI);
break;
}
//---
return day;
}
//+------------------------------------------------------------------+
/* Résultat de l'exécution
1. GBPUSD PERIOD_H1 2018.06.10 12:00(SUNDAY): l'indice de la barre est 64 (exact=false)
L'heure de la barre #64 est 2018.06.08 23:00 (FRIDAY)
2. GBPUSD PERIOD_H1 2018.06.10 12:00 (SUNDAY): l'indice de la barre est -1 (exact=true)
*/
|