MetaTrader 5 Build 3390: Float in OpenCL und in mathematischen Funktionen, Aktivierungs- und Verlustfunktionen für maschinelles Lernen

Aktualisierte Fundamentaldatenbank für Handelsinstrumente. Die Zahl der verfügbaren Datenaggregatoren für Börseninstrumente wurde auf 15 erweitert. Die Nutzer werden über die beliebtesten Wirtschaftsaggregatoren Zugang zu Informationen über noch mehr Ticker haben

4 August 2022

Terminal

  1. Automatische Eröffnung eines Tutorials bei der ersten Verbindung mit einem Handelskonto hinzugefügt. Dies wird Anfängern helfen, die Grundlagen des Handels zu erlernen und die Funktionen der Plattform zu erkunden. Das Lernprogramm ist in mehrere Abschnitte unterteilt, die jeweils kurze Informationen zu einem bestimmten Thema enthalten. Der Trainingsfortschritt wird durch eine blaue Linie dargestellt.

    Automatische Eröffnung eines Tutorials bei der ersten Verbindung mit einem Handelskonto hinzugefügt.


  2. Korrektur der Massenschließung‚ Close profitable‘/‚Close losing‘ (Schließe Gewinner/Verlierer) . Zuvor verwendete die Plattform entgegengesetzte Positionen, wenn es sie gab. Wenn Sie z. B. zwei Kaufpositionen im Verlust für EURUSD und eine Verkaufsposition im Gewinn für EURUSD haben, werden alle drei Positionen während des Massenvorgangs ‚Close losing‘ (Verluste schließen) geschlossen. Kauf und Verkauf würden durch den Vorgang ‚Close by‘ (Schließen durch) abgeschlossen, während der verbleibende Kauf durch einen normalen Vorgang abgeschlossen würde. Jetzt funktionieren die Befehle richtig: Sie schließen nur die ausgewählten Positionen, entweder im Gewinn oder Verlust.

  3. Die Anzeige von negativen historischen Preisen wurde korrigiert. Diese Preise werden auf allen Zeitskalen korrekt angezeigt.
  4. Optimierter und deutlich reduzierter Systemressourcenverbrauch durch das Terminal.
  5. Aktualisierte Fundamentaldatenbank für Handelsinstrumente. Die Zahl der verfügbaren Datenaggregatoren für Börseninstrumente wurde auf 15 erweitert. Die Nutzer werden über die beliebtesten Wirtschaftsaggregatoren Zugang zu Informationen über noch mehr Ticker haben.

    Aktualisierte Fundamentaldatenbank für Handelsinstrumente.

    Rund 7.000 Wertpapiere und mehr als 2.000 ETFs sind auf dem globalen Börsenmarkt notiert. Außerdem bieten die Börsen Futures und andere Derivate an. Die Plattform MetaTrader 5 bietet Zugang zu einer riesigen Datenbank von Börseninstrumenten. Um auf die entsprechenden Fundamentaldaten zuzugreifen, kann der Nutzer mit einem Klick direkt von Market Watch aus auf die Website des ausgewählten Aggregators wechseln. Zur Vereinfachung bietet die Plattform eine Auswahl an Informationsquellen für jedes Finanzinstrument.

  6. Corregido el ajuste de los niveles de Stop Loss y Take Profit en la nueva ventana de colocación de nuevas órdenes. En el caso de las cuentas FIFO, los niveles de stop se fijarán ahora de manera automática según los niveles de stop de las posiciones ya abiertas para el mismo instrumento. Esto será necesario para cumplir con la regla FIFO.

