Backtesting e creazione di un file di report

Sezione dedicata a metatrader (ed altre piattaforme) ed al suo linguaggio di programmazione per il trading automatico

Moderatore: Dainesi

Backtesting e creazione di un file di report

Messaggioda SebaX75 » 26/04/2016, 16:40

Ciao a tutti,
vorrei creare un report simile a quello che si ottiene alla fine di ogni ciclo di testing e scrivere i risultati all'interno di un file.
Il codice l'ho inserito all'interno della chiamata OnTester() e la maggior parte dei valori che mi servono li recupero con la funzione TesterStatistics(STAT_qualcosa), ma ci sono dei valori che questa funzione non include e, metre per alcuni ho trovato una soluzione, per altri non saprei come fare:
- il cross considerato (trovato con la funzione Symbols());
- il timeframe (trovato con la funzione Period());
- il numero di barre esaminate dal tester (?);
- la data di inzio del periodo di test (?);
- la data di fine del periodo di test (?);

Qualcuno sa dirmi come fare?

Grazie,
SebaX75
SebaX75
 
Messaggi: 18
Iscritto il: 15/04/2015, 14:54

Pubblicità

Pubblicità
 

Re: Backtesting e creazione di un file di report

Messaggioda carlo10 » 27/04/2016, 8:45

Il nuermo di barre dovresti ottenerlo con la funzione Bars -> https://docs.mql4.com/predefined/bars

Con Time[0] all'interno della onInit() ti salvi la data di inizio mentre con Time[0] all'interno della deInit() ti salvi la data di fine.
Avatar utente
carlo10
 
Messaggi: 1834
Iscritto il: 08/05/2014, 21:17

Re: Backtesting e creazione di un file di report

Messaggioda SebaX75 » 27/04/2016, 14:37

Ciao Carlo10,
grazie per l'aiuto, ha funzionato quasi tutto... pensavo che la variabile Bars fosse utilizzabile solamente all'interno della OnTick od OnCalculate per gli indicatori.
Per quello che riguarda il tempo solamente una precisazione che può essere utile a chi rileggerà questo post:
- per stampare il report io ho utilizzato la OnTester();
- la funzione OnTester() viene eseguita prima della OnDeInit();
- per stampare il valore corretto, la Time[0] di fine la chiamo nella OnTester() e poi stampo.

Il report che stampo adesso è quasi identico a quello che si vede nei tab, mi mancherebbero ancora:
- Ticks adoperati per il modello;
- Qualita' del modello;
- Errori di grafici;
ma per adesso non ho trovato nulla a riguardo.

Se a qualcuno può interessare, questa è la parte di codice che restituisce i valori nello stesso ordine in cui li si leggono nel report "ufficiale" (il tab):
Codice: Seleziona tutto
Bars,0,0,0,
ReplaceDotComma(DoubleToString(TesterStatistics(STAT_INITIAL_DEPOSIT),roundTo)),ReplaceDotComma(DoubleToStr((Ask-Bid)/Point(),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_PROFIT),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_GROSS_PROFIT),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_GROSS_LOSS),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_PROFIT_FACTOR),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_EXPECTED_PAYOFF),roundTo)),
ReplaceDotComma(DoubleToString(TesterStatistics(STAT_INITIAL_DEPOSIT)-TesterStatistics(STAT_EQUITYMIN),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_EQUITY_DD),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_EQUITYDD_PERCENT),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_EQUITY_DDREL_PERCENT),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_EQUITY_DD_RELATIVE),roundTo)),
ReplaceDotComma(DoubleToString(TesterStatistics(STAT_TRADES),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_SHORT_TRADES),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_PROFIT_SHORTTRADES)/TesterStatistics(STAT_SHORT_TRADES)*100,roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_LONG_TRADES),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_PROFIT_LONGTRADES)/TesterStatistics(STAT_LONG_TRADES)*100,roundTo)),
ReplaceDotComma(DoubleToString(TesterStatistics(STAT_PROFIT_TRADES),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_PROFIT_TRADES)/TesterStatistics(STAT_TRADES)*100,roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_LOSS_TRADES),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_LOSS_TRADES)/TesterStatistics(STAT_TRADES)*100,roundTo)),
ReplaceDotComma(DoubleToString(TesterStatistics(STAT_MAX_PROFITTRADE),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_MAX_LOSSTRADE),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_GROSS_PROFIT)/TesterStatistics(STAT_PROFIT_TRADES),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_GROSS_LOSS)/TesterStatistics(STAT_LOSS_TRADES),roundTo)),
ReplaceDotComma(DoubleToString(TesterStatistics(STAT_CONPROFITMAX_TRADES),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_CONPROFITMAX),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_CONLOSSMAX_TRADES),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_CONLOSSMAX),roundTo)),
ReplaceDotComma(DoubleToString(TesterStatistics(STAT_MAX_CONWINS),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_MAX_CONPROFIT_TRADES),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_MAX_CONLOSSES),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_MAX_CONLOSS_TRADES),roundTo)),
ReplaceDotComma(DoubleToString(TesterStatistics(STAT_PROFITTRADES_AVGCON),roundTo)),ReplaceDotComma(DoubleToString(TesterStatistics(STAT_LOSSTRADES_AVGCON),roundTo))

Nota: lo spread è rappresentato in punti ed è quello dell'ultimo prezzo ricevuto, la funzione ReplaceDotComma sostituisce i punti con le virgole in modo da poter poi importare i dati in excel senza problemi.

Grazie,
SebaX75
SebaX75
 
Messaggi: 18
Iscritto il: 15/04/2015, 14:54


Torna a Metatrader - Expert Advisor - MQL

 


  • Discussioni correlate
    Risposte
    Visite
    Ultimo messaggio

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti