Backtesting/ottimizzazione - pagina 82

 

Buon post sul backtesting, prezzo bid/ask:

https://www.mql5.com/en/forum/181204

 

Strategytester: Limite di dimensione del lotto MT4

Ciao,

Come posso cambiare le impostazioni del massimo Lot Size in MT$ strategy tester? Atm lo Strategy Tester non si apre Potisions >50 Lots.

e c'è un limite di equilibrio nel tester di strategia?

Apprezzerei un aiuto. Grazie!

 
lsteixeira:
Alcuni dati decenti che ho usato provengono da qui:

Http://www.histdata.com

Salute!

Grazie per il consiglio...sto usando i tickdata di Ducas con il 99% di qualità di modellazione. Non posso dire quanto questo si avvicini alla realtà, ma spero che sia abbastanza vicino ^^

 

[langtitle=fr]Probl�me sur un backtest[/langtitle]

[lang=fr]Bonjour tout le monde,

Je me tourne vers vous car j'ai un probleme lors du backtest de mon EA.

Come potete vedere sul grafico, c'è una caduta brutale e non so se è possibile, ho uno stop loss che si aggira sui 10 pips

File:
graphique.jpg  117 kb
rapport.jpg  97 kb
 

Fine normale dello stop del tester

targetik:
[lang=fr]Bonjour tout le monde,

Je me tourne vers vous car j'ai un probleme lors du backtest de mon EA.

Come potete vedere sul grafico, c'è una caduta brutale e non so nulla di quello che succede, ho uno stop loss su 10 pips

Ciao Targetik,

Questo è un normale Stop-Out "End Of Strategy Tester"...

Il tester chiude tutti i trade aperti quando il tester termina... e tutti i tuoi trade aperti attivi di solito si chiudono con una perdita.

Io ignoro semplicemente l'ultimo trade... o reimposto le date per superare quel trade in modo che possa chiudersi correttamente... o imposto la data dell'ultimo trade chiuso in modo da non avere nessun trade aperto alla fine del test.

Spero che questo aiuti,

Robert

 

[lang=fr]Merci beaucoup [/lang]

 

Grande thread!

--

 

Recuperare l'equity più alta dalle ottimizzazioni?

È possibile recuperare informazioni sulla massima equità raggiunta da ogni esecuzione di un dato set di risultati di ottimizzazione in MT4?

Per quanto posso dire, MT4 non fornisce informazioni nella finestra dei risultati per la massima equità raggiunta da una strategia durante il back testing - sia nei risultati di ottimizzazione o nel report da un singolo run through manuale. (La cosa che più si avvicina è il drawdown $, che credo richieda di conoscere il valore della depressione rilevante per determinare quale sia stato il picco precedente - e si può solo indovinare dal bilancio finale). Presumibilmente il tester della strategia avrebbe dovuto conoscere l'esatta cifra più alta di equity ad un certo punto durante i suoi calcoli. C'è un modo per recuperare quei dati per i risultati di ottimizzazione?

Posso pensare a un work around parziale. L'equity più alta raggiunta durante un singolo back test manuale potrebbe essere vista aggiungendo una variabile nell'EA che agisce come un record del "più alto punto d'acqua" raggiunto in termini di equity, e poi stamparlo nel diario alla fine del run through (o quando). Il problema è che le informazioni del diario non sembrano essere disponibili quando la stessa strategia viene eseguita come parte di un'ottimizzazione... Questo andrebbe bene per un piccolo numero di esecuzioni manuali, ma non è adatto per un numero maggiore di ottimizzazioni.

L'unica altra soluzione che mi viene in mente è quella di utilizzare un indicatore che agisca come un EA, e caricarlo nel normale grafico del terminale. Inserendo un "tempo di inizio" come variabile esterna si potrebbe tenere un conteggio dei profitti e delle perdite (a condizione che le posizioni non siano aperte all'interno delle candele). Il problema con questo è lo stesso comunque. Avreste ancora bisogno di digitare manualmente le diverse variabili esterne per ogni diversa esecuzione delle possibilità di ottimizzazione - che potrebbero essere molte!

In alternativa, si potrebbe mettere un limite artificiale all'equity in un EA, e poi chiudere tutte le posizioni e terminare il trading nell'EA una volta che un'equity predeterminata è stata raggiunta. Allora sareste in grado di vedere una lista del numero di run through che si sono conclusi su quel valore nei risultati delle ottimizzazioni. Tuttavia, non si potrebbe sapere da questo se un dato run through sarebbe andato avanti per raggiungere un'equità più alta, a meno che non si esegua un gran numero di run through con diversi limiti di equity. Questo però sembra un work around molto goffo e inefficiente.

(Anche essere in grado di vedere un semplice grafico del saldo rispetto al numero di scambi sarebbe un inizio - ma anche questo non sembra essere disponibile dalle ottimizzazioni).

Qualcuno conosce un metodo migliore che funzioni in modo più efficiente per le ottimizzazioni?

 

Penso di aver appena trovato la risposta alla mia stessa domanda, quindi posterò qui nel caso qualcuno voglia ancora conoscere la risposta.

