---
title: "MetaTrader 5 Build 3390: Float in OpenCL und in mathematischen Funktionen, Aktivierungs- und Verlustfunktionen für maschinelles Lernen - Versionshinweise"
description: "Aktualisierte Fundamentaldatenbank für Handelsinstrumente. Die Zahl der verfügbaren Datenaggregatoren für Börseninstrumente wurde auf 15... - Versionshinweise"
image: "https://www.metatrader5.com/i/logo_metatrader5.png"
url: "https://www.metatrader5.com/de/releasenotes/terminal/2247"
---

# 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. ](https://www.metatrader5.com/c/17/0/achievements__5.png)
2. Korrektur der [Massenschließung](https://www.metatrader5.com/de/terminal/help/trading/performing_deals#bulk_positions)‚ 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.](https://www.metatrader5.com/c/17/0/fundamental__4.png)

   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](https://www.mql5.com/de/docs/math) 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](https://www.mql5.com/de/articles/9805), 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](https://www.mql5.com/de/docs/math/mathmin) und [MathPow](https://www.mql5.com/de/docs/math/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](https://www.mql5.com/de/docs/basis/types/double). 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](https://www.mql5.com/de/docs/basis/types/matrix_vector). Sie vergleichen die Elemente zweier Matrizen/Vektoren bis zu signifikanten Ziffern.
7. Unterstützung für die Funktionen [MathMin](https://www.mql5.com/de/docs/math/mathmin) und [MathMax](https://www.mql5.com/de/docs/math/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](https://www.mql5.com/de/docs/opencl/clcontextcreate), [CLBufferCreate](https://www.mql5.com/de/docs/opencl/clbuffercreate) und [CLProgramCreate](https://www.mql5.com/de/docs/opencl/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](https://www.mql5.com/de/docs/opencl/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](https://www.mql5.com/de/docs/customsymbols/custombookadd) wurde korrigiert. Zuvor verhinderte ein Wert ungleich Null im Feld [MqlBookInfo::volume_real](https://www.mql5.com/de/docs/constants/structures/mqlbookinfo), 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](https://www.mql5.com/de/docs/calendar/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](https://www.mql5.com/de/docs/constants/structures/mqlcalendar#mqlcalendarvalue) überspringen.

    ```
    CalendarValueLast(change, result, "", "EUR")
    ```
12. Das Verhalten der Funktion [ArrayBSearch](https://www.mql5.com/de/docs/array/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](https://www.mql5.com/de/docs/basis/oop/inheritance) angezeigt.

### MetaEditor

1. Fehler und zweideutiges Verhalten von [MetaAssist](https://www.metatrader5.com/de/metaeditor/help/development/intelligent_management#substitute) 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.](https://www.metatrader5.com/c/17/0/macro_terminal__4.png)
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](https://www.mql5.com/de/docs/runtime/resources) als global verfügbare 32-Bit-Bitmap-Arrays in Projekte hinzugefügt. Dadurch entfällt die Notwendigkeit, [ResourceReadImage](https://www.mql5.com/de/docs/common/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.

**Lesen Sie die vorige Nachricht:**

- [MetaTrader 5 build 3320: Verbesserungen und Korrekturen](https://www.metatrader5.com/de/releasenotes/terminal/2243)
- [MetaTrader 5 build 3300: Schnelle Kompilierung und verbesserte Code-Navigation im MetaEditor](https://www.metatrader5.com/de/releasenotes/terminal/2241)
- [MetaTrader 5 build 3280: Verbesserungen und Korrekturen aufgrund von Nutzer-Feedbacks](https://www.metatrader5.com/de/releasenotes/terminal/2239)
- [MetaTrader 5 build 3270: Verbesserungen und Korrekturen](https://www.metatrader5.com/de/releasenotes/terminal/2238)
- [MetaTrader 5 Build 3260: Mehrfachoperationen, Matrix- und Vektorfunktionen und Chat-Verbesserungen](https://www.metatrader5.com/de/releasenotes/terminal/2237)
