English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
Tecnica di test (ottimizzazione) e alcuni criteri per la selezione dei parametri dell'Expert Advisor

Tecnica di test (ottimizzazione) e alcuni criteri per la selezione dei parametri dell'Expert Advisor

MetaTrader 4Tester | 12 gennaio 2022, 12:58
502 0
Rider
Rider


Introduzione

Non è un grande segreto che la selezione di parametri adeguati è importante come la selezione delle tattiche di trading e della creazione di un Expert Advisor. La prova di ciò può essere trovata nelle discussioni in corso sull'argomento su numerosi forum relativi al trading automatico. E mentre l'automazione delle operazioni di trading sembra essere abbastanza chiara e trasparente, non ho trovato alcun algoritmo automatizzato utilizzabile per l'elaborazione dei risultati di ottimizzazione compilati in una catena logicamente completa.

E dobbiamo ammettere che il processo è molto duro e richiede tempo, quindi vale la pena fare uno sforzo per automatizzare al massimo tutte le transazioni e ridurle a un unico algoritmo. Questo approccio e metodo saranno illustrati di seguito in questo articolo.


Concetto

Compito. Analisi e screening dei parametri di Expert Advisor ricevuti durante l'ottimizzazione che sono ritenuti non efficaci per un vero e proprio trading. Massimo utilizzo delle capacità prestazionali del Terminale e automazione delle operazioni manuali.

Questo processo consiste in diverse fasi: Tale suddivisione non ha tanto a che fare con la complessità di implementazione di un algoritmo automatico continuo, quanto con l'impossibilità di definire anticipatamente, in fase di ottimizzazione, i requisiti necessari (tolleranze e filtri) ai parametri del sistema. E in generale, non ce n'è bisogno.

Secondo me, far prendere decisioni strategiche a una macchina non è "l'idea migliore". E la selezione dei parametri (gruppi di parametri) è una strategia. Calcolare, fare trading, semplificarci la vita: queste sono le sue funzioni ma è il trader che decide le regole di funzionamento che l'hardware deve seguire.

Ogni fase e le transizioni tra le fasi sono state automatizzate al massimo, per quanto possibile.


Fase 1. Ottimizzazione Variante standard con impostazioni utente opzionali.

Ancora una volta, questo non è un segreto, ma non può essere tralasciato.
La genetica è senz'altro una cosa utile, ma entro limiti ragionevoli. La verità è che il suo algoritmo può giocare un brutto scherzo con te: quando un insieme di parametri che considera redditizio è stato trovato, l'intero processo di ottimizzazione da lì in poi fino alla fine verrà eseguito "intorno ad esso". Credo che tu capisca a cosa può portare. La maggior parte delle varianti davvero valide che altrimenti funzionerebbero oltre l'area di ottimizzazione verranno escluse e non verranno registrate nella tabella "Risultati di ottimizzazione".

Ci sono alcuni modi per uscire dalla situazione. Uno drastico è non usare l'algoritmo genetico per l'ottimizzazione. Tuttavia, questo non è sempre adatto, per un motivo o per l'altro. Le prossime due sono mezze misure, ma meglio di niente:

- eseguire l'ottimizzazione non solo una volta, ma due o anche più volte. La prima volta, diciamo, per "Saldo" e la volta successiva per "Massimo Drawdown" o altri parametri. La finestra "Parametro ottimizzato" nella scheda "Test" delle proprietà di Expert Advisor prevede tale selezione. Successivamente, combina le tabelle dei risultati ricevute e lavora con una tabella combinata.

- ridurre al massimo il numero di combinazioni di parametri.

C'è ancora un'altra sfumatura da prendere in considerazione quando si implementa l'ottimizzazione. Qualcuno potrebbe trovarlo utile.

È possibile impostare vari limiti nella scheda "Ottimizzazione" delle proprietà dell'Expert Advisor e vorrei dire alcune parole su uno di essi - "Drawing massimo". Quando si utilizza questo parametro, tenere presente che si tratta di un prelievo del saldo corrente in percentuale. Cosa deve essere preso in considerazione qui. Se, ad esempio, impostiamo un limite del 10% e prendiamo un saldo iniziale di 10000, poi durante il processo di ottimizzazione quando il saldo raggiunge almeno 15000, i 1000 iniziali diventeranno 1500 - chiaramente, queste sono cifre diverse. E il deposito iniziale (chi può garantire che tale prelievo non si verifichi all'inizio dell'operazione?) reagirà diversamente a loro. Se si imposta un deposito iniziale di 1000000 e un limite dello 0,1%, questi mille rimarranno circa mille.