Una soluzione è quella di utilizzare le variabili globali(Global variables - MQL4 Documentation). A quanto pare, le variabili globali SONO impostate o aggiornate durante ogni esecuzione di un'ottimizzazione. Mi riferisco alle variabili globali del terminale del cliente qui, non solo alle "variabili globali" all'interno di un EA. Poiché la variabile è globale, è possibile interrogarla utilizzando qualcosa al di fuori dello Strategy Tester. Potresti semplicemente aggiungere una normale variabile (doppia) all'interno dell'EA che si aggiorna al più alto valore di equity ad ogni tick, quindi impostare una variabile globale a quel valore nella sezione deinit() dello stesso EA. Questa variabile globale potrebbe poi essere interrogata usando GlobalVariableGet() in uno script su una normale finestra del grafico nel terminale una volta che ogni passaggio dell'ottimizzazione è completato, e il valore risultante potrebbe essere visualizzato come un commento o registrato nel giornale del terminale usando Print.

L'unico problema con questo approccio è che si dovrebbe eseguire manualmente lo script dopo ogni passaggio dell'ottimizzazione (prima del completamento del passaggio successivo) - quindi si dovrebbe ancora stare seduti a guardare le ottimizzazioni. Non credo che un EA possa essere utilizzato per interrogare la variabile globale, perché l'EA avrebbe bisogno di essere eseguito più volte per catturare più passaggi dell'ottimizzazione. È molto probabile che tu non riceva alcun tick durante un'ottimizzazione, perché saresti disconnesso dai dati live per preservare le tue impostazioni di spread. Immagino che i vari metodi per inviare "falsi tick" all'EA non funzionerebbero da un'ottimizzazione al normale grafico del terminale...

Questo è meno problematico se state usando un conto con una dimensione di spread stabile, nel qual caso potreste eseguire le ottimizzazioni mentre siete connessi ai dati live in entrata, senza rischiare troppo di cambiare i dati di spread. Sarebbe comunque un problema se si volesse ottimizzare durante il fine settimana. Inoltre, se il vostro prossimo passaggio di ottimizzazione si completasse prima che un nuovo tick venga ricevuto, i dati dell'ultimo passaggio non verrebbero registrati.

Potreste aggirare questo problema impostando una variabile globale SEPARATA con ogni passaggio dell'ottimizzazione, e poi leggerli tutti alla fine premendo F3. Questo potrebbe essere fatto con un'operazione di ciclo nel deinit() per recuperare il numero corrente di variabili globali ("n"), e poi nominare la variabile globale corrente "n+1", e impostarla al relativo valore di equità. In questo modo potreste visualizzarle tutte alla fine premendo F3, e il nome della variabile sarebbe lo stesso del numero del passaggio del run through (a patto che non ci fossero variabili globali in essere all'inizio dell'ottimizzazione - che può essere facilmente ottenuto eseguendo uno script con GlobalVariablesDeleteAll() prima di ogni ottimizzazione). Non sono sicuro di quale sia il numero massimo di variabili globali - ma finché si ha un numero ragionevole di ottimizzazioni dovrebbe andare bene, credo. Sfortunatamente non credo che i dati ottenuti premendo F3 siano esportabili, quindi dovreste copiarli usando un tappo dello schermo o la buona vecchia carta e penna (o semplicemente avere un'installazione separata di MT4 per ogni ottimizzazione se state usando un numero stupendo di passaggi). Suppongo che in alternativa si potrebbe scrivere uno script per stampare tutti i nomi e i valori delle variabili globali nel diario del terminale dopo che l'ottimizzazione è completa, e poi esportare quel diario.

Questo metodo potrebbe ovviamente essere usato per recuperare qualsiasi dato dalle ottimizzazioni, invece di dover fare affidamento sulle limitate informazioni della finestra dei risultati dell'ottimizzazione di Strategy Tester! Spero che questo aiuti qualcuno :-)

 

p.s. - Ho appena realizzato che sia Print che Alert permettono solo 64 caratteri, quindi non si potrebbe scrivere uno script per stampare le variabili globali se si stesse usando più di una manciata di ottimizzazioni. (A meno che non si stampi ogni variabile globale in una riga separata del diario del terminale, e poi si clicchi e si copino tutti uno per uno su excel o simili. Non sembra esserci un modo per selezionare più di una voce nel diario in qualsiasi momento).

Per aggirare questo problema, potreste invece usare un'operazione di ciclo per scrivere i valori di ciascuna delle variabili globali in sequenza su una stringa massiccia (usando \n per mettere ogni valore di variabile globale su una nuova linea), e poi inviarvi la stringa per email usando SendMail(). Non sembra esserci un limite al numero di caratteri in Send Mail. Potete facilmente copiare questi dati dell'e-mail in un documento di testo sul vostro computer, e usare il pulsante Importa dati esterni in excel per importare quei dati nel formato che volete. Se copiate anche i risultati dell'ottimizzazione in un documento di testo, e poi li importate in excel usando lo stesso metodo (selezionando "Delimitato" nella prima schermata, poi spuntando la casella per "Altro" e digitando "=" in quella casella di input per separare il testo dai numeri), potete poi semplicemente allineare i dati della vostra email con i dati esportati direttamente dall'ottimizzazione. In questo modo avrete qualsiasi informazione che avete estratto dall'ottimizzazione usando le variabili globali nella stessa riga dei dati rilevanti esportati dall'ottimizzazione per ogni dato passaggio. Semplice.