Il Tester di Strategia di MetaTrader 5 consente di ottenere parametri statistici di un sistema di trading dopo ogni passaggio di test.
I parametri statistici possono essere ottenuti utilizzando la funzione TesterStatistics(), che viene chiamata all'interno delle funzioni OnTester() e OnDeinit().
Con l'introduzione delle funzioni per lavorare con i risultati di ottimizzazione (FrameFirst(), FrameFilter(), FrameNext(), FrameInputs() e FrameAdd()), i trader possono ora effettuare un'ottimizzazione visiva. I dati necessari possono essere elaborati e visualizzati direttamente durante l'ottimizzazione di un Expert Advisor o nella risoluzione di problemi matematici.
Esamineremo i dettagli di un esempio di visualizzazione dei risultati di test di un Expert Advisor durante l'ottimizzazione descritto nell'articolo "Visualizza una Strategia nel Tester di MetaTrader 5".
1. Visualizzazione della dinamica del bilancio durante l'ottimizzazione
1.1. Download dei File
L'Expert Advisor Moving Averages_With_Frames.mq5 deve essere copiato nella cartella terminal_data_folder\MQL5\Experts.
I seguenti file sono utilizzati per il funzionamento dell'Expert Advisor:
- FrameGenerator.mqh - classe CFrameGenerator per visualizzare i risultati dell'ottimizzazione;
- SpecialChart.mqh - classe CSpecialChart per disegnare diversi grafici di bilancio;
- SimpleTable.mqh - classe CSimpleTable è una semplice tabella con due colonne;
- ColorProgressBar.mqh - classe CColorProgressBar è una barra di avanzamento che utilizza due colori.
Questi devono essere copiati nella cartella terminal_data_folder\MQL5\Include.
I programmi della Code Base possono essere scaricati automaticamente tramite il terminale di MetaTrader 5 (scheda CodeBase nella finestra "Toolbox"). Per farlo, selezionare "Scarica". Tutti i codici verranno scaricati e collocati nelle loro cartelle.

Fig. 1. Downloading CodeBase programs via MetaTrader 5 terminal
1.2. Testare l'Expert Advisor
L'Expert Advisor Moving Averages_With_Frames.mq5 deve essere avviato nel Tester di Strategia.
Impostazioni di test:

Fig. 2. Impostazioni di test per Moving Averages_With_Frames.mq5
Opzioni di ottimizzazione:

Fig. 3. Parametri di ottimizzazione per Moving Averages_With_Frames.mq5
Durante l'ottimizzazione, l'Expert Advisor visualizza la dinamica del bilancio e i dati statistici sui passaggi di ottimizzazione:

