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

 

Nel tester, gli ordini limite non sono controllati per l'accettazione al tick set/modify.

A causa di questo, quando un ordine limite viene piazzato al prezzo corrente, non viene eseguito, il che non è in linea con le regole del mercato.


Ci saranno dei cambiamenti nel tester per questa situazione?

 

Il tester ha funzionato in 12 flussi per 27 ore. Questa è una strana foto ricordo. Potete vedere che l'applicazione non consuma molta memoria.


Soprattutto lo stato degli agenti è più che gratuito.



C'è anche un'istanza che ha già finito di lavorare in 1 thread. La memoria di swap è allocata.


Ha chiuso l'istanza in esecuzione:

Immediatamente si sono liberati 26 GB. Penso che i thread tengano la memoria nello stato allocato? Process Explorer mostra proprio questo. Ogni istanza ha 4GB (tranne una). Detto questo, uno ha abbandonato (dovrebbe essere 12).


Il problema è che anche se la memoria privata non viene utilizzata, quando il file di swap è pieno, lo stesso Chrome inizia a bestemmiare sulla memoria insufficiente. Allo stesso tempo, la RAM è mezza libera...


La seconda domanda è questa. Perché durante l'ottimizzazione genetica i thread spesso rimangono inattivi e aspettano che un thread finisca? Ha senso ucciderli calcolando con la previsione e rilevando risultati diversi dall'attesa che il thread previsto finisca? O provare a "scuotere" di nuovo alcuni parametri e cercare altre soluzioni?

PS. Mettere gli agenti in disabilitazione e poi attivarli di nuovo - hanno smesso di mangiare la memoria. Ma mi sembra che anche la cache del disco inizi a ricrearsi all'avvio?
 

C'è un bug nel tempo di cancellazione di un ordine in sospeso su un evento di mancanza di denaro.

C'è il tempo zero (evidenziato nello screenshot) invece del tempo di cancellazione.

E lo stato posto invece di annullato.

 

Ora per analizzare la situazione sul pezzo evidenziato


devi muovere il cursore, ricordare la data del pop-up, aprire il grafico di esecuzione, andare al posto richiesto nella Storia del commercio e fare doppio clic sulla linea pertinente nella tabella.


Tutto questo può essere sostituito con un doppio clic sul punto del grafico qui sopra?

 
fxsaber:

Tutto questo può essere sostituito con un doppio clic sul punto del grafico qui sopra?

Penso che sia fantastico, una "caratteristica" molto necessaria - la sostengo!!!

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

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

fxsaber, 2019.10.14 23:32

In MT5 è possibile chiudere una posizione e ottenere una perdita (il saldo prima dell'apertura è inferiore al saldo dopo la chiusura). Ma allo stesso tempo MT5 Tester (terminale non controllato) considererà questo trade come redditizio.

Ho elaborato un Expert Advisor per giocare

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  if (!OrderSelect(0, SELECT_BY_POS))
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
  else if ((OrderProfit() > -OrderCommission()) &&
           (OrderProfit() < -OrderCommission() * 2) &&
           OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0))
    ExpertRemove();
}


Eseguilo nello Strategy Tester da un server di trading, dove c'è una commissione (l'ho eseguito su questo: ForexTimeFXTM-Demo01).

Il risultato è in immagini.


Nella schermata si può vedere che c'era una posizione BUY, che ha chiuso con una perdita totale - il saldo iniziale è diminuito.


E questo è ciò che è evidenziato qui nella colonna di sinistra - l'Expert Advisor ha subito una perdita.

E ora diamo un'occhiata a ciò che è evidenziato nella seconda colonna. Tutto va alla grande lì, con aspettative matematiche positive e trade redditizi al 100%!


Così si scopre che l'Expert Advisor sta perdendo mentre l'indicatore sembra redditizio. Quindi il calcolo dei PF è distorto.


ZZY ha scritto un esempio in un minuto. Ho pensato con terrore a quanto tempo ci vorrebbe per scriverlo in MQL5 o SB. Chi non è pigro, lo provi.

 

Nel Tester, la scheda Panoramica ha una lista molto comoda di azioni precedenti con un filtro interattivo.

In questa lista, i nomi degli EA sono visualizzati senza percorso. A causa di questo, quando ci sono due EA con lo stesso nome, ma in cartelle diverse, la lista non mostra (e non può filtrare) quale EA corrisponde a quale voce.


È possibile emettere in questa lista di azioni precedenti i nomi degli EA con i loro percorsi dalla cartella Experts?

Non uso indicatori, ma probabilmente sarebbe ragionevole fare lo stesso per loro.

 
Il tester prende in considerazione entrambi i lati delle compravendite CloseBy quando calcola il numero di compravendite. Da qui il numero errato di scambi, l'aspettativa matematica, ecc.
 
EA
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

int OnInit()
{
  return(OrderCloseBy(OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0), OrderSend(_Symbol, OP_SELL, 
2, Bid, 0, 0, 0)));
}


il rapporto non riporta altro che zeri. Anche se lo scambio era in corso.


Anche il perché = 1 non è chiaro. Non è presente nel codice sorgente.

 
fxsaber:
EA


il rapporto non riporta altro che zeri. Anche se lo scambio era in corso.


Anche il perché OnTester == 1 non è chiaro. Non è presente nel codice sorgente.

Sei sicuro che si sta scambiando in OnInit? E come pensi di usare GetLastError con il tuo codice? E un'altra domanda. Siete sicuri dell'ordine in cui vengono calcolati gli argomenti della funzione?