MT4-Tester VS MT5-Tester

 
Ich habe endlich eine alte Idee verwirklicht

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Diskussion über "Vorgefertigte EAs von MQL5 Wizard funktionieren in MetaTrader 4"

fxsaber, 2017.03.09 13:02

Ich schlage vor, Tick Data Suite zu testen (Kompatibel: MT4 build 940 - 1052), um zu vergleichen.

Wählen Sie im MT5-Tester den Modus "nach echten Ticks". Speichern Sie sie und geben Sie sie über TDS an den MT4-Tester weiter.

Dann werden die Kurse in beiden Testern zu 100 % übereinstimmen, so dass sie nicht nur in Bezug auf den Handel, sondern auch auf die Geschwindigkeit verglichen werden können.

Es wäre dann möglich, die Umwandlung/Erstellung von EAs in beide Richtungen zu vergleichen.

MT4 build 1072, MT5 build 1596 Handelsserver Alpari-MT5.

MT4-Tester-Einstellungen auf dem Bildschirmfoto

Die Währung in beiden Testern ist USD. Dies ermöglicht in der gleichen MT5-Tester für EURUSD nicht zu einem anderen Tick der Umwandlung Symbol ziehen.


Jetzt führen wir den folgenden plattformübergreifenden Expert Advisor in beiden Testern aus

// 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);
}


MT4-Tester-Protokoll

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)


MT5-Tester-Protokoll

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).

Wir bestätigen, dass die von den einzelnen Testern erhaltenen Dateien identisch sind - die Häkchen der Tester stimmen überein.


Zu diesem Zeitpunkt ist die Vorbereitung der beiden Prüfer auf den neuen Dienst abgeschlossen.

 

Expert Advisor

// 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); 
}


Die Ergebnisse


MT4-Bericht

Strategy Tester Report
Glücklich
MetaQuotes-Demo (Build 1072)

SymbolEURUSD (Euro gegenüber US Dollar)
Zeitraum1 Minute (M1) 2017.04.10 00:00 - 2017.04.14 20:58 (2017.04.10 - 2017.04.16)
ModellAlle Ticks (genaueste Methode auf der Grundlage aller kleinsten verfügbaren Zeitrahmen)
ParameterShift=3; Limit=18; Lots=0.1;
Bars in der Geschichte7292Modellierte Zecken1865515Qualität der Modellierung99.00%
Diagrammabweichungsfehler0
Ersteinlage100000.00VerbreitungVariabel
Reingewinn-10863.90Gesamtgewinn2528.70Totalverlust-13392.60
Rentabilität0.19Erwartete Auszahlung-0.49
Absolute Absenkung10864.70Maximale Absenkung10864.70 (10.86%)Relative Absenkung10.86% (10864.70)
Handel insgesamt21954Short-Positionen (% Gewinn)12016 (68.60%)Long-Positionen (% Gewinn)9938 (67.03%)
Gewinnbringende Geschäfte (% von allen)14904 (67.89%)Verlustgeschäfte (% von allen)7050 (32.11%)
Größteertragreicher Handel3.00Verlustgeschäft-4.40
Durchschnittprofitables Geschäft0.17Verlustgeschäft-1.90
Maximale Anzahlkontinuierliche Gewinne (Gewinn)155 (46.60)Kontinuierliche Verluste (Verlust)115 (-210.10)
Max.kontinuierliche Gewinne (Anzahl der Siege)46.60 (155)Dauerverlust (Anzahl der Verluste)-210.10 (115)
Durchschnittlaufende Gewinne5Dauerschaden2


MT5 Bericht