Fig. 4. Moving Averages_With_Frames.mq5 ottimizzazione
Processo di ottimizzazione:
1.3. Il Principio di Funzionamento dell'Expert Advisor
L'Expert Advisor Moving Averages_With_Frames.mq5 è stato creato sulla base di Moving Averages.mq5, incluso nel pacchetto standard del terminale MetaTrader 5 (MQL5\Experts\Examples\Moving Average).
Il seguente codice è stato aggiunto per la visualizzazione dei risultati:
//--- collegamento del codice per lavorare con i risultati di ottimizzazione #include <FrameGenerator.mqh> //--- generatore di frame CFrameGenerator fg; //+------------------------------------------------------------------+ //| Funzione Tester | //+------------------------------------------------------------------+ double OnTester() { //--- inserire la funzione di calcolo del criterio di ottimizzazione qui double TesterCritetia=MathAbs(TesterStatistics(STAT_SHARPE_RATIO)*TesterStatistics(STAT_PROFIT)); TesterCritetia=TesterStatistics(STAT_PROFIT)>0?TesterCritetia:(-TesterCritetia); //--- invocazione dopo ogni test e invio del criterio di ottimizzazione come parametro fg.OnTester(TesterCritetia); //--- return(TesterCritetia); } //+------------------------------------------------------------------+ //| Funzione TesterInit | //+------------------------------------------------------------------+ void OnTesterInit() { //--- preparazione del grafico per visualizzare diverse linee di bilancio fg.OnTesterInit(3); // il parametro imposta il numero di linee di bilancio sul grafico } //+------------------------------------------------------------------+ //| Funzione TesterPass | //+------------------------------------------------------------------+ void OnTesterPass() { //--- gestione dei risultati del test ottenuti e visualizzazione grafica fg.OnTesterPass(); } //+------------------------------------------------------------------+ //| Funzione TesterDeinit | //+------------------------------------------------------------------+ void OnTesterDeinit() { //--- fine dell'ottimizzazione fg.OnTesterDeinit(); } //+------------------------------------------------------------------+ //| Gestione eventi del grafico | //+------------------------------------------------------------------+ void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { //--- avvia la visualizzazione dei frame dopo la fine dell'ottimizzazione quando si fa clic sull'intestazione fg.OnChartEvent(id,lparam,dparam,sparam,100); // 100 è una pausa in ms tra gli scatti } //+------------------------------------------------------------------+
Questo codice può essere utilizzato in modo simile in qualsiasi Expert Advisor.
La classe CFrameGenerator è utilizzata per lavorare con i risultati di ottimizzazione. La classe contiene metodi per gestire gli eventi del Tester di Strategia (OnTester(), OnTesterInit(), OnTesterPass(), OnTesterDeinit()) e il metodo per gli eventi del grafico (OnChartEvent()). I grafici utilizzati vengono preparati nel metodo OnTesterInit() della classe CFrameGenerator.
Il metodo OnTester() della classe CFrameGenerator viene invocato su un agente di test dopo ogni passaggio di test. Questo metodo fornisce il calcolo della dinamica della curva di bilancio basata sui risultati di trading. Il grafico della curva di bilancio è un array unidimensionale, la cui lunghezza dipende dal numero di operazioni effettuate.
Successivamente, la funzione TesterStatistics() viene utilizzata per richiedere dati statistici (profitto netto, fattore di profitto, fattore di recupero, numero di operazioni, numero di affari, percentuale massima di drawdown e valore del criterio di ottimizzazione personalizzato) e un frame (array dei dati del passaggio di test, nel nostro caso) viene generato, che viene inviato al terminale (dall'agente di test) utilizzando la funzione FrameAdd().
I frame vengono ricevuti e gestiti nel metodo OnTesterPass() della classe CFrameGenerator. L'operazione di lettura dei frame viene eseguita dalla funzione FrameNext(). La richiesta per i parametri di input dell'Expert Advisor, per il quale è stato generato il frame, viene eseguita utilizzando la funzione FrameInputs().
Dopo aver ottenuto i dati, questi vengono visualizzati e aggiornati utilizzando i metodi delle classi CSimpleTable, CColorProgressBar e CSpecialChart.
È importante notare che l'esecuzione delle funzioni di gestione di OnTester() avviene sull'agente di test dopo che un altro passaggio di ottimizzazione attuale è stato completato. Questo consente di utilizzare le capacità della Rete Cloud MQL5 per eseguire calcoli matematici complessi. Per fare ciò, posiziona la parte di calcolo nel gestore dell'evento OnTester.
Un esempio di utilizzo dell'ottimizzazione per accelerare i calcoli matematici (trasformazione wavelet continua della funzione di Weierstrass) è mostrato nell'argomento "Gestire i processi di ottimizzazione in tempo reale e trasferire grandi quantità di dati dagli agenti a MetaTrader 5".
2. Esempi di Lavoro con le Classi CSimpleTable, CColorProgressBar e CSpecialChart
Gli script Test_SimpleTable.mq5 e Test_CSpecialChart.mq5 allegati contengono esempi di lavoro con le classi CSimpleTable, CColorProgressBar e CSpecialChart. Devono essere copiati nella cartella terminal_data_folder\MQL5\Scripts.

Fig. 5. Risultato dell'operazione dello script Test_SimpleTable.mq5

Fig. 6. Risultato dell'operazione dello script Test_CSpecialChart.mq5
Post correlati
- Rilevare il Venerdì della Prima Settimana del Mese: La Guida per il Giorno NFP
- EA Efficiente: Come Aggiungere la Chiusura del Venerdì per Migliorare le Performance
- Utilità Market Watch Panel: il tuo alleato in MetaTrader 4
- X-liquidex: Il Miglior EA per Trading di Volatilità e Breakout su MetaTrader 4
- Expert Advisor Basato sulla Teoria della Probabilità per Forex su MetaTrader 5