Die neue MetaTrader 5 Plattform Build 2615: Grundlegende Analyse und komplexe Kriterien im Strategietester

 

Die aktualisierte Version der MetaTrader 5 Plattform wird am 17. September 2020 veröffentlicht. Die neue Version realisiert folgende Änderungen:

  1. Terminal: Erweiterte Möglichkeiten für eine Fundamentalanalyse.

    Neue Handelsinstrument-Eigenschaften hinzugefügt, die eine genauere Kategorisierung der Symbole ermöglichen:

    • Sektor — der Wirtschaftssektor, zu dem der Vermögenswert gehört, wie z.B. Energie, Finanzen, Gesundheitswesen und andere.
    • Industrie — der Industriezweig, zu dem der Vermögenswert gehört, wie z.B. Sportbekleidung, Zubehör, Automobilherstellung, Gaststättengewerbe und andere.
    • Land — das Land des Unternehmens, dessen Aktien an der Börse gehandelt werden.

    Basierend auf diesen Eigenschaften wurde in Market Watch ein separates System implementiert, das effiziente Operationen mit Symbolen ermöglicht. Wählen Sie eine Kategorie aus dem Menü aus, und alle verfügbaren Instrumente werden einer Liste für eine eingehende Analyse hinzugefügt:



    Relevante Eigenschaften wurden den Vertragsspezifikationen hinzugefügt:



    Zudem können Fundamentaldaten zu Handelssymbolen nun direkt von der Plattform aus geöffnet werden. Links zu den größten Aggregatoren wurden dem Kontextmenü von Market Watch hinzugefügt:



    Die Verfügbarkeit von erweiterten Daten wird vom Broker kontrolliert. Wir haben jedoch die Standardverfügbarkeit der erweiterten Informationen für die maximale Anzahl von Instrumenten sichergestellt. Sobald die Broker ihre Server auf die neue Version aktualisieren, erscheinen die entsprechenden Länder-, Branchen- und Industriedaten in Ihren Plattformen.
  2. Terminal: Verbesserte Darstellung der Signale und des Marktes. Die Schaltflächen für Miete und Abonnement wurden auf der linken Seite hinzugefügt:

    <



    Weitere Verbesserungen betreffen die Bereichsgestaltung. Dazu gehören hellere Tastenfarben, größere MQL5-Anmeldeschaltflächen und andere Verbesserungen.

  3. Terminal: Die potentiellen Gewinn-/Verlustberechnung für Stop-Loss- und Take-Profit-Chartebenen wurden korrigiert.



  4. Terminal: Fehler bei der Berechnung von synthetische Instrumente behoben. Die Fehler konnten gelegentlich zu einem Einfrieren der Plattform beim Start führen.
  5. Terminal: Die Darstellung der Werte des integrierten Fraktalindikators im Datenfenster wurde korrigiert.
  6. Terminal: Alle Icons in den Symbolleisten der Plattform wurden aktualisiert, um HiDPI-Monitore zu unterstützen.
  7. Terminal: Positionsvolumenanpassung für kopierte Handelssignale wurde korrigiert. Der Anpassungsvorgang konnte manchmal aufgrund falsch angewandter Stopp-Level fehlschlagen, was den Fehler "ungültige Stopps" verursachte.
  8. Terminal: Optimierte Neuerstellung der Kurshistorie nach relevanten Änderungen auf dem Server.
  9. Terminal: Korrektur der Darstellung von Tooltips auf Handelsebene in Charts. In einigen Fällen wurden Tooltips in Charts angezeigt, auch wenn die Anzeige der Handelsebenen deaktiviert war.
  10. Terminal: Korrektur der Option "Auf Charts anzeigen \ Automatisches Update" im Kontextmenü von Orders und Positionen im Abschnitt "Werkzeuge\Handel". Wenn diese Option jetzt nicht angekreuzt ist, wird die Anzeige der Handelshistorie für alle offenen Charts deaktiviert.
  11. MQL5: Die Funktion MathClassify wurde hinzugefügt. Sie bestimmt den Typ einer reellen Zahl und gibt ein Ergebnis als Wert aus der neuen Enumeration ENUM_FP_CLASS zurück.
    ENUM_FP_CLASS  MathClassify(
       double  value      // reelle Zahl
       );
    Die Enumeration verfügt über folgende Werte:

    • FP_SUBNORMAL — eine anormale Zahl, die näher Null ist, als die kleinst mögliche normale Zahl DBL_MIN 2.2250738585072014e-308
    • FP_NORMAL — ein normale Zahl im Bereich von 2.2250738585072014e-308 bis 1.7976931348623158e+308
    • FP_ZERO — eine positive oder negative Null
    • FP_INFINITE — eine Zahl, die nicht durch einen entsprechenden Typ dargestellt werden kann, Minus- oder Plus-Unendlich
    • FP_NAN — keine Zahl

    Verwenden Sie Folgendes, um die Gültigkeit einer Zahl zu prüfen:
    if(MathClassify(value)>FP_ZERO)
      {
       Print("Der Wert ist keine gültige Zahle");
      }
  12. MQL5: Es wurden Symboleigenschaften hinzugefügt, die mit den Funktionen SymbolInfoString abgefragt werden können:

    • SYMBOL_COUNTRY — das Land des Unternehmens, dessen Aktien an der Börse gehandelt werden.
    • SYMBOL_SECTOR_NAME — der Wirtschaftssektor, zu dem der Vermögenswert gehört, wie z.B. Energie, Finanzen, Gesundheitswesen und andere.
    • SYMBOL_INDUSTRY_NAME — die Industrie, zu der der Vermögenswert gehört, wie z.B. Sportbekleidung, Zubehör, Automobilherstellung, Gaststättengewerbe und andere.

    Die Eigenschaften werden in Textform zurückgegeben.

    Der Sektor und die Branche, zu der das Handelsinstrument gehört, kann als Wert einer Enumeration ermittelt werden. Dazu können die folgenden Eigenschaften mit der Funktion SymbolInfoInteger abgefragt werden:

    • SYMBOL_SECTOR
    • SYMBOL_INDUSTRY

    Für die Arbeit mit diesen Eigenschaften wurden die Enumerationen ENUM_SYMBOL_SECTOR und ENUM_SYMBOL_INDUSTRY hinzugefügt.

  13. MQL5: Ein neuer Speicherverwaltungsmechanismus wurde in MQL5-Programme implementiert. Er ermöglicht eine bis zu 3-mal schnellere Speicherzuweisung und vermeidet potenzielle Speicherzugriffsfehler.
  14. MQL5: Optimierte und beschleunigte Operationen mit der Konto-Tick-Historie über die Funktionen Historie*.
  15. MQL5: Der Aufruf von WebRequest von der Funktion OnDeinit wurde korrigiert. In früheren Versionen konnte der Funktionsaufruf nicht implementiert werden, wenn ein Expert Advisor angehalten worden war.
  16. MQL5: Die Funktionsaufrufe von WebRequest von den Diensten wurde korrigiert. In früheren Versionen konnte ein Funktionsaufruf nach einem Neustart des Dienstes fehlschlagen.
  17. MQL5: Prüfung auf Unterstützung für Werte vom Typ double auf einem Gerät bei Verwendung von OpenCL hinzugefügt. Der Typ float kann aufgrund übermäßiger Rundung nicht in Finanzberechnungen verwendet werden. Daher verlangt die Plattform explizit eine Unterstützung von 'doubles' für die Berechnungen. Wenn der Typ double nicht unterstützt wird, wird eine entsprechende Meldung in das Plattformprotokoll geschrieben: Gerät '<name>' unterstützt den Typ 'double' nicht. Früher wurde in solchen Fällen nur eine allgemeine Fehlermeldung angezeigt.
  18. MQL5: Erheblich beschleunigte Ausführung der Funktion AccountInfoDouble mit den Parametern ACCOUNT_EQUITY und ACCOUNT_BALANCE.
  19. MQL5: Korrigiert wurde die Anwendung von Vorlagen auf ein Chart durch die Funktion ChartApplyTemplate.
  20. MQL5: Korrigiert wurde der Funktionsaufruf ChartSetInteger mit dem Parameter CHART_BRING_TO_TOP.
  21. MQL5: Der integrierten Bibliothek Alglib wurde eine neue Methode Conjugate hinzugefügt. Diese Methode ermöglicht die konjugierte Zahlenberechnung für komplexe Zahlen. Die Bibliothek befindet sich in MQL5\Include\Math\Alglib.
  22. MQL5: Vollständig überarbeitet wurde der Code-Profiler. Der neue Profiler arbeitet mit einer höheren Genauigkeit und mit einer höheren Geschwindigkeit.

    • Die Analyse basiert jetzt auf dem Code, der ähnlich wie bei der Kompilierung der Release-Version eines Programms optimiert wird. Dies ermöglicht eine genauere Bestimmung der Code-Ausführungsgeschwindigkeit, da während der Programmausführung exakt derselbe Code verwendet wird.
    • Der neue Profiler verwendet die Profiling-Methode "Sampling". Diese leichtgewichtige und genaue Methode sammelt Statistiken zur Anwendungsleistung, indem sie Daten zum Aufrufstapel sammelt und die Leistung in regelmäßigen Abständen berechnet.
    • Im Gegensatz zu den vorherigen Versionen nimmt der neue Profiler keine Änderungen am analysierten Code vor. Die zuvor verwendete Instrumentationsmethode fügte dem Code bestimmte Konstrukte hinzu, die zur Messung der Funktionsgeschwindigkeit verwendet wurden. Dies könnte sich auf die endgültige Codegeschwindigkeit auswirken.

    Die Entwicklung des Profiler wird fortgesetzt. Weitere Verbesserungen werden in kommenden Plattformversionen verfügbar werden.

  23. Tester: Optimierte Operationen mit dem MQL5-Cloud-Netzwerk. Das Laden von Expert Advisors auf Agenten wurde korrigiert.
  24. Tester: Ein neues Optimierungskriterium "Komplexes Kriterium max" hinzugefügt. Dies ist ein integrales und komplexes Maß für die Qualität eines Testdurchlaufs. Es misst mehrere Parameter:

    • Anzahl der Deals
    • Drawdown
    • Erholungsfaktor
    • Erwartetes Ergebnis
    • Sharpe Ratio

    Der höchste Wert eines Parameters (zum Beispiel des Gewinns) ist nicht immer die beste Option im Hinblick auf die komplexe Analyse. Das komplexe Kriterium wählt nach und nach die besten Durchläufe aus: Zunächst nach der Anzahl der Deals, dann nach dem Expected Payoff, dem Erholungsfaktor und so weiter. Die neue Option ermöglicht den Erhalt der besten Optimierungsdurchläufe in Abhängigkeit von allen Parametern. Außerdem können Sie den optimalen Durchlauf auf der Grundlage des gewünschten Parameters auswählen, wie z.B. den höchsten Gewinn.

    Wählen Sie das neue Kriterium in den Einstellungen des Strategietesters und starten Sie die Optimierung.



    Der Wert "Komplexes Kriterium max" wird in einem separaten Register "Ergebnis" in den Optimierungsergebnissen angezeigt. Die Durchläufe können nach dieser Spalte sortiert werden. Das neue Kriterium unterstützt farbige Kennzeichnungen, um die besten Durchläufe visuell hervorzuheben. Werte unter 20 werden rot hervorgehoben, und Werte über 80 werden dunkelgrün dargestellt.



  25. Tester: Korrektur der Berechnung der nutzerdefinierten Kommission im Strategietester.
  26. MetaEditor: Wir haben die globale Überarbeitung Funktionen für das intelligente Code-Management (IntelliSense) initiiert.

    • Hinweise zeigen jetzt neben dem Namen auch die vollständige Funktionssignatur an.
    • Die Schriftart für die Hinweise wird jetzt gemäß den Einstellungen des MetaEditors eingestellt.

    Weitere Verbesserungen werden in kommenden Plattformversionen verfügbar werden.

  27. Aktualisierte Dokumentation.