Strategie-Tester-Bericht
Alpari-MT5 (Build 1596)
Einstellungen
Sachverständiger Berater:Glücklich
Symbol:EURUSD
Zeitraum:M1 (2017.04.10 - 2017.04.16)
Parameter:Verschiebung=3
Grenze=18
Lose=0,1
Makler:Alpari International GmbH
Währung:USD
Erste Einzahlung:100 000.00
Hebelwirkung:1:100
Backtest
Qualität der Geschichte:k.A.
Bars:7192Tiki:1865415Zeichen:1
Reingewinn:-10 863.90Absolute Inanspruchnahme der Bilanz:10 863.90Absolute Inanspruchnahme der Mittel:10 864.70
Gesamtgewinn:2 528.70Maximale Inanspruchnahme des Saldos:10 863.90 (10.86%)Maximale Inanspruchnahme der Mittel:10 864.70 (10.86%)
Totalverlust:-13 392.60Relative Inanspruchnahme der Bilanz:10.86% (10 863.90)Relative Inanspruchnahme der Mittel:10.86% (10 864.70)
Rentabilität:0.19Erwartete Auszahlung:-0.49Höhe der Marge:863.58%
Erholungsfaktor:-1.00Sharpe Ratio:-0.50Z-Score:-52.22 (99.74%)
AHPR:1.0000 (-0.00%)LR-Korrelation:-1.00OnTester Ergebnis:0
GHPR:1.0000 (-0.00%)LR Standardfehler:149.82
Gesamter Handel:21954Short Trades (% der Gewinner):12016 (68.60%)Long Trades (% Gewinne):9938 (67.03%)
Gesamter Handel:43908Gewinnbringende Abschlüsse (% aller Abschlüsse):14904 (67.89%)Verlustgeschäfte (% aller Geschäfte)7050 (32.11%)
Größter profitabler Handel3.00Größter Verlusthandel-4.40
Durchschnittlich profitabler Handel:0.17Durchschnittlicher Verlusthandel:-1.90
Maximale Anzahl von aufeinanderfolgenden Gewinnen (Gewinn):155 (46.60)Maximale Anzahl von kontinuierlichen Verlusten (Verlust):115 (-210.10)
Max. kontinuierliche Gewinne (Anzahl der Gewinne):46.60 (155)Max. Dauerverlust (Anzahl der Verluste):-210.10 (115)
Durchschnittliche Dauergewinne:5Durchschnittliche kontinuierliche Verluste:2


Das Ergebnis ist eine Übereinstimmung!


Leistung

MT4-Protokoll
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-Protokoll

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 hat es geschafft, 3 Mal schneller zu sein als MT5-Tester. Wenn Zweifel bestehen, dass das MT5-Logging durch die Verwendung einer Bibliothek eines Drittanbieters verursacht wird, kann derjenige, der möchte, die einfache MT4-Logik dieses Expert Advisors in MQL5 auf seine eigene Weise neu schreiben und die Hypothese überprüfen.


HZ arbeitete der MT5-Tester viel langsamer, bis ich alle Basisordner von Hand bereinigte. Die Ergebnisse werden unter Berücksichtigung dieser Tatsache angegeben.

 

Auf dem Alpari-MT5-Demo-Server in der neuen Version (die in einer Woche veröffentlicht werden soll) mit schnellem Zugriff auf die Geschäftshistorie ist mir das gelungen:

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

MT5 hat einen System-Overhead für die Übertragung von Daten und der Aufgabe selbst an einen externen Agentenprozess, der bei kleinen (sekundenlangen) Aufgaben einen großen Fehler im Vergleich einführt.

Und die Komplexität und Qualität des Testers in MT5 ist viel höher: synchrone Modellierung vieler Instrumente mit Millisekunden-Genauigkeit, echte Slips/Verzögerungen beim Scrollen von Weltveränderungen und eine Menge weiterer kleinerer Funktionen. Es ist nicht so, dass es eine for-Schleife gibt.


Um Größenordnungen langsamer - sind Sie nicht mit der Initialisierung/Synchronisierung und dem Hochladen aller Daten verwirrt? Alles wird in Protokollen festgehalten. Die Dateien auf dem Datenträger sollten auf keinen Fall berührt werden.