MQL5

  1. Die Mathematikfunktionen können jetzt mit Matrizen und Vektoren arbeiten.

    Wir bauen die Möglichkeiten der MetaTrader 5-Plattform für den algorithmischen Handel und das maschinelle Lernen weiter aus. Zuvor haben wir neue Datentypen hinzugefügt: Matrizen und Vektoren, die die Verwendung von Arrays für die Datenverarbeitung überflüssig machen. Mehr als 70 Methoden wurden in MQL5 für Operationen mit diesen Datentypen hinzugefügt. Die neuen Methoden ermöglichen lineare Algebra und statistische Berechnungen in einem einzigen Arbeitsgang. Multiplikation, Umformung und Gleichungssysteme können einfach und ohne übermäßige viele Codezeilen implementiert werden. Das neueste Update enthält mathematische Funktionen.

    Ursprünglich wurden mathematische Funktionen entwickelt, um relevante Operationen mit skalaren Werten durchzuführen. Ab diesem Build können die meisten Funktionen auf Matrizen und Vektoren angewendet werden. Dazu gehören MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1, MathLog1p, MathArccosh, MathArcsinh, MathArctanh, MathCosh, MathSinh, und MathTanh. Solche Operationen implizieren eine elementweise Behandlung von Matrizen oder Vektoren. Beispiel:
    //---
      matrix a= {{1, 4}, {9, 16}};
      Print("matrix a=\n",a);
    
      a=MathSqrt(a);
      Print("MatrSqrt(a)=\n",a);
      /*
       matrix a=
       [[1,4]
        [9,16]]
       MatrSqrt(a)=
       [[1,2]
        [3,4]]
      */
    Bei MathMod und MathPow kann das zweite Element entweder ein Skalar oder eine Matrix/ein Vektor mit der entsprechenden Größe sein.

    Das folgende Beispiel zeigt, wie die Standardabweichung durch Anwendung mathematischer Funktionen auf einen Vektor berechnet werden kann.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- Use the initializing function to populate the vector
      vector r(10, ArrayRandom); // Array of random numbers from 0 to 1
    //--- Calculate the average value
      double avr=r.Mean();       // Array mean value
      vector d=r-avr;            // Calculate an array of deviations from the mean
      Print("avr(r)=", avr);
      Print("r=", r);
      Print("d=", d);
      vector s2=MathPow(d, 2);   // Array of squared deviations
      double sum=s2.Sum();       // Sum of squared deviations
    //--- Calculate standard deviation in two ways
      double std=MathSqrt(sum/r.Size());
      Print(" std(r)=", std);
      Print("r.Std()=", r.Std());    
     }
    /*
      avr(r)=0.5300302133243813
      r=[0.8346201971495713,0.8031556138798182,0.6696676534318063,0.05386516922513505,0.5491195410016175,0.8224433118686484,...
      d=[0.30458998382519,0.2731254005554369,0.1396374401074251,-0.4761650440992462,0.01908932767723626,0.2924130985442671, ...
       std(r)=0.2838269732183663
      r.Std()=0.2838269732183663
    */ 
    //+------------------------------------------------------------------+
    //| Fills the vector with random values                              |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }
    

  2. In Template-Funktionen wurde Unterstützung für die Notationen matrix<double>, matrix<float>, vector<double>, vector<float> anstelle der entsprechenden Matrix-, matrixf-, vector- und vectorf-Typen hinzugefügt.
  3. Verbesserte mathematische Funktionen für Operationen mit dem Typ float. Die neu implementierte Möglichkeit, mathematische Funktionen auf 'float'-Matrizen und -Vektoren anzuwenden, hat eine Verbesserung der auf 'float'-Skalare angewandten mathematischen Funktionen ermöglicht. Zuvor wurden diese Funktionsparameter bedingungslos in den Typ "double" umgewandelt, dann wurde die entsprechende Implementierung der mathematischen Funktion aufgerufen, und das Ergebnis wurde in den Typ "float" zurückgewandelt. Jetzt werden die Operationen ohne zusätzliches Typenumwandlung (Casting) implementiert.

    Das folgende Beispiel zeigt den Unterschied in den mathematischen Sinusberechnungen:

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---  Array of random numbers from 0 to 1
      vector d(10, ArrayRandom);
      for(ulong i=0; i<d.Size(); i++)
       {
        double delta=MathSin(d[i])-MathSin((float)d[i]);
        Print(i,". delta=",delta);
       }
     }
    /*
       0. delta=5.198186103783087e-09
       1. delta=8.927621308885136e-09
       2. delta=2.131878673594656e-09
       3. delta=1.0228555918923021e-09
       4. delta=2.0585739779477308e-09
       5. delta=-4.199390279957527e-09
       6. delta=-1.3221741035351897e-08
       7. delta=-1.742922250969059e-09
       8. delta=-8.770715820283215e-10
       9. delta=-1.2543186267421902e-08
    */
    //+------------------------------------------------------------------+
    //| Fills the vector with random values                              |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }

  4. Aktivierungs- und Ableitungsmethoden für Matrizen und Vektoren hinzugefügt:
    AF_ELU               Exponential-Linear-Einheit
    AF_EXP               Exponential
    AF_GELU              Gaußscher Fehler Lineare Einheit
    AF_HARD_SIGMOID      Hartes Sigmoid
    AF_LINEAR            Linear
    AF_LRELU             Undichte rektifizierte Lineareinheit
    AF_RELU              Rektifizierte Lineareinheit
    AF_SELU              Skalierte Exponential-Linear-Einheit
    AF_SIGMOID           Sigmoid
    AF_SOFTMAX           Softmax
    AF_SOFTPLUS          Softplus
    AF_SOFTSIGN          Softsign
    AF_SWISH             Swish
    AF_TANH              Hyperbolischer Tangens
    AF_TRELU             Schwellenwerteinheit (Rectified Linear Unit)
    Die Aktivierungsfunktion des neuronalen Netzes bestimmt, wie die Summe der gewichteten Eingangssignale in ein Knotenausgangssignal auf der Netzebene umgewandelt wird. Die Auswahl der Aktivierungsfunktion hat einen großen Einfluss auf die Leistung des neuronalen Netzes. Verschiedene Teile des Modells können unterschiedliche Aktivierungsfunktionen verwenden. Zusätzlich zu allen bekannten Funktionen bietet MQL5 Derivative. Derivativ-Funktionen ermöglichen eine schnelle Berechnung von Anpassungen auf der Grundlage des beim Lernen erhaltenen Fehlers.

  5. Verlustfunktion für Matrizen und Vektoren hinzugefügt. Sie hat die folgenden Parameter:
    LOSS_MSE            Mittlerer quadratischer Fehler
    LOSS_MAE            Mittlerer absoluter Fehler
    LOSS_CCE            Kategoriale Kreuzentropie
    LOSS_BCE            Binäre Kreuzentropie
    LOSS_MAPE           Mittlerer absoluter prozentualer Fehler
    LOSS_MSLE           Mittlerer quadratischer logarithmischer Fehler
    LOSS_KLD            Kullback-Leibler Divergenz
    LOSS_COSINE         Kosinus-Ähnlichkeit/-Nähe
    LOSS_POISSON        Poisson
    LOSS_HINGE          Hinge-Verlustfunktion
    LOSS_SQ_HINGE       Quadratische Hinge-Verlustfunktion
    LOSS_CAT_HINGE      Kategoriale Hinge-Verlustfunktion
    LOSS_LOG_COSH       Logarithmus des Hyperbolischen Kosinus
    LOSS_HUBER          Huber-Verlustfunktion

    Die Verlustfunktion bewertet, wie gut das Modell die tatsächlichen Werte vorhersagt. Die Modellkonstruktion zielt darauf ab, den Funktionswert in jeder Phase zu minimieren. Der Ansatz hängt von dem jeweiligen Datensatz ab. Außerdem kann die Verlustfunktion von Gewicht und Offset abhängen. Die Verlustfunktion ist eindimensional und kein Vektor, da sie eine allgemeine Bewertung des neuronalen Netzes liefert.

  6. Hinzugefügt wurden die Methoden Matrix::CompareByDigits und vector::CompareByDigits für Matrizen und Vektoren. Sie vergleichen die Elemente zweier Matrizen/Vektoren bis zu signifikanten Ziffern.

  7. Unterstützung für die Funktionen MathMin und MathMax für Zeichenketten (strings) hinzugefügt. Die Funktionen verwenden lexikografische Vergleiche: Buchstaben werden alphabetisch verglichen, Groß- und Kleinschreibung wird beachtet.

  8. Die maximale Anzahl von OpenCL-Objekten wurde von 256 auf 65536 erhöht. Die Handles von einem OpenCL-Objekt werden in einem MQL5-Programm mit den Funktionen CLContextCreate, CLBufferCreate und CLProgramCreate erstellt. Die bisherige Grenze von 256 Handles war für den effizienten Einsatz von Methoden des maschinellen Lernens nicht ausreichend.

  9. Es wurde die Möglichkeit hinzugefügt, OpenCL auf Grafikkarten ohne Unterstützung von double-Werten zu verwenden. Bisher waren in MQL5-Programmen nur GPUs erlaubt, die Double-Typen unterstützen, obwohl viele Aufgaben Berechnungen mit Float erlauben. Der Float-Typ wird zunächst als nativ für die Parallelverarbeitung angesehen, da er weniger Platz benötigt. Daher wurde die alte Vorschrift aufgehoben.

    Um die obligatorische Verwendung von Grafikprozessoren mit Unterstützung von double Werten für bestimmte Aufgaben festzulegen, verwenden Sie die Option CL_USE_GPU_DOUBLE_ONLY im Aufruf CLContextCreate.
       int cl_ctx;
    //--- Initializing the OpenCL context
       if((cl_ctx=CLContextCreate(CL_USE_GPU_DOUBLE_ONLY))==INVALID_HANDLE)
         {
          Print("OpenCL not found");
          return;
         }

  10. Die Arbeitsweise der Funktion CustomBookAdd wurde korrigiert. Zuvor verhinderte ein Wert ungleich Null im Feld MqlBookInfo::volume_real, dass die Funktion einen Snapshot der Markttiefe erstellen konnte. Die Prüfung wird nun wie folgt durchgeführt:
    Die übermittelten Daten werden validiert: Typ, Preis und Volumen müssen für jedes Element angegeben werden. Außerdem dürfen MqlBookInfo.volume und MqlBookInfo.volume_real nicht null oder negativ sein. Sind beide Volumina negativ, wird dies als Fehler gewertet. Sie können einen der Volumentypen oder beide angeben, wobei das System denjenigen verwendet, der angegeben ist oder positiv ist:

       volume=-1 && volume_real=2 — es wird volume_real=2 verwendet,

       volume=3 && volume_real=0 — es wird volume=3 verwendet.

    Das Volumen MqlBookInfo.volume_real mit erhöhter Genauigkeit hat eine höhere Priorität als MqlBookInfo.volume. Wenn also beide Werte angegeben werden und gültig sind, wird volume_real verwendet.

    Wenn eines der Markttiefe-Elemente falsch beschrieben wird, verwirft das System den übergebenen Zustand vollständig.

  11. Der Betrieb der Funktion CalendarValueLast wurde korrigiert. Aufgrund eines Fehlers konnten aufeinanderfolgende Funktionsaufrufe nach Änderungen im Wirtschaftskalender (der Parameter 'change' wurde nach dem Aufruf auf einen neuen Wert gesetzt) bei Verwendung des Währungsfilters einige Ereignisse überspringen.
    CalendarValueLast(change, result, "", "EUR")
  12. Das Verhalten der Funktion ArrayBSearch wurde korrigiert. Wenn mehrere identische Elemente gefunden werden, wird ein Link zum ersten Ergebnis zurückgegeben und nicht ein zufälliges Ergebnis.
  13. Die Prüfung der Sichtbarkeit von Template-Funktionen innerhalb einer Klasse wurde korrigiert. Aufgrund eines Fehlers wurden Klassenvorlagenfunktionen, die als privat/geschützt deklariert wurden, als public angezeigt.