Fase 2. Lavorare con i risultati di ottimizzazione Tutti i risultati vengono copiati in Excel e lì elaborati. Ci saranno molti set e dovrebbero essere ridotti. Il "taglio" può essere eseguito su qualsiasi colonna del report - sta al trader.


Fase 3. Test. Selezioniamo una parte della cronologia per il test ed eseguiamo un test di gruppo automatico dei set che hanno "superato" la fase di screening precedente. Segnalo: una prova di gruppo. In questa fase non è necessario considerare ogni singolo test separatamente, il punto è ottenere i risultati del test di tutti i set rimanenti contemporaneamente. Il Terminale implementerà effettivamente la stessa ottimizzazione ma utilizzerà i parametri di un file pre-creato.

Simile alla fase 2, tutti i risultati ricevuti vengono copiati nella stessa tabella Excel contenente i risultati di ottimizzazione.


Fase 4. Analisi e screening.

Ovviamente i test negativi vengono spietatamente scartati (righe cancellate). La domanda è come valutare quelli rimanenti?

Molti di voi avranno notato che la percezione visiva del grafico del saldo dà un'idea uguale e talvolta anche migliore delle caratteristiche del sistema piuttosto che dei dati nel report. Di norma, se la curva sembra "buona", anche i dati nel report sono "buoni", se invece manca un trend in continua crescita, allora nessun dato può essere abbastanza convincente che questo sia "buono".

Il problema è che ci sono parecchie varianti rimaste ed è molto difficile testarle separatamente per analizzare il report e dare un'occhiata al grafico di ognuna di esse... Se uno diventa testardo, però, allora...

Per evitare questo problema e ridurre ulteriormente il numero di serie, ho creato un criterio di "rapporto" applicabile alle aree confrontate. Vengono confrontati tre valori: Profitto al giorno, numero di operazioni al giorno e prelievo massimo, rispettivamente, nelle aree di ottimizzazione e test. Se sono grosso modo, entro un certo limite tollerabile, coerenti tra loro, l'insieme rimane in funzione, se non lo sono - è escluso da ulteriori analisi. Inoltre, in determinate condizioni, più specificamente - se le aree di prova non sono molto lunghe, i tre valori precedenti possono, in una certa misura, produrre un'idea di una curva di equilibrio "liscia".

Le fasi 3 e 4 possono e devono essere ripetute più volte in diverse parti della storia, in primo luogo, per verificare l'attendibilità dei risultati selezionati e, in secondo luogo, per ridurli al massimo in numero. Le restanti 3-5 varianti saranno abbastanza sufficienti per una scelta finale informata.

Il completamento delle fasi 3 e 4 include la generazione di set-file dai set rimanenti, l'implementazione di test individuali in qualsiasi parte della storia, il confronto tra loro, la selezione, ecc.

Fondamentalmente, questa è una questione di qualifiche, gusti e preferenze di ogni trader e va oltre lo scopo di questo articolo.


Tecnica

Non c'è niente di difficile e di sconvolgente qui, tutto ciò di cui hai bisogno è attenzione e precisione. Iniziamo.

1. Configurazione computer - Pannello di controllo/Opzioni internazionali e della lingua/Opzioni internazionali/Russo - Personalizza/Numeri/Simbolo decimale - invece di una "virgola" è necessario selezionare un "punto" - questo viene fatto per una trasposizione accurata dei dati durante la copia dei ( test) risultati di ottimizzazione, dal Terminale ad una tabella Excel;

- Dovresti avere Microsoft Office (necessario Excel) installato sul tuo computer - versione 2000 e successive.

- Le macro dovrebbero essere abilitate nelle impostazioni di sicurezza di Excel e il modulo Analise.bas (allegato all'articolo) dovrebbe essere importato. La revisione del modulo e della sua struttura non è fornita in questo articolo poiché non è necessario che gli utenti ordinari cambino o modifichino nulla in esso e gli utenti "straordinari", se lo desiderano, lo scopriranno da soli.

2. Preparazione del Expert Advisor

Un esempio dell'Expert Advisor preparato è disponibile in allegato.

All'inizio del codice occorre inserire prima dei parametri esterni:

// Test and optimization parameters
extern int          VarOptimTest    = 0;       // 0 - standard optimization (normal operation of the Expert Advisor)
                                                                     // 1 - test run of the selected sets         
                                                                     // 2 - generation of set-files
extern int          Counter              = 1;       // counter    
extern string       nameEA          = "MA";  // Expert Advisor name

Queste variabili controlleranno le modalità di ottimizzazione e test.

init() dovrebbe apparire come segue:

int init() 
{
   // BLOCK OF THE OPTImizaTION AND TESTING FUNCTION CALL
   if(IsOptimization() && VarOptimTest !=0)
      {
      if (VarOptimTest == 1 && Counter !=0) _ReadParametrs();
      if (VarOptimTest == 2 && Counter !=0)
         {_ReadParametrs(); _WriteSet();}
      }   
...........
...........
return (0);
} 

Da qui verranno chiamate due funzioni che garantiscono l'automazione dell'intero processo.

La seguente riga viene aggiunta alla funzione start() :

int start() 
{
   if(IsOptimization() && VarOptimTest ==2) return(0);
..........

1. Funzione di lettura dei parametri per leggere un file Excel creato dopo l'analisi dei risultati di ottimizzazione (test).

La parte variabile della funzione è in grassetto. È necessario elencare in modo accurato e accurato, seguendo la stessa struttura e sintassi, tutti i parametri di input dell'Expert Advisor ad eccezione dei primi tre responsabili dell'ottimizzazione e del test, nonché delle variabili di tipo bool e string, se presenti.

void  _ReadParametrs()
{
   string FileName="test.csv";
   int handle=FileOpen(FileName,FILE_READ||FILE_CSV);//,''); 
   if(handle<1) return(0);
   FileSeek(handle,0,SEEK_SET);
   int str = StrToInteger(FileReadString(handle)); 
   int data = StrToInteger(FileReadString(handle)); 
   if (data < Counter) 
      {
      Alert("Incorrect number of test runs entered. Sorry");
      return(0);
      }
   for (int y=1; y <=Counter; y++)
      {
      for (int x=1; x <= str; x++)
         {
         string s = FileReadString(handle); 
         string ds = FileReadString(handle); 
         if (y != Counter) continue;
         s=StringTrimLeft(s);s=StringTrimRight(s);
         ds = StringTrimLeft(ds);ds=StringTrimRight(ds);
         double d = StrToDouble(ds);

         if (s == "Lots"){Lots=d;continue;}
         if (s == "MaximumRisk"){MaximumRisk=d;continue;}
         if (s == "DecreaseFactor"){DecreaseFactor=d;continue;}
         if (s == "MovingPeriod"){MovingPeriod=d;continue;}
         if (s == "MovingShift"){MovingShift=d;continue;}
         
         }
      }
   FileClose(handle);
  return(0);
}

2. Funzione di generazione e scrittura di file di set. La sua struttura dovrebbe rispecchiare la struttura dei file di set di Expert Advisor. La parte variabile della funzione è in grassetto.

void  _WriteSet ()
{
   string FileName=nameEA+"_"+Symbol()+Period()+"_"+Counter+".set";
   int handle=FileOpen(FileName,FILE_WRITE|FILE_CSV);
   if(handle<1) return(0);

   FileWrite(handle,"VarOptimTest="+0);
   FileWrite(handle,"VarOptimTest,F="+0);
   FileWrite(handle,"VarOptimTest,1="+0);
   FileWrite(handle,"VarOptimTest,2="+0);
   FileWrite(handle,"VarOptimTest,3="+0);
   
   FileWrite(handle,"Counter="+0);
   FileWrite(handle,"Counter,F="+0);
   FileWrite(handle,"Counter,1="+1);
   FileWrite(handle,"Counter,2="+1);
   FileWrite(handle,"Counter,3="+100);

   FileWrite(handle,"nameEA="+nameEA+"_"+Symbol()+Period()+"_"+Counter);

   FileWrite(handle,"Lots="+Lots);
   FileWrite(handle,"Lots,F="+0);
   FileWrite(handle,"Lots,1="+0.00000000);
   FileWrite(handle,"Lots,2="+0.00000000);
   FileWrite(handle,"Lots,3="+0.00000000);
   
   .................................
   
   FileWrite(handle,"MovingShift="+MovingShift);
   FileWrite(handle,"MovingShift,F="+1);
   FileWrite(handle,"MovingShift,1="+2);
   FileWrite(handle,"MovingShift,2="+1);
   FileWrite(handle,"MovingShift,3="+4);
   
   FileClose(handle);
return(0);
}

3. Processo

ATTENZIONE! Consiglio vivamente di duplicare il foglio di lavoro o l'intera cartella di lavoro prima di eseguire qualsiasi operazione. L'esecuzione di macro in Excel è un'operazione irreversibile e in caso di errore i risultati dell'ottimizzazione possono andare persi, il che significa perdita di tempo. Non ci sarà alcun danno nel salvare di tanto in tanto i risultati provvisori.

3.1. Ottimizzazione

Ci sono abbastanza informazioni dedicate alle peculiarità dell'ottimizzazione, ora vediamo come si può fare. I parametri di ottimizzazione e test nelle proprietà di Expert Advisor dovrebbero essere impostati come mostrato nello screenshot:


Fig.1 Proprietà di Expert Advisor, scheda "Parametri di input". Parametri di ottimizzazione e test


3.2. Analisi dei risultati di ottimizzazione e screening dei parametri iniziali

Al termine dell'ottimizzazione, i risultati dovrebbero essere copiati negli appunti:


Fig.2 Copia dei risultati di ottimizzazione

avvia Excel e incolla i dati copiati in un nuovo foglio di lavoro.

Dopo aver copiato, dovresti eseguire la macro Optim_1. Se tutto è stato eseguito correttamente, il foglio di lavoro sarà simile a questo:


Fig.3 Esecuzione della macro di Excel

Quando si esegue la macro, sarà necessario immettere il numero di giorni nel periodo di ottimizzazione nella finestra di dialogo. Ciò è necessario per il calcolo dei criteri aggiuntivi.


Fig.4 Finestra di dialogo per l'immissione del numero di giorni

Come puoi vedere, non ci sono nomi di colonna nella tabella risultante. Questo è fatto per un motivo. In primo luogo, rende più facile evitare errori durante l'immissione del numero di parametri (richiesto in seguito), in secondo luogo, non è necessario in essi. Tutto è familiare qui tranne due colonne: blu e verde. Da sinistra a destra Numero di Pass, Profitto, Profitto al giorno, Totale delle offerte, Offerte al giorno, Fattore di profitto, Payoff previsto, Drawdown in $, Drawdown in %.

Quando la tabella contiene solo i parametri selezionati per ulteriori lavori (cioè le righe indesiderate sono state eliminate), si procede al passaggio successivo.

Per facilitare l'ordinamento, nel modulo è presente un intero gruppo di macro che consente l'ordinamento per singole colonne. Assegna tasti di scelta rapida e ....


3.3. Salvataggio dei parametri in un file

Dovresti eseguire la macro "Write" e inserire il percorso in cui verrà salvato il file dei parametri (.... terminal\tester\files\) nella finestra di dialogo a comparsa

Fig.5 Finestra di dialogo per il salvataggio del file dei parametri

La finestra "Nome file" avrà un nome predefinito "test", per favore non cambiarlo a meno che non sia assolutamente necessario, ma se lo fai, dovrai fare lo stesso nelle funzioni che sono state aggiunte al tuo Expert Advisor.

Al termine di questa operazione il file "test.csv" apparirà (o verrà sovrascritto se esisteva in precedenza) nella directory specificata.

Attenzione, questo è importante. Dopo la creazione del file non modificare le posizioni delle righe nella tabella, altrimenti i risultati del test non saranno più vincolati ai parametri utilizzati nel test.


3.4. Testing

Expert Advisor -impostazioni-:




Fig.6-8 Impostazioni Expert Advisor per l'implementazione del test di gruppo

Le spiegazioni, suppongo, se necessarie, sono minori: Nessun limite impostato, Algoritmo genetico disabilitato, Variabile contatore impostata da 1 a N, dove N è il numero di righe rimaste nella tabella, Ottimizzazione abilitata solo da questo parametro.

E un'altra impostazione:


Fig.9 Impostazioni della scheda "Risultati di ottimizzazione"

Ora, se sono impostati il periodo di test e altri parametri di ottimizzazione essenziali, è possibile fare clic sul pulsante "Avvia" ed eseguire lo Strategy Tester in modalità "Ottimizzazione".

Al termine dei test che possono richiedere molto tempo, soprattutto alla prima esecuzione quando il tavolo è ancora grande, possiamo procedere al passaggio successivo.


3.5. Lavorare con i risultati del test

Prima di tutto, la tabella Excel dovrebbe essere preparata per il nuovo inserimento dati e per questo scopo eseguiamo la macro "Optim_2" per cui appariranno 7 colonne vuote sul lato sinistro della tabella. I risultati ricevuti devono essere ordinati in base al numero di pass in ordine crescente:


Fig. 10 Ordinamento dei risultati del test

I risultati devono essere successivamente copiati (come nel passaggio 2) e incollati in un nuovo foglio di lavoro Excel seguito dalla copia delle prime 7 colonne e incollatura delle stesse nell'area precedentemente preparata nel foglio di lavoro con la nostra tabella.

Ora esegui una sequenza di macro "Optim_3" e "Optim_4". Se tutto è stato eseguito correttamente, la tabella avrà la seguente struttura:


Fig.11 Struttura della tabella dopo il salvataggio e l'elaborazione dei risultati di ottimizzazione e test

Abbiamo già discusso delle colonne LT, le colonne D-K sono simili alle colonne М-T ma i loro dati si riferiscono all'area di prova.
Ma prima di procedere alle prime tre colonne, dovrebbe essere apparentemente spiegato perché sono stati introdotti criteri come "Profitto al giorno" e "Offerte al giorno".

I periodi di ottimizzazione e test possono essere di lunghezza diversa. In questo caso sorge una domanda ragionevole: come confrontare i risultati? Questi due parametri sono progettati per risolvere almeno in parte questo problema e facilitare il processo di confronto dei risultati.

Quindi, Colonne А = N/E (rapporto profitti per giorno), B = P/G (rapporto offerte per giorno), С =S/J (rapporto di prelievo).

Come si vede, i valori in queste colonne sono attualmente rappresentati da 1 - variante ideale esistente solo quando l'area di test nello storico coincide con l'area di ottimizzazione. Questa non è una svista ma un'azione deliberata per dimostrare uno dei modi per verificare se l'Expert Advisor è stato preparato correttamente. Allo stesso modo, si può verificare la correttezza della creazione dei file di set.

Quindi, tutto è pronto per l'analisi. Tutte le informazioni sono disponibili. Tutto è nelle mani del trader, è lui che conosce tutte le caratteristiche segrete del suo Expert Advisor e può impostare i limiti tollerabili necessari alla gamma di risultati per vagliare i parametri.

Andare avanti. La tabella è stata ulteriormente ridotta ma è ancora insufficiente. Niente ci impedisce di eseguire un altro test.
Rimuovere le colonne A-K e tornare al passaggio 3.

A seguito dell'implementazione di 3-4 prove avremo la tabella composta da 3-5-8 righe. Questo è abbastanza, quindi andiamo oltre.


3.6. Generazione dei Set-File.

Qualcuno potrebbe dire che non è necessario e che 5-8 set di parametri possono essere elaborati manualmente. Non mi dispiace, fallo se vuoi. Ma preferisco che la macchina svolga lavori di routine per me. Tutto ciò di cui abbiamo bisogno è eseguire la macro "Write" e un'ultima volta eseguire lo Strategy Tester in modalità "Ottimizzazione" con le seguenti impostazioni di Expert Advisor:


Fig.12 Impostazioni Expert Advisor per la generazione dei file di set

Le impostazioni sono quasi identiche a quelle utilizzate nella modalità test, l'unica differenza è il valore di una variabile e il valore finale del contatore.

Al completamento del processo di ottimizzazione, i file di set di Expert Advisor verranno generati nella directory tester\files. L'ultima cifra nel nome è il numero della riga nella nostra tabella.


Fig.13 Set-File generati

Possono essere gestiti come file di set di Expert Advisor standard.

Di fatto, l'oggetto dell'articolo è ormai esaurito.


Conclusione

Le informazioni di cui sopra non pretendono di essere una scoperta nell'area convenzionalmente chiamata "Teoria dell'ottimizzazione".... È una guida puramente pratica, né più né meno... Questo è probabilmente chiaro, ma trovo ancora necessario menzionarlo.
Tutto ciò che viene descritto qui è solo uno strumento progettato per facilitare al massimo il lavoro del trader. Nessuno darebbe mai una garanzia al 100% che la curva di equilibrio al di fuori del bordo destro del grafico sembrerà "buona" come nella parte visibile del grafico.

E un'altra cosa. Non lasciare che l'abbondanza di parole e immagini ti spaventi. In effetti, tutto è abbastanza semplice e dopo aver effettuato tale ottimizzazione un paio di volte, imparerai a farlo automaticamente.

Ho la sensazione che qualcuno possa avere un'idea su come rendere più efficaci l'ottimizzazione e il test di Windows... e se :)

Ti auguro buona fortuna e profitti.

P.S. Non avrei mai pensato che ci sarebbero volute così tante parole per descrivere alcune dozzine di manipolazioni del "mouse". :)

