OnDeinit

La funzione è chiamata in indicatori ed EA quando si verifica l'evento Deinit. È usato per deinitializzare un programma MQL5 in esecuzione.

void  OnDeinit(
   const int  reason         // codice della ragione di deinizializzazione
   );

Parametri

reason

[in] Codice del motivo di deinitializzazione.

Valore di ritorno

Nessun valore di ritorno

Nota

L'evento Deinit è generato per EA e indicatori nei seguenti casi:

  • prima di una nuova re-inizializzazione a causa del cambiamento di un simbolo o di un periodo del chart a cui è collegato il programma mql5;
  • prima di una nuova inizializzazione a causa del cambiamento degli input;
  • prima di decaricare un programma mql5.

Il parametro reason può avere i seguenti valori:

Costante

Valore

Descrizione

REASON_PROGRAM

0

L'EA ha smesso di funzionare chiamando la funzione ExpertRemove()

REASON_REMOVE

1

Programma rimosso da un chart

REASON_RECOMPILE

2

Programma ricompilato

REASON_CHARTCHANGE

3

Un simbolo o periodo chart sono cambiati

REASON_CHARTCLOSE

4

Chart chiuso

REASON_PARAMETERS

5

Input modificati da un utente

REASON_ACCOUNT

6

È stato attivato un altro account o si è verificata la riconnessione al trade server a causa di modifiche alle impostazioni dell'account

REASON_TEMPLATE

7

È stato applicato un altro modello di chart

REASON_INITFAILED

8

Il gestore OnInit() ha restituito un valore diverso da zero

REASON_CLOSE

9

Terminale chiuso

EA: i codici motivo di deinizializzazione possono essere ricevuti dalla funzione UninitializeReason() o dalla variabile predefinita _UninitReason.

Esempio di funzioni OnInit() e OnDeinit() per EA

input int fake_parameter=3;      // parametro inutile
//+------------------------------------------------------------------+
//| Funzione di inizializzazione Expert                              |
//+------------------------------------------------------------------+
int OnInit()
  {
// --- Ottieni il numero della build in cui è compilato il programma
   Print(__FUNCTION__," Build #",__MQLBUILD__);
//--- il reset del codice motivazione (reason code) può anche essere ottenuto in OnInit()
   Print(__FUNCTION__," Il codice motivo di deinitializzazione può essere ricevuto durante il reset di EA");
//--- Il primo modo per ottenere un codice motivo di deinitializzazione
   Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- Il secondo modo per ottenere un codice motivo di deinitializzazione  
   Print(__FUNCTION__," UninitializeReason() = ",getUninitReasonText(UninitializeReason()));
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Funzione di deinitializzazione dell' Expert                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Il primo modo per ottenere un codice motivo di deinitializzazione
   Print(__FUNCTION__," Codice di motivazione di Deinizializzazione = ",reason);
//--- Il secondo modo per ottenere un codice motivo di deinitializzazione
   Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- Il terzo modo per ottenere un codice motivo di deinitializzazione  
   Print(__FUNCTION__," UninitializeReason() = ",getUninitReasonText(UninitializeReason()));
  }
//+------------------------------------------------------------------+
//| Restituisce una descrizione testuale del codice del motivo di deinitializzazione 
//+------------------------------------------------------------------+
string getUninitReasonText(int reasonCode)
  {
   string text="";
//---
   switch(reasonCode)
     {
      case REASON_ACCOUNT:
         text="L'account è cambiato";break;
      case REASON_CHARTCHANGE:
         text="Il simbolo o timeframe sono cambiati";break;
      case REASON_CHARTCLOSE:
         text="Il chart Chart è stato chiuso";break;
      case REASON_PARAMETERS:
         text="I parametri di Input sono stati cambiati";break;
      case REASON_RECOMPILE:
         text="il programma "+__FILE__+" è stato ricompilato";break;
      case REASON_REMOVE:
         text="il programma "+__FILE__+" è stato rimosso dal chart";break;
      case REASON_TEMPLATE:
         text="Il nuovo template è stato applicato al chart";break;
      default:text="Altra motivazione";
     }
//---
   return text;
  }

Guarda anche

OnInit, Funzioni di Event handling(gestione degli eventi), Esecuzione programma, Eventi del terminale client, Codici di motivazione di non inizializzazione, Scopo della visibilità e durata delle variabili, Creazione ed eliminazione di oggetti