Ich empfehle, das Verzeichnis %userdata%\MetaQuotes (z. B. C:\Users\%Benutzername%\AppData\Roaming\MetaQuotes) in den Antivirenpass zu legen. Hier befinden sich die Daten, und durch das Hinzufügen des Virenschutzes zum Pass wird die Zugriffsgeschwindigkeit auf die Daten des Terminals und des Testers erheblich verbessert.

Andernfalls geraten sie in helle Aufregung, wenn sie sehen, dass metatester[64].exe läuft, einen Netzwerkport öffnet und eine Menge großer Dateien, die von Terminal und Tester geschrieben wurden, enthält. Bei manchen Händlern fällt der Tester sogar aus, weil das Antivirenprogramm keine Zeit hat, die Datei metatester[64].exe auch nur in ein paar Sekunden zu überprüfen, und das Terminal nicht auf sie zugreifen kann.

 
Renat Fatkhullin:

Die Komplexität und Qualität des Testers im MT5 ist um eine Größenordnung höher: synchrone Modellierung mehrerer Instrumente mit Millisekundengenauigkeit, ehrliche Slips/Verzögerungen beim Scrollen durch Weltveränderungen und eine Reihe kleinerer Funktionen.

Das ist auch im MT4+TDS-Paket enthalten. Plus einige weitere Funktionen, die dem MT5 fehlen... Aber natürlich gibt es keine Mehrwährungsfähigkeit.

Um Größenordnungen langsamer.

Zuerst dachte ich, dass TDS MT5 absichtlich verlangsamt, also habe ich seinen Speicher bereinigt. Ich habe auch die Basis-Ordner gelöscht (mir ging der Speicherplatz aus). Danach war MT5 bei einem einzigen Durchlauf um zwei Größenordnungen schneller (Neustarts halfen vorher nicht). Die Hypothese über TDS-Blöcke konnte nicht bestätigt werden, obwohl ich es versucht habe. Ich habe keine Antivirenprogramme auf meinem Computer installiert.

Der Alpari-MT5-Server ist echt.


ZZY führte MT4-optimizer bei voller Ausführung aus - 14 Minuten. MT5 (nur noch ein Agent) - es wird wohl noch viele Stunden dauern. Ich werde die Gesamtzahl am Morgen/Nachmittag bekannt geben.

 

Woher stammen die Zettel?

Sie haben etwas ganz anderes im Sinn. Spielen Sie mit dem Feld Delay im MT5-Tester und Sie werden sehen, dass es etwas ganz anderes ist. Selbst das übliche Sleep(2500) im MQL5-Code führt bei der Ausführung im Tester zu einer Verzögerung im Code, wenn die ganze Welt weiter simuliert. Das Feld für die Ausführungsverzögerung zeigt an, wie der Handel ausgeführt wird, wenn Sie dort Ihren 100-ms-Ping zum Server eingeben.

Es kann keine Verzögerung um eine Größenordnung geben. Und warum sollte es Add-ons für MT5 geben, wenn es auch ohne diese funktioniert?

Zum Thema Überschreitung: Es gibt keine Einstellungen und keine Grenzwerte.
 

Was das Fehlen eines Antivirenprogramms betrifft, so verfügen alle Versionen seit Version 7 seit langem über einen internen und unauffälligen Windows Defender, der alle Dateien gut überprüft.

Manchmal kommt es sogar auf SSD-Festplatten zu spürbaren Verzögerungen bei Dateioperationen.

 

Overkill (100.000 USD zu Beginn)


Ausrutscher in MT4 (die Millisekunden in der Tick-Historie funktionieren wie sie sollen) und andere Goodies


 
Renat Fatkhullin:

Was das Fehlen eines Virenschutzes betrifft, so verfügen alle Versionen ab 7 seit langem über einen hauseigenen und unauffälligen Windows Defender, der alle Dateien scannt.