Tradotto dal russo da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/ru/articles/1347

File allegati |
Analise.zip (2.2 KB)
La regola d'oro dei trader La regola d'oro dei trader
Per realizzare profitti basati su aspettative elevate, dobbiamo comprendere tre principi di base del buon trading: 1) conoscere il tuo rischio quando entri nel mercato; 2) minimizzare le perdite in anticipo e continuare ad avere profitti; 3) conoscere le aspettative del sistema - testarlo e regolarlo ad intervalli regolari. Questo articolo fornisce un codice di programma che segue le posizioni aperte e attualizza il secondo principio d'oro, in quanto consente al profitto di correre per il livello più alto possibile.
MQL5 Cookbook: Implementazione di un array associativo o di un dizionario per l'accesso rapido ai dati MQL5 Cookbook: Implementazione di un array associativo o di un dizionario per l'accesso rapido ai dati
Questo articolo descrive uno speciale algoritmo che consente di accedere agli elementi tramite le loro chiavi univoche. Qualsiasi tipo di dati di base può essere utilizzato come chiave. Ad esempio può essere rappresentato come una stringa o una variabile intera. Tale contenitore di dati è comunemente indicato come dizionario o array associativo. Fornisce un modo più semplice ed efficiente di risolvere i problemi.
Sui metodi di analisi tecnica e previsione di mercato Sui metodi di analisi tecnica e previsione di mercato
L'articolo dimostra le capacità e il potenziale di un noto metodo matematico abbinato al pensiero visivo e a una prospettiva di mercato "fuori dagli schemi". Da un lato, esso è scritto per attirare l'attenzione di un vasto pubblico, per convincere le menti creative a riconsiderare il paradigma di trading in quanto tale. E dall'altro, può dare origine a sviluppi alternativi e implementazioni di codice di programma per una vasta gamma di strumenti per l'analisi e la previsione.
Studiare la classe CCanvas. Come disegnare oggetti trasparenti Studiare la classe CCanvas. Come disegnare oggetti trasparenti
La solida grafica scomoda delle medie mobili non ti va più bene? Vuoi disegnare qualcosa di più bello di un semplice rettangolo riempito di colore nel tuo terminale? Puoi disegnare una grafica più accattivante nel tuo terminale. Questo può essere implementato tramite la classe CСanvas, che viene utilizzata per creare grafiche personalizzate. Con questa classe è possibile implementare la trasparenza, fondere i colori e produrre l'illusione della trasparenza mediante la sovrapposizione e la fusione dei colori.