OnInit

La funzione è chiamata in indicatori ed EA quando si verifica l'evento Init. Viene utilizzato per inizializzare un programma MQL5 in esecuzione. Ci sono due tipi di funzione.

La versione che restituisce il risultato

int  OnInit(void);

Valore di ritorno

int (tipo di valore), zero significa inizializzazione riuscita.

Quando restituisce INIT_FAILED, l'EA viene forzatamente scaricato dal grafico.

Quando restituisce INIT_FAILED, l'indicatore non viene scaricato dal grafico. L'indicatore rimanendo sul grafico non è operativo — i gestori degli eventi non sono chiamati nell'indicatore.

La chiamata OnInit() che restituisce il risultato dell'esecuzione è consigliata per l'uso poiché non solo consente l'inizializzazione del programma, ma restituisce anche un codice di errore in caso di una chiusura anticipata del programma.

La versione senza un risultato restituito è lasciata solo per compatibilità con i vecchi codici. Non è raccomandata per l'uso

void  OnInit(void);

Nota

L'evento Init viene generato immediatamente dopo aver caricato un EA o un indicatore. L'evento non è generato per gli script. La funzione OnInit() viene utilizzata per inizializzare un programma MQL5. Se OnInit() ha un valore di ritorno di tipo int, il codice di ritorno diverso da zero indica l'inizializzazione fallita e genera l'evento Deinit con il codice del motivo di deinizializzazione REASON_INITFAILED.

La funzione OnInit() di tipo void significa sempre inizializzazione riuscita e non è raccomandato per l'uso.

Per ottimizzazione degli input dell' EA, si consiglia di utilizzare valori dall'enumerazione ENUM_INIT_RETCODE come codice di ritorno. Questi valori sono intesi a stabilire la gestione del processo di ottimizzazione, compresa la selezione dei più adatti agenti di testing. È possibile richiedere i dati sulla configurazione e sulle risorse degli agenti (numero di core, quantità di memoria libera, ecc.) utilizzando la funzione TerminalInfoInteger() durante l'inizializzazione di EA prima dell'avvio del test. Sulla base dei dati ottenuti, è possibile consentire l'uso dell'agente di testing o vietarlo dall'ottimizzazione di EA.

ID

Descrizione

INIT_SUCCEEDED

Inizializzazione riuscita, il test EA può essere continuato.

Questo codice indica lo stesso valore zero: l'inizializzazione EA nel tester ha esito positivo.

INIT_FAILED

Inizializzazione fallita. Non ha senso continuare il test, a causa di errori inevitabili. Ad esempio, è impossibile creare un indicatore necessario per l'operazione EA.

Il ritorno di questo valore equivale a restituire il valore diverso da zero - l'inizializzazione di EA nel tester non è riuscita.

INIT_PARAMETERS_INCORRECT

Designato per denotare un insieme errato di parametri di input da parte di un programmatore. Nella tabella di ottimizzazione generale, la stringa dei risultati con questo codice di ritorno è evidenziata in rosso.

Non viene eseguito un test per un tale insieme di ingressi EA. L'agente è pronto per ricevere una nuova attività.

Quando questo valore viene ricevuto, il tester della strategia non trasferisce questa attività ad altri agenti per l'esecuzione ripetuta.

INIT_AGENT_NOT_SUITABLE

Nessun errore di esecuzione del programma durante l'inizializzazione. Tuttavia, per alcuni motivi, l'agente non è adatto a condurre un test. Ad esempio, non c'è abbastanza RAM, nessun Supporto OpenCL, eccetera.

Dopo aver restituito questo codice, l'agente non riceve più attività fino alla fine di questa ottimizzazione.

Utilizzando OnInit() restituendo INIT_FAILED/INIT_PARAMETERS_INCORRECT nel tester ha alcune peculiarità che dovrebbero essere considerate quando si ottimizzano gli EA:

  • l'insieme di parametri OnInit() restituito INIT_PARAMETERS_INCORRECT per è considerato inadatto per il test e non viene utilizzato per ottenere la successiva popolazione durante l'ottimizzazione genetica. Troppi set di parametri "scartati" possono portare a risultati errati durante la ricerca di parametri EA ottimali. L'algoritmo di ricerca presuppone che la funzione criterio di ottimizzazione sia regolare e non abbia spazi vuoti sull'intera moltitudine di parametri di input.
  • se OnInit() restituisce INIT_FAILED, ciò significa che non è possibile avviare un test e che l'EA viene de-caricato dalla memoria dell'agente. L'EA viene nuovamente caricato per eseguire il passaggio successivo con una nuova serie di parametri. L'avvio del prossimo passaggio di ottimizzazione richiede molto più tempo rispetto a chiamare TesterStop().

Esempio di funzione OnInit() per un EA

//--- parametri di input
input int      ma_period=20; // periodo media mobile
 
//--- handle dell'indicatore utilizzato nell'EA
int indicator_handle;   
//+------------------------------------------------------------------+
//| Funzione di inizializzazione Expert                              |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- controlla la validità di ma_period
   if(ma_period<=0)
     {
      PrintFormat("Valore input ma_period non valido: %d",ma_period);
      return (INIT_PARAMETERS_INCORRECT);
     }
//--- durante l'ottimizzazione
   if(MQLInfoInteger(MQL_OPTIMIZATION))
     {
      //--- controlla la RAM disponibile per l'agente
      int available_memory_mb=TerminalInfoInteger(TERMINAL_MEMORY_TOTAL);
      if(available_memory_mb<2000)
        {
         PrintFormat("Memoria insufficiente per l'agente test: %d MB",
                     available_memory_mb);
         return (INIT_AGENT_NOT_SUITABLE);
        }
     }
//--- controlla l'indicatore
   indicator_handle=iCustom(_Symbol,_Period,"My_Indicator",ma_period);
   if(indicator_handle==INVALID_HANDLE)
     {
      PrintFormat("Fallimento nel generare l'handle My_Indicator . Codice errore %d",
                  GetLastError());
      return (INIT_FAILED);
     }
//--- Inizializzazione EA completata
   return(INIT_SUCCEEDED);
  }

Guarda anche

OnDeinit, Funzioni di gestione degli eventi(event handling), Esecuzione Programma, Eventi del terminale client, Inizializzazione di variabili, Creazione ed eliminazione di oggetti