Behinderte. Haben bereits alle Daten zu sehen, starke MT5 Verlangsamungen auf die Optimierung. Ich werde vergleichende Optimierungsergebnisse veröffentlichen, wenn MT5 fertig ist.
 
Ich verstehe die Idee der Duplikate nicht

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2017.05.07 21:55

Alpari-MT5 Handelsserver

Warum gibt es doppelte Ticks (Geld- und Briefkurs sind gleich) in der FOREX-Tick-Historie?

Der Tester macht ein Rennen mit EAs auf Duplikaten und es gibt die Hälfte davon. Ist es notwendig, die entsprechende Leistung um die Hälfte zu reduzieren?

 

Sie haben immer noch nicht verstanden, von welchen Zetteln ich spreche. In MT4 funktioniert das prinzipiell nicht.

Nicht in Ticks, sondern im Prozess des mcl5-Programms, wenn es aufhört und die Ticks weiterlaufen und die Welt sich dreht. Schreiben Sie Sleep(3000) und das Programm wird 3 Sekunden lang warten. Während dieser Zeit werden die Ticks ticken, der Markt wird simuliert.

Wenn Sie das Feld Ausführungsverzögerung im Tester auf 200ms setzen, wird eine Nettolatenz von 200 bei der Ausführung von Geschäften simuliert, was entweder zu Marktslippage oder Requotes führt.

Dies ist eine ganz andere Ebene der Modellierung von Marktprozessen, und zwar in einem System mit mehreren Währungen. Und, was noch wichtiger ist, in einem entfremdeten Prozess. Beispielsweise erhält ein 10.000-km-Agent bei der Ausführung einer Aufgabe plötzlich eine dynamische Anfrage für den Zugriff auf fehlende Symbole aus dem Code und ist in der Lage, diese Daten vom Master anzufordern, sie in die Marktwelt einzubetten und weiter zu spinnen.

 
Renat Fatkhullin:

Sie haben immer noch nicht verstanden, von welchen Zetteln ich spreche. In MT4 funktioniert das prinzipiell nicht.

Nicht in Ticks, sondern im Prozess des mcl5-Programms, wenn es aufhört und die Ticks weiterlaufen und die Welt sich dreht. Schreiben Sie Sleep(3000) und das Programm wird 3 Sekunden lang warten und in dieser Zeit werden die Ticks ticken, der Markt wird simuliert werden.

In MT4 funktioniert das nicht mehr.

Wenn Sie das Feld Ausführungsverzögerung im Tester auf 200 ms einstellen, wird bei der Ausführung von Geschäften eine Nettolatenz von 200 simuliert, was entweder zu Marktslippage oder zu Requotes führen wird.

Dies funktioniert jetzt in MT4.

Das ist eine ganz andere Ebene der Modellierung von Marktprozessen, und zwar in einem System mit mehreren Währungen. Und, was noch wichtiger ist, in einem entfremdeten Prozess. Beispielsweise erhält ein 10.000-km-Agent bei der Ausführung einer Aufgabe plötzlich eine dynamische Anfrage für den Zugriff auf fehlende Symbole aus dem Code und ist in der Lage, diese Daten vom Master anzufordern, sie in die Marktwelt einzubetten und weiter zu spinnen.

Ich habe nicht die Absicht, den MT5 zu verunglimpfen. Ich mache nur einen reproduzierbaren Vergleich. Natürlich ist der MT5-Tester bei einigen Parametern unerreichbar, aber der MT4-Tester ist nun in der Lage, die Dinge zu geben, die im MT5 nicht vorhanden sind, aber die wirklich gefragt sind. Wir haben gesehen, dass ein genauer Test auf realen benutzerdefinierten Ticks auf MT4 100% wahr ist. Nun, und die Regulierung aller Arten von Einstellungen (Kommission, Einzüge, Regeln für die Aktivierung von schwebenden Aufträgen usw.) des Testers ist vorhanden. Generell gibt es Dinge, die im MT5 noch nicht implementiert sind.