OnTimer

La fonction est appelée dans les indicateurs pendant l'évènement Timer généré par le terminal à des intervalles fixes de temps.

void  OnTimer(void);

Valeur de Retour

Aucune valeur de retour

Note

L'évènement Timer est générée périodiquement par le terminal client pour un EA, qui a activé le timer en utilisant la fonction EventSetTimer(). Habituellement, cette fonction est appelée dans la fonction OnInit(). Lorsque l'EA s'arrête de fonctionner, le timer doit être éliminé en utilisant EventKillTimer(), qui est habituellement appelé dans la fonction OnDeinit().

Chaque Expert Advisor et chaque indicateur fonctionne avec son propre timer recevant les évènements uniquement de ce timer. Pendant l'arrêt d'une application mql5, le timer est détruit obligatoirement dans le cas où il a été créé mais n'a pas été désactivé par la fonction EventKillTimer().

Si vous avez besoin de recevoir les évènements du timer plus d'une fois par seconde, utilisez EventSetMillisecondTimer() pour créer un timer haute résolution.

En général, lorsque la période du timer est réduite, le temps de test est augmenté puisque le handler des évènements du timer est appelé plus souvent. Lors du travail en temps réel, les évènements du timer ne sont pas générés plus d'une fois toutes les 10-16 millisecondes en raison des limitations matérielles.

Un seul timer peut être lancé pour chaque programme. Chaque application mql5 et chaque graphique ont leur propre queue d'évènements où tous les nouveaux évènements sont placés. Si la queue contient déjà l'évènement Timer ou que cet évènement est déjà en cours de traitement, alors le nouvel évènement NewTick n'est pas ajouté dans la queue de l'application mql5.

EA exemple avec la fonction OnTimer()

//+------------------------------------------------------------------+
//|                                               OnTimer_Sample.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property description "Exemple d'utilisation du timer pour calculer l'heure du serveur de trading"
#property description "Il est recommandé d'exécuter l'EA à la fin d'une semaine de trading avant le week-end"
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- crée un timer avec une période de 1 seconde
   EventSetTimer(1);
 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Fonction de dé-initialisation de l'Expert                        |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- détruit le timer après la fin du travail
   EventKillTimer();
 
  }
//+------------------------------------------------------------------+
//| Fonction de tick de l'Expert                                     |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
//| Fonction du timer                                                |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- heure du premier appel à OnTimer()
   static datetime start_time=TimeCurrent();
//--- heure du serveur de trades au premier appel à OnTimer() call
   static datetime start_tradeserver_time=0;
//--- heure calculée du serveur de trades
   static datetime calculated_server_time=0;
//--- heure locale du PC
   datetime local_time=TimeLocal();
//--- heure estimée courante du serveur de trades
   datetime trade_server_time=TimeTradeServer();
//--- si l'heure du serveur est inconnue pour n'importe quelle raison, termine en avance
   if(trade_server_time==0)
      return;
//--- si la valeur initiale du serveur de trades n'est pas encore définie
   if(start_tradeserver_time==0)
     {
      start_tradeserver_time=trade_server_time;
      //--- définie une valeur calculée du serveur de trades      
      Print(trade_server_time);
      calculated_server_time=trade_server_time;
     }
   else
     {
      //--- augmente l'heure du premier appel à OnTimer()
      if(start_tradeserver_time!=0)
         calculated_server_time=calculated_server_time+1;;
     }
//--- 
   string com=StringFormat("                  Heure de début : %s\r\n",TimeToString(start_time,TIME_MINUTES|TIME_SECONDS));
   com=com+StringFormat("                  Heure locale : %s\r\n",TimeToString(local_time,TIME_MINUTES|TIME_SECONDS));
   com=com+StringFormat("Heure TimeTradeServer : %s\r\n",TimeToString(trade_server_time,TIME_MINUTES|TIME_SECONDS));
   com=com+StringFormat(" Heure estimée du serveur : %s\r\n",TimeToString(calculated_server_time,TIME_MINUTES|TIME_SECONDS));
//--- affiche les valeurs de tous les compteurs du graphique
   Comment(com);
  }

Voir également

EventSetTimer, EventSetMillisecondTimer, EventKillTimer, GetTickCount, GetMicrosecondCount, Evènements du terminal client