MetaTrader 5 Strategy Tester: bug, errori, suggerimenti per il miglioramento

 

Il tester di strategie MetaTrader 5 è attualmente oggetto di una revisione approfondita da parte del team di MQ. Nonostante il fatto che sia stato fatto molto lavoro negli ultimi due anni (grazie al team di MetaQuotes), questo tester solleva molte domande. Sfortunatamente, i cambiamenti più recenti sono concentrati più sull'aspetto visivo del tester, in modo che i principianti possano lavorare con esso più facilmente, mentre i meccanismi del suo lavoro causano ancora domande da parte degli utenti più esperti.

Propongo di dedicare questo thread alla critica costruttiva del tester di MetaTrader 5, e di trasformarlo in un luogo dove potete raggiungere gli sviluppatori.

Tutte le affermazioni/discussioni/critiche/rifiuti dovrebbero essere supportate da argomenti chiari e risultati riproducibili. La discussione dovrebbe concentrarsi sull'esecuzione e sui meccanismi di prezzo. I desideri in materia di fronzoli, icone e cavalli sferici nel vuoto (voglio che tutti i core si carichino, voglio il multi-threading per una sola esecuzione, ecc.) non sono graditi, anche se non vietati.

Quindi, andiamo.


Il tester di MetaTrader 5 salta l'esecuzione degli ordini limite

1. Dato zecche personalizzate come un array MqlTisk in un file binario (allegato al post).

2. I dati personalizzati vengono elaborati da uno script speciale e li carica nella cronologia degli strumenti. Lo script è anche allegato al messaggio.

3) Un Expert Advisor viene lanciato sul grafico risultante ed esegue operazioni secondo la sua logica. L'Expert Advisor lavora in modalità tick reali.

4. Al momento delle 00:11:05:085, è stato piazzato un ordine limite al prezzo di 10422.5. Il prezzo attuale al momento del piazzamento è 10422.0.

5. Al tempo 00:11:06.179 l'Ultimo prezzo si è verificato a 10424.0. Secondo le regole del prezzo di scambio, l'ordine SellLimit dovrebbe essere eseguito al prezzo di 10422.5, ma questo non accade. L'ordine limite sembra sospeso nell'aria, mostrando una resa completa: gli affari si svolgono con qualcun altro che offre un prezzo peggiore del nostro!

6. Ma i miracoli cominciano a svolgersi. Il prezzo si inverte e scende da 1024,0 a 10419. Cioè il livello di vendita dell'ordine limite sta penetrando dall'alto verso il basso. Tuttavia, anche l'ordine limite è sospeso nell'aria.

Sfortunatamente, non ho trovato alcun log che mostri cosa sta succedendo. C'è la sensazione che i log dei tester siano semplicemente spenti e che la printf non funzioni. L'uscita al registro del tester è disattivata:

Comunque, sembra essere un altro problema che non c'era prima.

A questo proposito ho registrato un video in cui posso vedere chiaramente cosa succede (il più interessante inizia da circa 30 secondi. Nella parte superiore dello schermo l'ora corrente è precisa al millisecondo):



Il video mostra chiaramente che il range della barra penetra il livello dell'ordine limite, ma non c'è esecuzione.

Ci sono altre domande per il tester. Ma per ora penso che sia necessario affrontarlo.

File:
 

MetaTrader 5 Tester non costruisce correttamente le barre

Questo è il simbolo personalizzato del post precedente (stessi dati). Lebarre sono disegnate a Last price, che è specificato nelle impostazioni del simbolo.

A sinistra ci sono le barre disegnate nel tester. Sulla destra, potete vedere le barre iniziali.

Potete vedere che i grafici non coincidono completamente. Quello a sinistra ha qualche schifezza.

S.w. Pensavo che fosse costruito da Bid, ma guarda la lista delle offerte - si scopre che tali prezzi non erano nemmeno in Bid o in Last o Ask. Sto allegando il feed dell'accordo in forma di testo qui sotto.

File:
deribit_csv.zip  735 kb
 

Che numero di build stai usando?

Tempo molto strano nel log 0000.00.00 00:00:00.000

Che sistema operativo avete?

I file con estensione log sono salvati nella cartella dati del tester?

 

1. Non hai dato il file "deribit1.out.bin". Nell'archivio allegato "deribit1.out".

2. Non hai dato impostazioni personalizzate del personaggio

 
Costruisco bar da Bid. L'esecuzione dei limiti da parte di Bid/Ask ha luogo. Tutto funziona (2093 per essere esatti, non ho controllato ulteriormente) correttamente.
 
Vasiliy Sokolov:

Una buona funzione che state ignorando

MqlTick tiks[];

if (FileLoad("deribit1.out.bin", ticks))
{
// ....
 
Slava:

1. Non hai dato il file "deribit1.out.bin". Nell'archivio allegato "deribit1.out".

2. Non hai dato l'impostazione personalizzata del personaggio

Mi scusi.

 
fxsaber:

Una buona caratteristica che stai ignorando.

Buono a sapersi.

 
Slava:

Che numero di build stai usando?

Tempo molto strano nel log 0000.00.00 00:00:00.000

Che sistema operativo avete?

I file con estensione log sono salvati nella cartella dei dati del tester?

La build è la più recente. 2136. Io uso sempre l'ultimo.

Windows 7 SP1

I registri vengono salvati. I log appaiono nel registro del tester di strategia. Ma non viene visualizzato nulla nel log del visualizzatore nel tester della strategia.


 
Vasiliy Sokolov:

Mi scusi.

Grazie. Ce ne occupiamo noi.

 

Il suggerimento principale è senza dubbio quello di automatizzare i test.

Fate un'ottimizzazione walk-forward o qualcosa del genere. I test dovrebbero essere effettuati su diversi periodi e strumenti.

E se non volete farlo, allora lasciate che le persone che non hanno una laurea in ingegneria della programmazione (o una laurea?) lo facciano con strumenti MQL.

Per fare ciò abbiamo bisogno della possibilità di leggere e scrivere (Get__ \Set__) l'inizio e la fine del periodo di prova, l'inizio del periodo successivo e la possibilità di riavviare il tester con un nuovo periodo di prova.

Inoltre, le strutture di elaborazione dei frame disponibili non funzionano correttamente. Qui è già stato scritto abbastanza su questo.

Un altro bug: quando si riavvia il tester con il periodo di avanzamento abilitato e i parametri precedenti, si blocca. Dobbiamo cambiare istanze, timeframe, strumento o ricompilare l'Expert Advisor.

L'ultima build pubblicamente disponibile è ancora la 2085.

Motivazione: