MT4-Tester VS MT5-Tester

 
Ho finalmente realizzato una vecchia idea

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

Discussione su "EAs pronti da MQL5 Wizard funzionano in MetaTrader 4"

fxsaber, 2017.03.09 13:02

Suggerisco di prendere la prova di Tick Data Suite (compatibile: MT4 build 940 - 1052) per il confronto.

Nel tester MT5 selezionare la modalità "per tick reali". Salvarli e darli in pasto al tester MT4 tramite TDS.

Allora le quotazioni in entrambi i tester coincideranno al 100%, il che consentirà di confrontarli non solo negli scambi, ma anche nella velocità.

Sarebbe quindi possibile confrontare la conversione/creazione di EAs in entrambe le direzioni.

MT4 build 1072, MT5 build 1596 server di trading Alpari-MT5.

Impostazioni del tester MT4 nello screenshot

La valuta in entrambi i tester è USD. Questo permette nello stesso tester MT5 per EURUSD di non tirare un altro tick del simbolo di conversione.


Ora eseguiamo il seguente Expert Advisor multipiattaforma in entrambi i tester

// MQL4&5-code

#property strict

class FILE
{
private:
  const int handle;
  
  static string TickToString( const MqlTick &Tick, const string Delimeter = " " )
  {
    return(::DoubleToString(Tick.ask, _Digits) + Delimeter + ::DoubleToString(Tick.bid, _Digits));
  }
public:  
  FILE( const string FileName ) : handle(::FileOpen(FileName, FILE_WRITE | FILE_TXT | FILE_ANSI))
  {
  }
  
  ~FILE( void )
  {
    if (this.handle != INVALID_HANDLE)
      ::FileClose(handle);       
  }
  
  bool Write( const MqlTick &Tick ) const
  {
    return((this.handle != INVALID_HANDLE) && ::FileWriteString(this.handle, FILE::TickToString(Tick) + "\n"));
  }
};

const FILE File(::MQLInfoString(MQL_PROGRAM_NAME) + ".txt");

void OnTick()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    File.Write(Tick);
}


Registro MT4-tester

2017.05.07 23:25:36.155 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:02.528 (total time 0:00:03.292)


Registro del tester MT5

2017.05.07 23:26:01.016 Core 1  EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:01.918 (including ticks preprocessing 0:00:00.203).

Confermiamo che i file ricevuti da ogni tester sono identici - i tick dei tester coincidono.


A questo punto la preparazione di entrambi i tester per il nuovo servizio è pronta.

 

Consulente esperto

// MQL4&5-code

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

#ifdef __MQL5__
  #define Bid (SymbolInfoDouble(_Symbol, SYMBOL_BID))
  #define Ask (SymbolInfoDouble(_Symbol, SYMBOL_ASK))
#endif // __MQL5__

// Idea - https://www.mql5.com/ru/code/7464
#property strict

input int Shift = 3; 
input int Limit = 18;
input double Lots = 0.1;

int PriceToInteger( const double Price )
{
  return((int)(Price / _Point + 0.1));
}

void OnTick()
{
  static int PrevBid = PriceToInteger(Bid);
  static int PrevAsk = PriceToInteger(Ask);    

  const int IntBid = PriceToInteger(Bid);
  const int IntAsk = PriceToInteger(Ask);
  
  const bool TradeTime = (TimeCurrent() % (24 * 60 * 60) < D'1970.01.01 23:50'); // exclude swaps
  
  if (TradeTime && (IntAsk - IntBid < Limit))
  {
    if ((IntBid - PrevBid >= Shift)) 
      OrderSend(_Symbol, OP_SELL, Lots, Bid, 0, 0, 0);
    
    if (PrevAsk - IntAsk >= Shift) 
      OrderSend(_Symbol, OP_BUY, Lots, Ask, 0, 0, 0);
  }

  PrevBid = IntBid;
  PrevAsk = IntAsk;
  
  for (int i = OrdersTotal() - 1; i >= 0; i--) 
    if (OrderSelect(i, SELECT_BY_POS) && ((!TradeTime) || (OrderProfit() > 0) ||
        ((OrderType() == OP_BUY)  && (PriceToInteger(OrderOpenPrice()) - IntBid >= Limit)) ||
        ((OrderType() == OP_SELL) && (IntAsk - PriceToInteger(OrderOpenPrice()) >= Limit)))) 
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); 
}


I risultati


Rapporto MT4

Strategy Tester Report
Fortunato
MetaQuotes-Demo (Build 1072)

SimboloEURUSD (Euro contro Dollaro USA)
Periodo1 Minuto (M1) 2017.04.10 00:00 - 2017.04.14 20:58 (2017.04.10 - 2017.04.16)
ModelloTutte le zecche (metodo più accurato basato su tutti i più piccoli timeframe disponibili)
ParametriShift=3; Limit=18; Lots=0.1;
Bar nella storia7292Zecche modellate1865515Qualità della modellazione99.00%
Errori di mancata corrispondenza dei grafici0
Deposito iniziale100000.00SpreadVariabile
Utile netto-10863.90Profitto totale2528.70Perdita totale-13392.60
Redditività0.19Payoff previsto-0.49
Dispersione assoluta10864.70Massimo prelievo10864.70 (10.86%)Prelievo relativo10.86% (10864.70)
Totale scambi21954Posizioni corte (% vittoria)12016 (68.60%)Posizioni lunghe (% vittoria)9938 (67.03%)
Operazioni redditizie (% di tutte)14904 (67.89%)Operazioni in perdita (% di tutte)7050 (32.11%)
Il più grandecommercio redditizio3.00transazione perdente-4.40
Mediaaffare redditizio0.17commercio perdente-1.90
Numero massimovittorie continue (profitto)155 (46.60)Perdite continue (perdita)115 (-210.10)
Max.profitti continui (numero di vittorie)46.60 (155)perdita continua (numero di perdite)-210.10 (115)
Mediavincite continue5perdita continua2


Rapporto MT5

Rapporto del tester di strategia
Alpari-MT5 (Build 1596)
Impostazioni
Consulente esperto:Fortunato
Simbolo:EURUSD
Periodo:M1 (2017.04.10 - 2017.04.16)
Parametri:Spostamento=3
Limite=18
Lotti=0,1
Broker:Alpari International Limited
Valuta:USD
Deposito iniziale:100 000.00
Leva:1:100
Backtest:
Qualità della storia:n/a
Bar:7192Tiki:1865415Personaggi:1
Utile netto:-10 863.90Prelievo assoluto sul bilancio:10 863.90Prelievo assoluto sui fondi:10 864.70
Profitto totale:2 528.70Prelievo massimo sul saldo:10 863.90 (10.86%)Prelievo massimo di fondi:10 864.70 (10.86%)
Perdita totale:-13 392.60Prelievo relativo sul bilancio:10.86% (10 863.90)Prelievo relativo sui fondi:10.86% (10 864.70)
Redditività:0.19Payoff previsto:-0.49Livello di margine:863.58%
Fattore di recupero:-1.00Rapporto di Sharpe:-0.50Z-score:-52.22 (99.74%)
AHPR:1.0000 (-0.00%)Correlazione LR:-1.00Risultato di OnTester:0
GHPR:1.0000 (-0.00%)LR Errore standard:149.82
Totale scambi:21954Scambi brevi (% dei vincitori):12016 (68.60%)Scambi lunghi (% di vittorie):9938 (67.03%)
Totale scambi:43908Operazioni redditizie (% di tutte le operazioni):14904 (67.89%)Operazioni in perdita (% di tutte le operazioni)7050 (32.11%)
Il più grande commercio redditizio3.00La più grande operazione in perdita-4.40
Commercio medio redditizio:0.17Commercio medio perdente:-1.90
Numero massimo di vittorie consecutive (profitto):155 (46.60)Numero massimo di perdite continue (perdita):115 (-210.10)
Profitti massimi continui (numero di vittorie):46.60 (155)Massima perdita continua (numero di perdite):-210.10 (115)
Vincite medie continue:5Media delle perdite continue:2


I risultati corrispondono!


Performance

MT4-log
2017.05.08 01:45:42.765 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:03.682 (total time 0:00:04.400)


MT5-log

2017.05.08 02:04:53.278 Core 1  EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:12.309 (including ticks preprocessing 0:00:00.203).


MT4-tester è riuscito 3 volte più veloce di MT5-tester. Se c'è qualche dubbio che il log di MT5 sia causato dall'uso di una libreria di terze parti, chi vuole può riscrivere la semplice logica MT4 di questo Expert Advisor in MQL5 a modo suo e verificare l'ipotesi.


HZ il tester MT5 lavorava molto più lentamente, finché non ho pulito a mano tutte le cartelle delle Basi. I risultati sono dati con questo in mente.

 

Sul server Alpari-MT5-Demo nella nuova build (che sarà rilasciata tra una settimana) con accesso rapido alla cronologia delle transazioni ci sono riuscito:

EURUSD,M1: 1865417 ticks, 7192 bars generated. Test passed in 0:00:05.578.

MT5 ha un overhead di sistema per trasferire i dati e il compito stesso a un processo agente esterno, che su compiti piccoli (secondi) introduce un grande errore in confronto.

E la complessità e la qualità del tester in MT5 è molto più alta: modellazione sincrona di molti strumenti con precisione al millisecondo, slittamenti/ritardi reali durante lo scorrimento dei cambi di mondo e un sacco di altre funzioni minori. Non è che ci sia un ciclo for.


Più lento di ordini di grandezza - non sei confuso con l'inizializzazione/sincronizzazione e il caricamento di tutti i dati? Tutto è scritto nei registri. I file sul disco non devono essere toccati in nessun caso.

Raccomando di mettere la directory %userdata%\MetaQuotes (come C:\Users\%username%\AppData\Roaming\MetaQuotes) nel pass antivirus. È qui che si trovano i dati e l'aggiunta dell'antivirus al passaggio migliora drasticamente la velocità di accesso al terminale e ai dati del tester.

Altrimenti, si eccitano così tanto quando vedono metatester[64].exe in esecuzione, aprendo la porta di rete e un sacco di grandi file di dati, scritti da terminale e tester. Il tester di alcuni commercianti riesce persino a cadere, perché l'antivirus non ha il tempo di controllare il file metatester[64].exe neanche in pochi secondi e il terminale non è in grado di accedervi.

 
Renat Fatkhullin:

la complessità e la qualità del tester in MT5 è un ordine di grandezza superiore: modellazione sincrona di più strumenti con precisione al millisecondo, slittamenti/ritardi onesti durante lo scorrimento dei cambi di mondo e un mucchio di caratteristiche minori.

Il bundle MT4+TDS ha anche questo. Più alcune altre caratteristiche che mancano a MT5... Ma ovviamente non c'è nessuna multicurrency.

Più lento di ordini di grandezza.

All'inizio ho pensato che TDS rallentasse deliberatamente MT5, così ho pulito la sua memoria. Ho anche pulito le cartelle di base (stavo finendo lo spazio su disco). Dopo di che MT5 era due ordini di grandezza più veloce per una singola corsa (i riavvii non aiutavano prima). L'ipotesi sui blocchi TDS non ha potuto essere confermata, tuttavia ci ho provato. Non ho avuto nessun antivirus sul mio computer.

Il server Alpari-MT5 è reale.


ZZY ha eseguito MT4-optimizer in piena esecuzione - 14 minuti. MT5 (solo un agente rimasto) - sembra che ci vorranno molte ore. Pubblicherò il totale in mattinata/pomeriggio.

 

Da dove vengono gli slittamenti?

Tu hai in mente qualcosa di completamente diverso. Giocate con il campo Delay nel tester MT5 e vedrete che è tutta un'altra cosa. Anche il solito Sleep(2500) nel codice MQL5, quando viene eseguito nel tester, darà un ritardo nel codice quando tutto il mondo continua a simulare. Il campo del ritardo di esecuzione mostra effettivamente come le compravendite verranno eseguite se ci mettete il vostro ping di 100ms al server.