Die Aktualisierung wird über das Live-Update-System verfügbar sein.

 

Hmm.... Der neue Profiler steigt aus ohne Infos ...

TestCode

int test_1()
{  
   switch(10)
   {
   case 0:
      return 1 ;
   case 1:
      return 1;
   case 2:
      return 1;
   case 3:
      return 1;
   case 4:
      return 1 ;
   case 5:
      return 1;
   case 6:
      return 1;
   case 7:
      return 1 ;
   case 8:
      return 1;
   case 9:
      return 1 ;
   case 10:
      return 1 ;
   default:
         return 0;
   }
  
  return 2; 
}   
int test_2()
{  
 
   
        switch(3)
      {
      case 0:
         return  1 ;
      case 1:
         return 1;
      case 2:
         return 1;
      case 3:
         return 1;
   
      default:
            return 0;
      }
    
 return 2;
}

void OnTick()
  {
     for(int x=1;x<=100000; x++) 
     {  
      int res1 = test_1();
     }
     for(int x=1;x<=100000; x++) 
     {  
      int res2 = test_2();
     }


   // TesterStop();
  
  }

Wollte mals sehen wie der Compiler intern arbeitet.

Manche Compiler lassen die lange version von switch case länger laufen


Fehler :

DQ      0       17:10:46.783    Tester  Intel Core i7-6700HQ  @ 2.60GHz, 32632 MB
IH      0       17:10:46.851    Symbols EURUSD: symbol to be synchronized
KL      0       17:10:46.852    Symbols EURUSD: symbol synchronized already, 18 bytes received
GF      0       17:10:46.852    History EURUSD: history synchronization started
KN      0       17:10:46.855    History EURUSD: load 27 bytes of history data to synchronize in 0:00:00.002
KM      0       17:10:46.855    History EURUSD: history synchronized from 2015.01.02 to 2020.08.25
MH      0       17:10:46.962    History EURUSD,H1: history cache allocated for 7764 bars and contains 7078 bars from 2019.01.02 06:00 to 2020.02.21 23:00
JK      0       17:10:46.962    History EURUSD,H1: history begins from 2019.01.02 06:00
DM      0       17:10:46.962    Tester  EURUSD,H1 (MetaQuotes-Demo): every tick generating
HN      0       17:10:46.962    Tester  EURUSD,H1: testing of Experts\of_else_vs_switch_case_performance.ex5 from 2020.02.24 00:00 to 2020.04.02 00:00 started
QM      2       17:10:46.986    of_else_vs_switch_case_performance (EURUSD,H1)  2020.02.24 00:00:00   EX5 loading failed
FH      2       17:10:46.986    Tester  global initialization failed
DR      2       17:10:46.986    Tester  global initialization critical error
GK      2       17:10:46.986    Tester  tester stopped because expert initialization fail550E5F075\Agent-127.0.0.1-3000\logs\20200911.log" written
NF      0       17:10:47.004            test Experts\of_else_vs_switch_case_performance.ex5 on EURUSD,H1 thread finished
QD      0       17:10:47.041    127.0.0.1       prepare for shutdown


Der alte konnte das noch.

 

Ups .. hab noch Build 2596.... 2605 kommt ert noch.

Na ja der Fehler ist trotzdem aktuell.

Bericht mit 2605 folgt.

 

Auch mit Build 2605 bricht er beim laden ab


 
Die gewschwindigkeit des testers ist ja absolut unterirdisch
 
amando:
Die gewschwindigkeit des testers ist ja absolut unterirdisch

Verzeih, aber in der Regel liegt das am Code.

 
Carl Schreiber:

Verzeih, aber in der Regel liegt das am Code.

 Ein, das liegt nicht am code, ich hab den gleichen ea durch den alten tester gejagt, da war das gar kein thema, da ist genau ein macd indicator drin, und bei ontick fragt er nur ab wenn keine position offen ist


also an dem liegts nicht

Die speicherauslastung und der prozessor liegt alles im grünen bereich

 

Hast Du alle mal getestet ohne Grafik, bzw. den Indikator unten? Grafik ist eine tolle Bremse.

 
Christian:

Auch mit Build 2605 bricht er beim laden ab


Nö , alles richtig. Renat sagt der Compiler optimiert den Code bis nix mehr in der OnTick() ist.

Was ja richtig ist, da im Code nix passiert.

So funktioniert der Profiler:

int MathRandomBounds(int minValue, int maxValue){
   return minValue + MathRound((maxValue-minValue)*(MathRand()/32767.0));
}

int test_1()
  {
  
   switch(MathRandomBounds(0,11))
     {
      case 0:
         return 0 ;
      case 1:
         return 1;
      case 2:
         return 2;
      case 3:
         return 3;
      case 4:
         return 4 ;
      case 5:
         return 5;
      case 6:
         return 6;
      case 7:
         return 7 ;
      case 8:
         return 8;
      case 9:
         return 9 ;
      case 10:
         return 10 ;
      default:
         return -1;
     }
   return(2);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int test_2()
  {
   switch(MathRandomBounds(0,4))
     {
      case 0:
         return  0;
      case 1:
         return 1;
      case 2:
         return 2;
      case 3:
         return 3;
      default:
         return -1;
     }
   return 2;
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   for(int x=1; x<=100000; x++)
     {
      int res1 = test_1();
     }
   for(int y=1; y<=100000; y++)
     {
      int res2 = test_2();
     }
  }
 
Carl Schreiber:

Hast Du alle mal getestet ohne Grafik, bzw. den Indikator unten? Grafik ist eine tolle Bremse.

Ohne Grafik läuft alles ganz normal, ich wollte aber sehen wie der grafik mode funktioniert

Grund der Beschwerde: