OnTimer

La funzione è chiamata nell' EA durante l'evento generato Timer dal terminale a intervalli di tempo fissi.

void  OnTimer(void);

Valore di ritorno

Nessun valore di ritorno

Nota

L'evento Timer viene periodicamente generato dal terminale client per un EA, che attiva il timer utilizzando la funzione EventSetTimer(). Di solito, questa funzione è chiamata nella funzione OnInit(). Quando l'EA smette di funzionare, il timer dovrebbe essere eliminato usando EventKillTimer(), che di solito è chiamato nella funzione OnDeinit().

Ogni Expert Advisor e ciascun indicatore funzionano con il proprio timer che riceve eventi esclusivamente da questo timer. Durante l'arresto dell'applicazione mql5, il timer viene eliminato forzatamente nel caso in cui sia stato creato ma non sia stato disattivato dalla funzione EventKillTimer().

Se è necessario ricevere eventi timer più frequentemente di una volta al secondo, utilizzare EventSetMillisecondTimer() per creare un timer ad alta risoluzione.

In generale, quando il periodo del timer viene ridotto, il tempo di test viene aumentato, in quanto il gestore di eventi timer viene chiamato più spesso. Quando si lavora in modalità tempo reale, gli eventi timer vengono generati non più di 1 volta in 10-16 millisecondi a causa di limitazioni hardware.

È possibile avviare un solo timer per ciascun programma. Ogni applicazione e chart mql5 ha una propria coda di eventi in cui vengono posizionati tutti gli eventi appena arrivati. Se la coda contiene già l'evento Timer o questo evento è in fase di elaborazione, allora il nuovo evento Timer non viene aggiunto alla coda dell'applicazione mql5.

Esempio EA con il gestore 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 "Esempio di utilizzo del timer per il calcolo dell'orario del server di trading"
#property description "Si consiglia di eseguire l'EA alla fine di una settimana di trading prima del weekend"
//+------------------------------------------------------------------+
//| Funzione di inizializzazione Expert                              |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- crea un timer con un periodo di 1 secondo
   EventSetTimer(1);
 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Funzione di deinitializzazione dell' Expert                      |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- distrugge il timer dopo aver completato il lavoro
   EventKillTimer();
 
  }
//+------------------------------------------------------------------+
//| Funzione tick Expert                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
//| Funzione del timer                                               |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- orario della prima chiamata di OnTimer()
   static datetime start_time=TimeCurrent();
//--- orario del trade server durante la prima chiamata OnTimer()
   static datetime start_tradeserver_time=0;
//--- orario del trade server calcolato
   static datetime calculated_server_time=0;
//--- ora locale PC
   datetime local_time=TimeLocal();
//--- orario stimato del trade server 
   datetime trade_server_time=TimeTradeServer();
// --- se l'orario del server è sconosciuto per qualche motivo, uscire primatempo
   if(trade_server_time==0)
      return;
//--- se il valore del trade server iniziale non è ancora impostato
   if(start_tradeserver_time==0)
     {
      start_tradeserver_time=trade_server_time;
      //--- imposta un valore calcolato del trade server      
      Print(trade_server_time);
      calculated_server_time=trade_server_time;
     }
   else
     {
      // --- aumenta il tempo della prima chiamata di 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));
//--- visualizza i valori di tutti i contatori sul chart
   Comment(com);
  }

Guarda anche

EventSetTimer, EventSetMillisecondTimer, EventKillTimer, GetTickCount, GetMicrosecondCount, Eventi del terminale client