MT4-Tester VS MT5-Tester - Seite 3

 
fxsaber:
Proof

Dies ist kein Beweis.

Sie irren sich.

Ich bleibe bei meiner Behauptung, dass der besagte Experte lediglich den Zugang zur Transaktionshistorie testet.
 
Renat Fatkhullin:

Dies ist kein Beweis.

Sie irren sich.

Was ist Ihr Fehler? Ich habe mich sogar selbst überprüft, indem ich überall dort, wo es eine History-Funktion gibt, BreakPoints gesetzt und CTRL+F5 zum Debuggen ausgeführt habe. Alles hat reibungslos funktioniert.
Renat Fatkhullin:
Ich bleibe bei meiner Behauptung, dass der besagte Experte nur den Zugriff auf die Geschichte der Transaktionen prüft.

Sie haben voreilige Schlüsse gezogen.

 

Ich bin mir nicht sicher, ob solche Vergleiche sinnvoll sind - das Cloud Computing macht alle Geschwindigkeitsvorteile des MT4-Testers zunichte.

Außerdem testet der EA in diesem Fall tatsächlich nur die Geschwindigkeit des Datenzugriffs. Aber ich glaube nicht, dass dies für die meisten EAs ein Flaschenhals ist.

Nach der Einführung von Konten mit Hedging-Positionen im MT5 - sehe ich persönlich für mich keine Vorteile mehr im MT4. Ich verwende plattformübergreifende Bibliotheken nur, weil ich MT4 auf meinen echten Konten habe.

Das einzige, was ich persönlich vermisse, sind Zeiger oder Array-Referenzen. Aus irgendeinem Grund brauche ich keine Daten in Indikatoren zu kopieren. MQL5 hat alles andere.

Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 
fxsaber:
Sie haben voreilige Schlüsse gezogen.
Was gibt es sonst noch? Abfrage von Daten und Ablage in einer Datei. Es gibt keine anderen Aktionen - was denken Sie, was dieser EA testet?
 
fxsaber:

ZS Nicht alle Läufe passten perfekt zusammen. Einer der drei lügt also definitiv (MT4+TDS, MT5, MT4Orders). Wir werden danach suchen müssen.

Dank des Sub wurde der Schuldige gefunden, das passiert immer, wenn es eine Möglichkeit zum Vergleich gibt.

Expert Advisor zeigt den Fehler an

// MQL4&5-code

#property strict

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

#define  PRINT(A) Print(#A + " = " + (string)(A));

void OnTick()
{
  static bool FirstRun = true;
  
  static const double PrevBid = Bid;
  static const double PrevAsk = Ask;
  
  if (FirstRun)
  {
    PRINT((PrevBid != Bid) || (PrevAsk != Ask))
    
    FirstRun = false;
  }
}


MT4

2017.05.08 10:57:33.056 2017.04.10 00:00:08  TDS_Test EURUSD,M1: (PrevBid!=Bid)||(PrevAsk!=Ask) = false


MT5

2017.05.08 11:01:31.266 2017.04.10 00:00:08   (PrevBid!=Bid)||(PrevAsk!=Ask) = true
 
George Merts:
Was gibt es sonst noch? Die Datenabfrage und Speicherung in einer Datei. Es gibt keine anderen Vorgänge - was genau testet dieser EA?
Ich schlage vor, dass Sie die gesamte Diskussion lesen, dann werden sich solche Fragen gar nicht erst stellen.
George Merts:

Nach der Einführung von Konten mit Hedging-Positionen in MT5 sehe ich persönlich keinen einzigen Vorteil von MT4.

Dieser Thread zeichnet sich durch eine gewisse Konzentration von konstruktiven Inhalten aus. Persönliche Vorlieben sollten also besser hier besprochen werden, zum Beispiel.

 
fxsaber:
Wo liegt der Fehler? Ich habe es sogar selbst überprüft, überall dort BreakPoints gesetzt, wo es History-Funktionen gibt, und das Debugging mit CTRL+F5 ausgeführt. Es hat alles reibungslos funktioniert.

Sie haben voreilige Schlüsse gezogen.

Alles in allem:

  1. die Arbeit mit der Geschichte ist in vollem Gange, die Geschäfte werden nach dem Scannen der Geschichte geschlossen
  2. verwenden MT4Orders.mqh - dies ist ein Ende der Reinheit des Experiments. monströse Bibliothek mit einem Overhead, geschrieben ekelhaft und unlesbar. jemand hat schwer ihre Faulheit demonstriert
  3. for(i=200 000; i>=0; i--) OrderSelect bei jedem Tick zu schreiben, ist nichts als Wahnsinn und ein Versuch, den Witz über japanische Sägen und russische Männer ausschließlich zu wiederholen
       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);
    
  4. der gesamte Test wurde nur um des Zyklus von Punkt 3 willen geschrieben

    Im Test nehmen wir etwa 1 800 000 Ticks an, wobei 200 000 Geschäfte in 5 Tagen eröffnet werden. Vereinfachen wir es auf 900 000 Ticks, wobei 100 000 Aufträge in der Historie gescannt werden und wir 900 000 000 * 100 000 = 900 000 000 000 000 OrderSelect-Aufrufe erhalten (mit Überlauf aus der Bibliothek). Es sind genau 900 Milliarden OrderSelect-Aufrufe, die getestet werden.

    Und davon sind 99,99 % der Anrufe absolut unnötig und wurden nur gemacht, um "Verzögerungen" zu demonstrieren.


