Gestione degli Eventi

Il linguaggio MQL5 fornisce la gestione di determinati eventi predefiniti. Le funzioni per la gestione di questi eventi (event handling) dovrebbero essere definite in un programma MQL5: nome funzione, tipo di ritorno, un insieme di parametri (se presenti), ed i loro tipi dovrebbero corrispondere strettamente alla descrizione di una funzione di gestione eventi.

Il gestore eventi del terminale client utilizza i tipi di ritorno e parametro per identificare le funzioni che elaborano un evento. Se una determinata funzione ha alcuni parametri o un tipo di ritorno non corrispondente alle descrizioni sottostanti, tale funzione non può essere utilizzata per gestire un evento.

Funzione

Descrizione

OnStart

La funzione è chiamata quando si verifica l'evento Start per eseguire azioni impostate nello script

OnInit

La funzione è chiamata negli indicatori ed EA quando si verifica l'evento Init per inizializzare un programma MQL5 avviato

OnDeinit

La funzione è chiamata negli indicatori ed EA quando si verifica l'evento Deinit per de-inizializzare un programma MQL5 avviato

OnTick

La funzione è chiamata nell' EA quando si verifica l'evento NewTick per gestire una nuova quotazione

OnCalculate

La funzione è chiamata negli indicatori quando si verifica l'evento Calculate per gestire i cambiamenti dei dati di prezzo

OnTimer

La funzione è chiamata negli indicatori ed EA durante l'evento periodico Timer generato dal terminale a intervalli di tempo fissi

OnTrade

La funzione è chiamata nell' EA durante l'evento generato Trade al termine di un'operazione di trading su un trade server

OnTradeTransaction

La funzione è chiamata nell' EA quando si verifica l'evento TradeTransaction per elaborare un risultato di esecuzione di una richiesta di trade

OnBookEvent

La funzione è chiamata nell'EA quando si verifica l'evento BookEvent per elaborare i cambiamenti nel market depth

OnChartEvent

La funzione è chiamata in indicatori ed EA quando si verifica l'evento ChartEvent per elaborare le modifiche del grafico-chart effettuate da un utente o un programma MQL5

OnTester

La funzione è chiamata nell'EA quando si verifica l'evento Tester per eseguire le azioni necessarie dopo aver testato un EA sui dati della cronistoria

OnTesterInit

La funzione è chiamata nell' EA quando si verifica l'evento TesterInit per eseguire le azioni necessarie prima dell'ottimizzazione nel tester di strategia

OnTesterDeinit

La funzione è chiamata nell'EA quando si verifica l'evento TesterDeinit dopo l'ottimizzazione EA nel tester di strategia

OnTesterPass

La funzione è chiamata nell' EA quando si verifica l'evento TesterPass per gestire l'arrivo di un nuovo frame di dati, durante l'ottimizzazione EA nel tester di strategia

Il terminale client invia eventi in entrata ai corrispondenti grafici-chart aperti. Inoltre, gli eventi possono essere generati da grafici-charts (eventi del chart) o programmi mql5 (eventi personalizzati). La generazione di eventi di creazione/eliminazione di oggetti grafici può essere abilitata/disabilitata impostando le proprietà del chart CHART_EVENT_OBJECT_CREATE e CHART_EVENT_OBJECT_DELETE. Ogni applicazione e grafico-chart mql5 ha una propria coda di eventi in cui vengono posizionati tutti gli eventi appena arrivati.

Un programma ottiene eventi solo dal grafico-chart su cui è in esecuzione. Tutti gli eventi vengono gestiti uno dopo l'altro nell'ordine di ricezione. Se la coda contiene già l'evento NewTick o questo evento è in fase di elaborazione, allora il nuovo evento NewTick non viene aggiunto alla coda dell'applicazione mql5. Allo stesso modo, se ChartEvent è già in una coda di programma mql5 o viene gestito un evento di questo tipo, allora un nuovo evento di questo tipo non viene inserito in coda. La gestione degli eventi del timer viene elaborata allo stesso modo - se l'evento Timer è già in coda o viene gestito, nessun nuovo evento timer viene impostato in coda.

Le code degli eventi hanno una grandezza limitata ma sufficiente, quindi l'overflow della coda è improbabile per un programma sviluppato correttamente. Quando la coda si sovraffolla, i nuovi eventi vengono eliminati senza essere inseriti in coda.

Si raccomanda vivamente di non utilizzare loop infiniti per gestire gli eventi. Eventuali eccezioni sono gli script che gestiscono un singolo evento Start.

Le Librerie non gestiscono alcun evento.