Non può esserci un ordine di grandezza di ritardo. E perché ci dovrebbero essere degli add-on per MT5 quando funziona bene da solo.

Riguardo all'overshooting - non ci sono impostazioni e limiti.
 

A proposito della mancanza di antivirus - da molto tempo ormai, tutte le versioni a partire dalla 7 hanno un Windows Defender interno e poco appariscente, che fa un buon lavoro di scansione di tutti i file.

A volte genera notevoli ritardi nelle operazioni sui file anche su dischi SSD.

 

Overkill (100.000 dollari all'inizio)


Scivola in MT4 (i millisecondi nella storia dei tick funzionano come dovrebbero) e altre chicche


 
Renat Fatkhullin:

A proposito della mancanza di antivirus - da molto tempo ormai, tutte le versioni dalla 7 hanno un Windows Defender interno e poco appariscente, che scansiona tutti i file.

Disabile. Ho già tutti i dati per vedere forti rallentamenti di MT5 sull'ottimizzazione. Pubblicherò i risultati dell'ottimizzazione comparativa quando MT5 sarà finito.
 
Non capisco l'idea dei duplicati

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

Bug, bug, domande

fxsaber, 2017.05.07 21:55

Server di trading Alpari-MT5

Perché ci sono tick duplicati (bid e ask sono uguali) nella storia dei tick del FOREX?

Il tester sta gareggiando con gli EA sui duplicati e ce ne sono la metà. È necessario ottenere l'appropriato calo di prestazioni della metà?

 

Continui a non capire gli slittamenti di cui sto parlando. Non funziona in MT4 per una questione di principio.

Non in tick, ma nel processo del programma mcl5, quando si ferma e i tick continuano ad andare e il mondo gira. Scrivete Sleep(3000) e il programma aspetterà per 3 secondi e durante questo tempo i tick ticchettano, il mercato sta simulando.

Se impostate il campo Execution Delay a 200ms nel tester, verrà simulata una latenza netta di 200 durante l'esecuzione delle compravendite, che darà uno slippage di mercato o requotes.

Questo è tutto un altro potente livello di modellazione dei processi di mercato, e all'interno di un sistema multi-valuta. E, cosa più importante, in un processo alienato a distanza. Per esempio, un agente di 10.000 km riceve improvvisamente una richiesta dinamica di accesso a simboli mancanti dal codice quando esegue un compito ed è in grado di richiedere questi dati dal master, incorporarli nel mondo del mercato e continuare a farli girare.

 
Renat Fatkhullin:

Continui a non capire gli slittamenti di cui sto parlando. Non funziona in MT4 per una questione di principio.

Non in tick, ma nel processo del programma mcl5, quando si ferma e i tick continuano a girare e il mondo gira. Scrivete Sleep(3000) e il programma aspetterà per 3 secondi e in quel tempo i tick ticchettano, il mercato sta simulando.

Questo non funziona ora in MT4.

Se impostate il campo Execution Delay a 200ms nel tester, esso simulerà una latenza netta di 200 durante l'esecuzione delle compravendite, che darà uno slippage di mercato o dei requotes.

Questo funziona ora in MT4.

Si tratta di un altro potente livello di modellazione dei processi di mercato, e all'interno di un sistema multi-valuta. E, cosa più importante, in un processo alienato a distanza. Per esempio, un agente di 10.000 km riceve improvvisamente una richiesta dinamica di accesso a simboli mancanti dal codice quando esegue un compito ed è in grado di richiedere questi dati dal master, incorporarli nel mondo del mercato e continuare a farli girare.

Non voglio denigrare la MT5. Sto solo facendo un confronto riproducibile. Naturalmente, il tester MT5 è irraggiungibile da alcuni parametri, ma il tester MT4 è in grado di dare le cose, che non sono presenti nella MT5, ma che sono davvero necessarie. Abbiamo visto che un test accurato su tick reali personalizzati su MT4 è vero al 100%. Bene, e la regolazione di tutti i tipi di impostazioni (commissioni, rientri, regole di attivazione degli ordini pendenti, ecc. In generale, ci sono cose che non sono ancora implementate in MT5.
Motivazione: