OnTimer

Die Funktion wird von Indikatoren und EAs während des periodisches Ereignis Timer aufgerufen, das vom Terminal in festen Zeitintervallen erzeugt wird.

void  OnTimer(void);

Rückgabewert

Kein Rückgabewert

Hinweis

Das Ereignis Timer wird periodisch vom Client-Terminal für einen EA erzeugt, der den Timer mit der Funktion EventSetTimer() aktiviert hat. Normalerweise wird diese Funktion in der Funktion OnInit() aufgerufen. Wenn der EA aufhört zu arbeiten, sollte der Timer mit EventKillTimer(), der normalerweise in der Funktion OnDeinit() aufgerufen wird, eliminiert werden.

Jeder Expert Advisor und jeder Indikator arbeitet mit einem eigenen Timer, der nur Ereignisse von diesem Timer empfängt. Während des Herunterfahrens der mql5-Anwendung wird der Timer zwangsweise entfernt, falls er erstellt wurde, aber nicht mit der Funktion EventKillTimer() gelöscht wurde.

Wenn Sie Timerereignisse häufiger als einmal pro Sekunde empfangen müssen, verwenden Sie EventSetMillisecondTimer() zum Erstellen eines hochauflösenden Timers.

Im Allgemeinen wird bei einer Verkürzung der Zeitspanne des Timers die Testzeit erhöht, da der Handler von Timer-Ereignissen häufiger aufgerufen wird. Im Echtzeitbetrieb werden Timer-Ereignisse aufgrund von Hardware-Beschränkungen nicht mehr als 1 mal in 10-16 Millisekunden generiert.

Für jedes Programm kann nur ein Timer gestartet werden. Jede mql5-Anwendung und jedes Chart haben ihre eigene Warteschlange von Ereignissen, in der alle neu eingetroffenen Ereignisse eingetragen werden. Wenn die Warteschlange (queue) bereits das Ereignis des Timers enthält oder sich dieses Ereignis in der Verarbeitungsphase befindet, wird das neue Timer-Ereignis nicht zur Warteschlange der mql5-Anwendung hinzugefügt.

Beispiel-EA, der die Funktion OnTimer() verwendet

//+------------------------------------------------------------------+
//|                                               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 "Example of using the timer for calculating the trading server time"
#property description "It is recommended to run the EA at the end of a trading week before the weekend"
//+------------------------------------------------------------------+
//| Expert Initialisierungsfunktion                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Erstellen eines Timers mit der Zeitspanne von 1 Sekunde
   EventSetTimer(1);
 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialisierungsfunktion des Experten                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Löschen des Timers nach dem Ende der Arbeit
   EventKillTimer();
 
  }
//+------------------------------------------------------------------+
//| Tick-Funktion des Experten                                       |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
//| Timer Funktion                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- Zeitpunkt des OnTimer() bei seinem ersten Aufruf
   static datetime start_time=TimeCurrent();
//--- Des Handelsserver Zeitpunkt beim ersten Aufruf von OnTimer()
   static datetime start_tradeserver_time=0;
//--- Berechnete Serverzeit
   static datetime calculated_server_time=0;
//--- Lokalzeit des PV
   datetime local_time=TimeLocal();
//--- aktuelle geschätzte Serverzeit
   datetime trade_server_time=TimeTradeServer();
//--- Falls die Serverzeit warum auch immer unbekannt ist, beenden vor der Zeit
   if(trade_server_time==0)
      return;
//--- Wenn die erste Zeit des Servers noch nicht gespeichert wurde
   if(start_tradeserver_time==0)
     {
      start_tradeserver_time=trade_server_time;
      //--- Setzen und Berechnen der Werte des Handelsservers
      Print(trade_server_time);
      calculated_server_time=trade_server_time;
     }
   else
     {
      //--- Erhöhen der ersten Zeit von OnTimer()
      if(start_tradeserver_time!=0)
         calculated_server_time=calculated_server_time+1;;
     }
//--- 
   string com=StringFormat("                  Start time: %s\r\n",TimeToString(start_time,TIME_MINUTES|TIME_SECONDS));
   com=com+StringFormat("                  Local time: %s\r\n",TimeToString(local_time,TIME_MINUTES|TIME_SECONDS));
   com=com+StringFormat("TimeTradeServer time: %s\r\n",TimeToString(trade_server_time,TIME_MINUTES|TIME_SECONDS));
   com=com+StringFormat(" EstimatedServer time: %s\r\n",TimeToString(calculated_server_time,TIME_MINUTES|TIME_SECONDS));
//--- Die Werte aller Zähler anzeigen
   Comment(com);
  }

Siehe auch

EventSetTimer, EventSetMillisecondTimer, EventKillTimer, GetTickCount, GetMicrosecondCount, Ereignisse des Client-Terminals