Wenn Sie einen sauberen Test durchführen wollen, schreiben Sie zwei identische saubere Beispiele ohne Bibliotheken. Dies garantiert, dass sie sauber sind und kein Overhead aus Kompatibilitätsgründen eingebaut wird.

Wir haben den Zugriff auf die Historie optimiert und diese Demo komplett ausgehebelt. Er wurde absichtlich so geschrieben.

 
Renat Fatkhullin:

Alles in allem:

  1. Die Geschichtsarbeit ist in vollem Gange, die Geschäfte werden nach dem Geschichtsscan geschlossen
Wo?
  1. MT4Orders.mqh zu verwenden, bedeutet, die Reinheit des Experiments zu beenden. Dies ist eine schreckliche Bibliothek mit Overhead, die auf eine ekelhafte und unleserliche Weise geschrieben wurde.
Das war ich.
  1. for(i=200 000; i>=0; i--) OrderSelect bei jedem Tick zu schreiben, ist nichts als Wahnsinn und ein Versuch, den Witz über japanische Sägen und russische Männer ausschließlich zu wiederholen
Sie haben MQL4 völlig vergessen. Hier gibt es keinen Bezug zur Geschichte.
  1. der ganze Test wurde nur wegen der Schleife von Punkt 3 geschrieben

    99,99 % der Herausforderungen sind völlig unnötig und wurden nur gemacht, um die "Bremsen" zu demonstrieren.
Das Beispiel wurde nicht erfunden, in der Quelle findet sich ein Link zum Original. Dies ist einer der bekanntesten und ältesten Scalper.

Wenn Sie einen sauberen Test durchführen wollen, schreiben Sie zwei identische saubere Beispiele ohne Bibliotheken. Auf diese Weise ist Sauberkeit garantiert und es wird kein Overhead aus Kompatibilitätsgründen eingebaut.

Ich möchte die beiden Testpersonen vergleichen können. Hier finden Sie die Vor- und Nachteile der einzelnen Angebote. Auch der Vergleich ist eine der effektivsten Methoden zur Identifizierung von Fehlern.

Der Thread beginnt mit dem Nachweis der Identität der Rohdaten der beiden Tester. Dies ist die Grundlage, ohne die wir nichts tun können. Dann kann jeder einen Expert Advisor für den Test auswählen.

Wir haben den Zugriff auf die Geschichte optimiert und diesen Nachweis vollständig negiert. Er wurde absichtlich so geschrieben.

Dank der Bewerbung eines anderenhat der SDes so gemacht. Konstruktive Kritik ist eine gute Sache.
 

Die Arbeit mit der Historie ist OrderSelect und ähnliche OrderXXXX-Befehle. Tun Sie nicht so, als würden Sie das nicht verstehen. Vor allem, wenn Sie die Bibliothek geschrieben haben.

Ich habe MQL4 nicht vergessen, und es funktioniert auch dort mit der Historie.

Einen History-Scanner für 200 000 Trades tief in jeden Tick schreiben und die Bedingung eines vernünftigen Ausstiegs aus der Schleife vergessen? Das nennt man - absichtlich die russischen Männer spielen.

Und verweisen Sie nicht auf irgendwelche Händler. Die Schleife wurde absichtlich so dumm geschrieben. Und selbst in den 5 Tagen des Tests wurden nur Hunderte von Milliarden von OrderXXX-Funktionen getestet, von denen 99,99 % nicht aufgerufen werden mussten.


Das Problem ist, dass Sie mit der absolut zutreffenden Aussage "Das gesamte Expert Advisor-Beispiel ist so geschrieben, dass es nur eine Sache tut - es scannt die gesamte Historie der Trades bei jedem Tick" zu argumentieren begonnen haben, obwohl Sie sehr wohl wussten, warum Sie den Test absichtlich so geschrieben haben. Schließlich könnten Sie 99,99 % des dummen Scans mit einer Handbewegung entfernen, aber dann würde der Test fehlschlagen.
 
Renat Fatkhullin:

Die Arbeit mit der Historie ist OrderSelect und ähnliche OrderXXXX-Befehle. Tun Sie nicht so, als würden Sie es nicht verstehen. Vor allem, wenn Sie die Bibliothek geschrieben haben.

Ich habe MQL4 nicht vergessen, und es funktioniert auch dort mit der Historie.

Einen History-Scanner für 200 000 Trades tief in jeden Tick schreiben und die Bedingung eines vernünftigen Ausstiegs aus der Schleife vergessen? Das nennt man - absichtlich die russischen Männer spielen.

Und verweisen Sie nicht auf irgendwelche Schwarzhändler. Die Schleife wurde mit Absicht geschrieben. Und selbst innerhalb von 5 Tagen nach dem Test wurden nur Hunderte von Milliarden OrderXXXXX-Funktionen getestet, von denen 99,99 % nicht aufgerufen werden mussten.

Ich werde nicht widersprechen. Ich bitte die Forumsnutzer, die mit MQL4 vertraut sind, diesen kurzen Quellcode zu überprüfen und zu erklären, was Renat bedeutet.

Forum für Handel, automatisierte Handelssysteme und Strategietests

MT4-Tester VS MT5-Tester

fxsaber, 2017.05.08 01:11

EA

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

Ich muss mich irren, aber ich kann nicht erkennen, wohin die Arbeit mit der Historie im MT4 führt. Bitte um Hilfe.