MetaEditor

  1. Fehler und zweideutiges Verhalten von MetaAssist behoben.
  2. Unterstützung für die %terminal%-Makros, die den Pfad zum Terminal-Installationsverzeichnis angeben, wurde hinzugefügt. Zum Beispiel: %terminal%\MQL5\Experts. 

    Unterstützung für die %terminal%-Makros, die den Pfad zum Terminal-Installationsverzeichnis angeben, wurde hinzugefügt.

  3. Verbesserte Anzeige von Arrays im Debugger.
  4. Vergrößerter Puffer für das Kopieren von Werten aus dem Debugger.
  5. Verbesserte Fehlerhinweise.
  6. Angabe von relativen Pfaden in der Projektdatei *.mproj hinzugefügt. Zuvor wurden absolute Pfade verwendet, was zu Kompilierungsfehlern führte, wenn das Projekt verschoben wurde.
  7. Es wurde das automatische Einbetten von BMP resources als global verfügbare 32-Bit-Bitmap-Arrays in Projekte hinzugefügt. Dadurch entfällt die Notwendigkeit, ResourceReadImage innerhalb des Codes aufzurufen, um die grafische Ressource einzulesen.
    'levels.bmp' as 'uint levels[18990]'
    
  8. Verbessertes Einlesen von erweiterten BMP-Dateiformaten.
  9. Aktualisierte UI-Übersetzungen.
  10. Fehler in Absturzprotokollen behoben.