
Comprendere e Utilizzare Efficacemente il Tester di Strategie MQL5
Introduzione
In qualità di programmatori o sviluppatori di MQL5, dobbiamo comprendere e utilizzare bene il tester di strategia per ottenere risultati efficaci. Utilizzando questo prezioso strumento possiamo ottenere informazioni preziose in termini di prestazioni dei nostri programmi MQL5 creati e ciò influirà sull'ottenimento di risultati di trading migliori. Per questo motivo, prima di eseguire i nostri test, dobbiamo comprendere bene alcuni argomenti importanti, come la gestione di tutti i tipi di errore, poiché è normale che gli sviluppatori commettano degli sbagli che si traducono in errori. Un altro argomento che dobbiamo comprendere bene è il debug, che ci permette di eseguire i programmi creati in maniera interattiva. Poi, arriviamo allo strumento più importante e prezioso che è il tester di strategie per provare e valutare i nostri programmi creati con caratteristiche più interessanti della MetaTrader 4. Questo articolo, quindi, sarà un incredibile viaggio di apprendimento per comprendere gli aspetti più importanti dell'utilizzo del Tester di Strategie MQL5, che tratteremo attraverso i seguenti argomenti:
Cercheremo di trattare i punti più comuni di questi argomenti precedenti per capire bene cosa dobbiamo affrontare come programmatori o sviluppatori. Ciò che devo dire è che quando si affronta questo argomento, è normale che tutti i lettori conoscano già il linguaggio di programmazione MQL5 e sappiano come codificare i loro programmi, poiché si tratta di un argomento che è necessario comprendere per ottenere il massimo beneficio dalla lettura di questo articolo. Se avete bisogno di imparare prima il linguaggio, potete reperire la documentazione di MQL5. Inoltre, potete leggere gli altri miei articoli sull'apprendimento delle basi della programmazione mql5 e su come creare sistemi di trading basati sugli indicatori tecnici più diffusi e spero che li troviate utili.
Errori
In questo argomento, impareremo a conoscere gli errori che possiamo trovare durante la creazione, l'esecuzione e il funzionamento dei programmi MQL5. Ciò che rende questo argomento molto importante da comprendere è che MQL5 segnalerà questi errori correttamente, ma se non sappiamo cosa significano o in quale fase del nostro programma avvengono, impiegheremo molto più tempo per gestirli o risolverli rispetto a quando sappiamo già il loro significato.
Presenteremo questo argomento in base alla fase del nostro lavoro sul programma MQL5, mentre scriviamo il nostro codice ci sono errori e avvertimenti che possono essere affrontati: errori di compilazione e avvertimenti. Si possono verificare anche errori durante l'esecuzione del programma MQL5, che sono gli errori di runtime, e si possono verificare anche altri tipi di errori quando il nostro programma MQL5 cerca di operare, che sono gli errori del server di trade. Pertanto, tratteremo i seguenti tipi di errori:
- Errori di Compilazione e Avvertimenti
- Errori di Runtime
- Errori del Server di Trade
Prima di trattare questi errori è importante conoscere il luogo dove gli errori compaiono. Nell'IDE MQL5, c'è una finestra del pannello degli strumenti nella parte più bassa, la trovate di default o potete visualizzarla con uno dei seguenti metodi:
1- Fare clic su Visualizza ==> Scegliere Strumenti
2- Premendo Ctrl+T dalla tastiera
3- Facendo clic sul pulsante Strumenti dal pannello degli strumenti principale
Dopo di che, possiamo trovarlo come nell’immagine che segue
Errori di Compilazione e Avvertimenti:
Quando scriviamo il nostro codice per un programma specifico, possiamo commettere degli errori, ed è normale, ad esempio scrivere una sintassi sbagliata o avere degli errori di battitura che portano a degli errori durante la compilazione del codice. In questa parte, condivideremo gli errori più diffusi e comunemente affrontati. La cosa più importante da sapere è che il programma non può essere compilato finché gli errori non vengono eliminati o risolti. Vi presenterò gli errori più comuni che possiamo incontrare:
Errore previsto per il punto e virgola:
Questo errore si verifica quando si dimentica di scrivere un punto e virgola alla fine della riga, oppure se saltiamo un punto e virgola o ancora se si dimentica una parentesi sinistra. Per evitare questo tipo di errore è necessario utilizzare correttamente questi tipi di simboli. Il codice seguente è un esempio di questo errore.
Codice errato con errore:
int a=(2+1)
L'errore sarà il seguente:
Codice corretto senza errori:
Dopo aver corretto il codice aggiungendo il punto e virgola alla fine della riga di codice, possiamo trovare il codice corretto come il seguente:
int a=(2+1);
Dopo aver compilato il codice, si scopre che l'errore è stato eliminato e che il codice viene compilato senza errori, come nel caso seguente:
Errore di token inatteso:
Questo è un altro tipo di codice errato che si presenta comunemente e il motivo è la dimenticanza di una parentesi destra nell'ultima riga di codice o l'aggiunta di una parentesi sinistra in più nella riga di codice attuale. Possiamo vedere un esempio di questo tipo di errore come segue:
Codice errato con errore:
int a=(2+1;
L'errore è visibile nella scheda Errori del pannello degli strumenti, come di seguito riportato:
Codice corretto senza errori:
int a=(2+1);
Possiamo vedere la scheda Errori con gli eventuali errori dopo aver corretto il codice aggiungendo la parentesi destra come di seguito:
Errore di identificativo non dichiarato:
Questo tipo di errore si verifica quando si utilizza una variabile senza averla prima dichiarata, poiché è necessario dichiarare qualsiasi nuova variabile prima di utilizzarla o assegnarle un valore. La si dichiara scegliendo il tipo di dato giusto e adatto da restituire a questa variabile, ad esempio un numero intero o una stringa. Di seguito è riportato un esempio di questo tipo di errore, che consiste nell'utilizzare una nuova variabile senza dichiararla.
Codice errato con errore:
a=5;
Nel codice precedente, abbiamo utilizzato la variabile (a) assegnandole 5 senza dichiararla. Quindi, troveremo l'errore di identificativo non dichiarato quando compiliamo questo codice come il seguente:
Come si può notare, l'accuratezza della descrizione dell'errore può essere molto utile, in quanto non solo riporta l'errore, ma specifica anche la variabile "a" che è la causa dell'errore.
Codice corretto senza errori:
int a=5;
Dopo la compilazione di questo codice corretto, non troveremo alcun errore nella stessa immagine che abbiamo menzionato prima nella scheda Errori del pannello strumenti.
Errore di sbilanciamento della parentesi sinistra:
Questo tipo di errore si verifica quando manca la parentesi destra o se ne usa una destra in più. Possiamo trovare questo errore attraverso il seguente esempio.
Codice errato con errore:
bool a=7; if (a=5 a=5;
Nel codice precedente, dimenticando la parentesi destra, si riscontra l'errore di "parentesi sinistra sbilanciata" oltre all'errore di "operatore atteso", come nella figura seguente
Codice corretto senza errori:
bool a=7; if (a=5) a=5;Dopo aver corretto il codice, scopriremo che è stato compilato senza errori.
Errore imprevisto di fine programma:
A volte manca una parentesi di chiusura nel nostro codice e si verifica un errore inatteso di fine programma. Per risolvere questo errore, dobbiamo controllare il nostro codice per vedere cosa è necessario aggiungere o assicurarci che ogni parentesi di apertura ne abbia una di chiusura. Di seguito è riportato un esempio di questo codice.
Codice errato con errore:
void OnStart() { bool a=7; if (a=5) a=5;
Scrivendo il codice allo stesso modo del blocco precedente, dimenticando la parentesi di chiusura dopo l'ultima riga (a=5), si può riscontrare l'errore di "fine inattesa del programma", oltre a un altro errore di "parentesi sbilanciate" uguale a quello della seguente immagine
Codice corretto senza errori:
void OnStart() { bool a=7; if (a=5) a=5; }
Dopo aver corretto il codice aggiungendo la parentesi di chiusura, il codice viene compilato senza errori.
Le espressioni non sono consentite su un errore di livello globale:
Questo errore si verifica quando manca una parentesi sinistra in un operatore composto o quando si scrive un'istruzione o un'espressione al di fuori dell'ambito di una funzione specifica, dato che si devono usare solo espressioni all'interno dell'ambito della funzione. L'esempio seguente riguarda questo tipo di errore.
Codice errato con errore:
int a=(7+5); if (a<7) a=7; }
Nel codice precedente, abbiamo saltato l'apertura (}) che cambiava l'ambito e si è verificato l'errore "Le espressioni non sono consentite in un ambito globale". Di seguito viene riportato l'errore dalla scheda Errori.
Codice corretto senza errori:
int a=(7+5); if (a<7) { a=7; }
Dopo aver corretto il codice allo stesso modo del blocco di codice precedente, scopriremo che il codice è stato compilato senza errori.
Errore, conteggio errato dei parametri:
Questo tipo di errore si verifica quando si utilizza una funzione specifica con parametri specifici e non si specificano correttamente questi parametri, specificandone troppi o non abbastanza. Questo errore viene visualizzato se si utilizza la funzione predefinita o le funzioni create. Di seguito è riportato un esempio di questo errore.
Codice con errore:
Se abbiamo creato una funzione "myVal" che restituisce un valore intero del risultato della somma di due valori interi, significa che abbiamo due parametri in questa funzione? Quindi, quando chiamiamo questa funzione utilizzando parametri diversi da questi due, otterremo questo tipo di errore, come nel caso del seguente codice
void OnStart() { int example=myVal(10); } //+------------------------------------------------------------------+ int myVal(int a, int b) { return a+b; }
Compilando il codice sbagliato precedente si ottiene un errore simile al seguente:
Codice senza errori:
Per scrivere correttamente questo codice è necessario utilizzare i parametri specifici di questa funzione creata come segue
void OnStart() { int example=myVal(10,20); } //+------------------------------------------------------------------+ int myVal(int a, int b) { return a+b; }
Dopo aver compilato questo codice corretto, non troveremo alcun errore.
Errore, atteso qualche operatore:
Questo tipo di errore si verifica quando manca un operatore in una posizione specifica, mancandolo completamente o posizionandolo in modo errato. Di seguito viene riportato un esempio di questo tipo di errore.
Codice con errore:
int a= 7 10;
Nel codice precedente manca un operatore tra i due numeri e questo è il motivo per cui si otterrà un errore di "atteso qualche operatore", come nell'immagine seguente:
Codice senza errori:
int a= 7+10;
Dopo aver corretto il codice aggiungendo il (+), il codice verrà compilato senza errori.
Gli errori citati sono i più diffusi in questo tipo di errori di compilazione, ma abbiamo detto che ci sono anche gli avvertimenti di compilazione e dobbiamo imparare cosa sono, sono mostrati a scopo informativo e non sono errori. Di seguito è riportato un esempio di codice che ci permette di ottenere un avvertimento nella scheda Errori
int a;
Compilando il codice precedente otterremo un avviso di variabile 'a' non utilizzata, poiché abbiamo dichiarato una nuova variabile 'a' ma non l'abbiamo utilizzata né le abbiamo assegnato un valore. Di seguito è riportato l'avviso sotto forma di immagine
Per ulteriori informazioni su MQL5, è possibile consultare il seguente link alla documentazione:
Alcuni suggerimenti che possono essere molto utili e di aiuto per gestire questi errori quando si verificano:
- Correggeteli a partire dall'inizio degli errori, perché potrebbe risolvere tutti gli errori in base al motivo dell'errore.
- Facendo doppio clic sulla riga dell'errore nella scheda Errori del Pannello Strumenti si accede alla riga di codice che presenta il problema.
Ora abbiamo imparato a conoscere gli errori che si possono verificare nella prima fase di scrittura del codice del programma MQL5. Passiamo alla seconda fase: gli errori che si verificano durante l'esecuzione del programma, ovvero gli errori di Runtime.
Errori di Runtime:
Come abbiamo detto prima, gli errori di Runtime sono tipi di errori che si verificano durante l'esecuzione di un programma MQL5. Questi errori non impediranno al codice di essere compilato senza errori, ma non sarà eseguito o funzionante come ci aspettiamo. Possiamo trovare questi errori nel log come messaggi stampati con il motivo dell'errore e anche la riga che presenta l'errore nel codice sorgente.
Esempi di questi errori:
Codice errore | Motivo errore |
---|---|
4007 | Memoria insufficiente per il trasferimento di un array o un tentativo di modificare la dimensione di un array statico |
4101 | ID del Grafico errato |
4301 | Simbolo sconosciuto come informazione di mercato |
4754 | Ordine non trovato |
5120 | Errore interno al database |
Se avete notato avremo un codice di errore, poiché MQL5 ha definito tutti gli errori di runtime con dei codici per essere facilmente identificabili e potete trovare questi codici utilizzando la funzione GetLastError() per aggiungere un metodo di gestione degli errori al vostro programma, possiamo vedere questi errori nella scheda Journal durante i test o nella scheda Expert mentre si allega il programma al grafico da eseguire nel tempo corrente e potete vedere tutti gli Errori di Runtime con tutti i codici nella documentazione di MQL5 attraverso il seguente link:
https://www.mql5.com/it/docs/constants/errorswarnings/errorcodes
È necessario ricordare che il programma non terminerà l'esecuzione dopo l'errore di runtime, ad eccezione di alcuni errori critici che termineranno l'esecuzione, come ad esempio l'errore di un array fuori intervallo.
Errori del Server di Trade:
Questi tipi di errori si verificano nella fase di esecuzione di un trade come struttura di una richiesta di trade MqlTradeRequest utilizzando la funzione OrderSend(); possiamo vedere anche questi errori segnalati nella scheda Journal durante il test o nella scheda expert mentre alleghiamo il programma al grafico da eseguire in tempo reale. Se avete bisogno di vedere degli esempi di questi errori, i seguenti sono a questo scopo:
Codice errore | Motivo errore |
---|---|
10006 | Richiesta rigettata |
10032 | Il funzionamento è consentito solo per i conti live |
10033 | Il numero di ordini pendenti ha raggiunto il limite |
10034 | Il volume degli ordini e delle posizioni per il simbolo ha raggiunto il limite |
10041 | La richiesta di attivazione dell'ordine pendente è stata respinta, l'ordine viene annullato. |
Tutti i codici di questo tipo di errore sono disponibili nella documentazione di MQL5 al seguente link:
https://www.mql5.com/it/docs/constants/errorswarnings/enum_trade_return_codes
Il Debug
In questo argomento, impareremo come il Debug può essere utilizzato attraverso lo strumento debugger di MQL5, per eseguire il nostro programma creato, attraverso i dati storici o dal vivo e possiamo farlo facendo clic sul pulsante di avvio/ripresa del debug sui dati reali o storici, come nell’immagine seguente tramite i pulsanti del debugger dal pannello degli strumenti
1- Avviare/Riprendere il debug sui dati storici
2- Avviare/Riprendere il debug su dati reali
3- Sospendere il debug
4- Interrompere il debug
Una volta premuto il pulsante di avvio per eseguire il debug sui dati storici, il programma verrà eseguito sui dati storici aprendo un grafico, se si sceglie il debug sui dati reali, il programma verrà allegato al grafico sui dati reali e accanto al programma si troverà la dicitura (Debug).
Il Tester di Strategie
In questa parte o argomento, impariamo a conoscere lo strumento più importante e prezioso di MetaTrader 5, ovvero lo Strategy Tester, con nuove funzionalità, migliori rispetto al tester di MetaTrader 4, come ad esempio il test multivaluta e altri. Per ottenere questo Strategy Tester è possibile utilizzare uno dei seguenti metodi:
1- All'apertura del terminale di trading MetaTrader 5, premere Ctrl+R dalla tastiera.
2- Dal menu Visualizza ==> scegliere Strategy Tester.
Dopo di che, troveremo il Tester di Strategia uguale al seguente della scheda Panoramica per scegliere ciò di cui si ha bisogno o il tipo di test
Semplicemente, attraverso la scheda Panoramica, sceglieremo ciò che dobbiamo testare e una volta fatto, la scheda passerà alla scheda Impostazioni con impostazioni predefinite in base a ciò che si è scelto di testare.
- Singolo: per testare gli Expert advisor con segnali senza modalità di visualizzazione.
- Indicatore: per testare un indicatore.
- Visualizza: per i test con modalità di visualizzazione sul grafico per vedere come il programma reagirà ai dati in base alle sue istruzioni.
- Stress & Delays: per testare lo stress e i ritardi, come si evince dal nome.
- Opzioni di ottimizzazione (Completa, Genetica, Avanti).
- Scanner di mercato: per testare la scansione del mercato.
- Calcoli matematici: per verificare anche i calcoli matematici.
È inoltre possibile vedere i risultati dei test precedenti attraverso l'ultima opzione Visualizza risultati precedenti. È anche possibile cercare un test specifico precedente attraverso la ricerca sotto le opzioni del test.
Se ci spostiamo nella scheda delle impostazioni, la scheda sarà uguale alla seguente:
- 1- Expert: scegliere il file del programma che dobbiamo testare.
- 2- IDE: per aprire il codice sorgente del programma selezionato.
- 3- per salvare o caricare impostazioni specifiche.
- 4- Simbolo: scegliere il simbolo o i simboli da testare.
- 5- scegliere il timeframe del simbolo selezionato da testare.
- 6- per le specifiche del simbolo selezionato.
- 7- Data: scegliere il periodo da testare.
- 8- scegliere il periodo di inizio del test.
- 9- Scegliere il periodo finale del test.
- 10- Forward: è la selezione della frazione necessaria del periodo di ottimizzazione che sarà messo da parte per il test in avanti.
- 11- selezionare tra quelli proposti o la data di inizio del test in avanti.
- 12- Ritardi, regolare per ottenere dati vicini a quelli reali.
- 13- per cercare di avvicinarsi ai dati reali e alle esecuzioni reali.
- 13/2- Modellazione: Per selezionare il modello da testare, è necessario utilizzare ogni tick o qualcos'altro?
- 14- spuntare se avete bisogno di profitti in pip.
- 15- scegliere l'importo del deposito di cui abbiamo bisogno per iniziare il test.
- 16- scegliere la valuta del deposito.
- 17- scegliere la leva.
- 18- per scegliere se vogliamo un'ottimizzazione o meno, ne parleremo più avanti.
- 19- spuntare se abbiamo bisogno di visualizzare i trade o le esecuzioni durante il test.
Abbiamo anche la scheda Input per verificare se il programma testato dispone di input che possono essere inseriti o modificati dall'utente.
Dopo aver determinato le nostre impostazioni e aver premuto il pulsante Inizio, il programma verrà testato e potremo monitorare il test attraverso il grafico che comparirà se effettuiamo il test visuale e le schede in questo grafico, come Trade per vedere le operazioni eseguite se il nostro programma lo fa, Storico per monitorare gli ordini chiusi o cancellati, Operazioni per vedere tutte le operazioni e Registro per controllare i messaggi stampati del programma e altro. Possiamo anche monitorarlo attraverso la scheda Grafico della finestra del Tester di Strategia per controllare le prestazioni del programma.
Al termine del test si può controllare anche la scheda Backtest che apparirà con tutte le statistiche e gli approfondimenti del test, come nell'esempio seguente.
In base al programma da testare, i dati della scheda Backtest appariranno simili o diversi da quelli visti nell'esempio precedente.
C'è un'altra cosa da menzionare, perché è molto importante nel processo di test, ovvero l'Ottimizzazione, che comprende la selezione di un'ampia gamma di parametri e input diversi e la verifica di ogni possibile combinazione di questi input o parametri per controllare e testare quali parametri genereranno i risultati migliori. Sceglieremo uno dei modelli di Ottimizzazione dalla scheda Panoramica e selezioneremo l'impostazione adatta di Ottimizzazione, come nelle immagini seguenti.
Gli elementi più importanti da controllare e valutare dopo il test:
- Utile Netto: Si calcola sottraendo la perdita lorda dal profitto lordo.
- Draw Down: è la perdita massima che il conto subisce durante le operazioni.
- Fattore di Profitto È il rapporto tra profitto lordo e perdita lorda.
- Guadagno Atteso: è il profitto o la perdita media di un'operazione.
- Fattore di Recupero: misura la capacità di recupero della strategia testata dopo aver subito perdite.
Conclusioni
Abbiamo appreso alcuni argomenti essenziali su uno degli strumenti più importanti e preziosi che tutti noi dobbiamo padroneggiare quando sviluppiamo un programma MQL5, ovvero il processo di test attraverso il Tester di Strategia del terminale di trading MetaTrader 5 e abbiamo appreso alcuni argomenti correlati che ci aiuteranno a comprendere e utilizzare questo strumento in modo efficace. Abbiamo imparato a conoscere gli errori che si verificano durante lo sviluppo di programmi MQL5 in base ai tipi di errori, che sono:
- Errori di Compilazione e Avvisi.
- Errori di Runtime.
- Errori del Server di Trade.
Poi abbiamo imparato a conoscere il Debug attraverso l'apprendimento dell'uso del debugger dell'IDE MQL5 e abbiamo imparato a utilizzare il Tester di Strategia di MetaTrader 5 attraverso l'apprendimento dei suoi diversi modelli, possiamo impostare le impostazioni del test in base al modello, possiamo monitorare il processo di test attraverso una scheda differente che riporta tutto quando si testa qualsiasi programma MQL5 e dopo il test come possiamo leggere il rapporto del test e identificare gli elementi più importanti che dobbiamo controllare e valutare e come possiamo ottimizzare la nostra strategia attraverso il test per ottenere il miglior risultato dal programma MQL5 in prova.
Spero che questo articolo e le sue informazioni vi siano utili per aiutare a migliorare i vostri risultati attraverso test efficaci e la creazione di programmi MQL5. Se l'articolo vi è stato utile e avete necessità di leggerne altri, potete consultare gli altri miei articoli, come la condivisione di come creare sistemi di trading basati sugli indicatori tecnici più popolari.
Tradotto dall’inglese da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/en/articles/12635





- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso