Was ist neu im MetaTrader 5

Die Aktualisierungen der Plattformen für den Desktop, Mobile und Web

7 März 2024
MetaTrader 5 build 4230: Mehr integrierte Anwendungen und erweiterte ONNX-Unterstützung

Terminal

  1. 28 neue Expert Advisors und 12 neue Indikatoren wurden zum Standardpaket der Plattform hinzugefügt. Die Anwendungen sind im Navigator unter Expert Advisors\Free Robots und Indicators\Free Indicators verfügbar. Jedes Programm existiert dort als Quellcode mit ausführlichen Kommentaren, um Sie beim Erlernen der MQL5-Sprache zu unterstützen.

    Die Roboter setzen Handelsstrategien um, die auf technischen Indikatoren und Kerzenmustern basieren, wie z. B. 3 Black Crows – 3 White Soldiers, Bullish Engulfing – Bearish Engulfing, Bullish Harami – Bearish Harami und andere. Neue Indikatoren sind Implementierungen beliebter Kanäle: Camarilla, DeMark, Donchian, Fibonacci und Keltner, um nur einige zu nennen.



  2. Die Vorbereitungen für die Einführung von Nasdaq-Marktdaten-Abonnements sind im Gange. Direkt von der Plattform aus können Händler auf Echtzeit-Kurse und umfassende Kursverläufe für Hunderte von Finanzinstrumenten von einer der größten Börsen zugreifen. Abonnements sind für jeden Nutzer mit einem Demo-Konto auf dem MetaQuotes-Demo-Server und einem MQL5.community-Konto verfügbar.



    Um loszulegen, müssen Sie nur ein Abonnement abschließen und die entsprechenden Symbole Ihrem Market Watch hinzufügen. Sie können diese Symbole wie normale Instrumente verwenden: Öffnen der Charts, Analyse mit Objekten und Indikatoren und Ausführen von Expert Advisors im Strategietester. Der Zugang zu allen Informationen erfolgt wie bei gewöhnlichen Finanzinstrumenten, mit denen Sie bei einem Broker arbeiten.

  3. Der Abschnitt über die Marge in der Spezifikation des Instruments wurde verbessert. Der Abschnitt enthält nun Margensätze und berechnete Werte für jedes Instrument.



    Behoben wurde Fehler in der Margenanzeige für bestimmte Arten von Symbolen.

  4. Link zum MQL5 Telegram-Kanal im Hilfe-Menü hinzugefügt. Auf dem Kanal werden regelmäßig interessante Inhalte für Entwickler geteilt, darunter Rezensionen neuer Programmierartikel sowie kostenlose Roboter und Indikatoren aus der Code Base. Abonnieren Sie diesen Kanal, um auf dem Laufenden zu bleiben und keine wichtigen Informationen zu verpassen.



  5. Unterstützung für den Parameter ShutdownTerminal im [StartUp]-Abschnitt der nutzerdefinierten Konfigurationsdateien hinzugefügt. Verwenden Sie diesen Parameter, um die Plattform zur Ausführung einmaliger Aufgaben mithilfe von Skripten zu starten. Sie haben zum Beispiel ein Skript, das einen Screenshot des Charts erstellt. Sie können eine Konfigurationsdatei erstellen, die dieses Skript zusammen mit der Plattform startet. Wenn Sie in dieser Datei ShutdownTerminal auf „Yes“ setzen, wird die Plattform sofort nach Beendigung des Skripts automatisch heruntergefahren.
  6. Verbesserter Schutz von Netzwerkprotokollen und Marktprodukten.
  7. Die Unterstützung von Signalen auf Demokonten wurde deaktiviert. Mit dem neuen Handelsbericht haben Sie Zugriff auf erweiterte Statistiken Ihrer Demokonten. Er bietet eine Fülle von Metriken, die die Rentabilität und die Risiken Ihrer Strategie charakterisieren, darunter Wachstums-, Salden- und Kapitalkurven, Diagramme der Handelsverteilung nach Richtung und Instrumenten und vieles mehr.
  8. Die Anzeige von Links zu Maklerverträgen im Hilfemenü wurde korrigiert.
  9. Verbesserte Auswahl des besten Servers bei der Miete von VPS.
  10. Die Aktualisierung der Abonnementseite beim Wechsel zwischen den Abschnitten im Navigator wurde korrigiert.
  11. Die Aktualisierung der Liste der Vereinbarungen bei der Eröffnung eines Kontos wurde korrigiert.
  12. Aktualisierte Übersetzungen der Nutzeroberfläche.

MQL5

  1. Die Eigenschaft MQL_STARTED_FROM_CONFIG wurde in der Enumeration ENUM_MQL_INFO_INTEGER hinzugefügt. Gibt „true“ zurück, wenn das Skript/der Expert Advisor über den Abschnitt „StartUp“ der Konfigurationsdatei gestartet wurde. Dies bedeutet, dass das Skript bzw. der Expert Advisor in der Konfigurationsdatei, mit der das Terminal gestartet wurde, angegeben wurde.
  2. Wir bauen die Unterstützung für ONNX-Modelle weiter aus.

    Aufgaben des maschinellen Lernens erfordern nicht immer eine höhere Rechengenauigkeit. Um Berechnungen zu beschleunigen, verwenden einige Modelle Datentypen mit geringerer Genauigkeit wie Float16 und sogar Float8. Damit die Nutzer die entsprechenden Daten in die Modelle eingeben können, wurden die folgenden Funktionen zu MQL5 hinzugefügt:
    bool ArrayToFP16(ushort &dst_array[],const float &src_array[],ENUM_FLOAT16_FORMAT fmt);
    bool ArrayToFP16(ushort &dst_array[],const double &src_array[],ENUM_FLOAT16_FORMAT fmt);
    bool ArrayToFP8(uchar &dst_array[],const float &src_array[],ENUM_FLOAT8_FORMAT fmt);
    bool ArrayToFP8(uchar &dst_array[],const double &src_array[],ENUM_FLOAT8_FORMAT fmt);
    
    bool ArrayFromFP16(float &dst_array[],const ushort &src_array[],ENUM_FLOAT16_FORMAT fmt);
    bool ArrayFromFP16(double &dst_array[],const ushort &src_array[],ENUM_FLOAT16_FORMAT fmt);
    bool ArrayFromFP8(float &dst_array[],const uchar &src_array[],ENUM_FLOAT8_FORMAT fmt);
    bool ArrayFromFP8(double &dst_array[],const uchar &src_array[],ENUM_FLOAT8_FORMAT fmt);
    Da sich die realen Zahlenformate für 16 und 8 Bit unterscheiden können, muss der Parameter „fmt“ in den Konvertierungsfunktionen angeben, welches Zahlenformat verarbeitet werden muss. Für 16-Bit-Versionen wird die neue Enumeration NUM_FLOAT16_FORMAT verwendet, die derzeit folgende Werte hat:


    Für 8-Bit-Versionen wird die neue Enumeration ENUM_FLOAT8_FORMAT verwendet, die derzeit folgende Werte hat:

    • FLOAT_FP8_E4M3FN – 8-Bit-Gleitkommazahl, 4 Bits für den Exponenten und 3 Bits für die Mantisse, in der Regel als Koeffizienten verwendet.
    • FLOAT_FP8_E4M3FNUZ — 8-Bit-Gleitkommazahl, 4 Bits für den Exponenten und 3 Bits für die Mantisse. Unterstützt NaN, aber nicht die negative Null und Inf. Werden in der Regel als Koeffizienten verwendet.
    • FLOAT_FP8_E5M2FN – 8-Bit-Gleitkommazahl, 5 Bits für den Exponenten und 2 Bits für die Mantisse. Unterstützt NaN und Inf. Wird in der Regel für Gradienten verwendet.
    • FLOAT_FP8_E5M2FNUZ — 8-Bit-Gleitkommazahl, 5 Bits für den Exponenten und 2 Bits für die Mantisse. Unterstützt NaN, aber nicht die negative Null und Inf. Wird auch für Gradienten verwendet.

  3. Neue Matrix- und Vektormethoden für das maschinelle Lernen hinzugefügt:

    • PrecisionRecall berechnet Werte, um eine Precision-Recall-Kurve zu konstruieren. Ähnlich wie ClassificationScore wird diese Methode auf einen Vektor von wahren Werten angewendet.
    • ReceiverOperatingCharacteristic — berechnet Werte zur Erstellung der ROC-Kurve (Receiver Operating Characteristic). Ähnlich wie ClassificationScore wird diese Methode auf einen Vektor von wahren Werten angewendet.

  4. ONNX Runtime wurde auf Version 1.17 aktualisiert. Details zur Veröffentlichung finden Sie auf GitHub.
  5. Python-Integrationspaket auf Version 5.0.4200 aktualisiert, Unterstützung für Python 3.12 hinzugefügt. Aktualisieren Sie Ihr Paket mit dem Befehl "pip install --upgrade MetaTrader5", um die neuesten Änderungen zu erhalten.
  6. Die Funktion OrderCalcMargin wurde für einige Fälle korrigiert.
  7. Die Eigenschaft DEAL_REASON_CORPORATE_ACTION wurde in die Enumeration ENUM_DEAL_REASON hinzugefügt. Es handelt sich um eine Transaktion, das aufgrund einer Unternehmensmaßnahme durchgeführt wurde: Zusammenlegung oder Umbenennung eines Wertpapiers, Übertragung eines Kunden auf ein anderes Konto usw.
  8. Unterstützung für den Vergleich komplexer Vektoren und Matrizen für die Compare-Methode hinzugefügt. Bei dem Vergleich geht es darum, den Abstand zwischen komplexen Zahlen abzuschätzen. Der Abstand wird berechnet als sqrt(pow(r1-r2, 2) + pow(i1-i2, 2)) und ist eine reelle Zahl, die bereits mit epsilon verglichen werden kann.
  9. Die Umwandlung von Farbtypvariablen in Text im RGB-Format wurde korrigiert.
  10. Feste Wiederkehr des Ergebnisses der Ermittlung von Eigenvektoren in der Methode Eig im Falle eines komplexen Eigenwertes. Methodenüberladung für komplexe Auswertung hinzugefügt.

MetaEditor

  1. Link zum kürzlich veröffentlichten Buch „MQL5 Programming for Traders“ im Menü Help\MQL5.community wurde hinzugefügt. Das Buch wurde auch in das Suchsystem aufgenommen, sodass Sie die benötigten Informationen direkt von MetaEditor aus finden können:




  2. Verbesserungen bei der integrierten Suche:

    • Der Bereich der Suchergebnisse im Toolbox-Fenster wurde in zwei Registerkarten unterteilt: „Suche“ für Online-Suchergebnisse (Dokumentation, Artikel, Buch usw.) und „Suche in Dateien“ für lokale Ergebnisse.
    • Der Ergebnisbereich wurde um einen separaten Suchbegriff ergänzt. Sie können sie anstelle der Suchleiste in der Hauptsymbolleiste von MetaEditor verwenden.

  3. Hinzugefügt wurde die Unterstützung der Modi AVX, AVX2 und AVX512 beim Kompilieren von Befehlen von der Kommandozeile aus. Dazu fügen Sie einen der folgenden Schlüssel in Ihren Kompilierungsbefehl ein: /avx, /avx2 oder /avx512.
  4. SQLite-Engine für Datenbankoperationen auf Version 3.45 aktualisiert.
  5. Deaktivierte Unterstützung für Internet Explorer. Jetzt wird nur noch Microsoft Edge WebView2 zur Anzeige von HTML-Seiten verwendet. Im Vergleich zum veralteten MSHTML erweitert die neue Komponente die Möglichkeiten zur Darstellung von Inhalten erheblich, indem sie Zugang zu den neuesten Technologien bietet. Die Verwendung von WebView2 verbessert das Erscheinungsbild einiger MetaEditor-Abschnitte, erhöht die Leistung und schafft eine reaktionsschnellere Schnittstelle.
  6. Das Einfrieren, das in seltenen Fällen bei der automatischen Funktionsvervollständigung auftrat, wurde behoben.
  7. Behoben wurde ein Fehler in den Absturzprotokollen.

Tester

  1. Die Berechnungen von Triple-Swaps wurden korrigiert, wenn der Starttag des Tests auf den Tag des Triple-Swaps fällt.


MetaTrader 5 Web-Terminal

Verbesserte Anzeige der Margenbedingungen in den Kontrakspezifikationen. Neben den Kennzahlen und den Ausgangsparametern für die Berechnungen werden in den Spezifikationen nun auch die endgültigen Margenwerte angezeigt. Wenn die Höhe der Marge vom Positionsvolumen abhängt, werden die entsprechenden Stufen im Dialog angezeigt.



Die Marge wird auf der Grundlage des Kurses des Finanzinstruments zum Zeitpunkt des Öffnens des Spezifikationsfensters berechnet und nicht in Echtzeit aktualisiert. Daher sollten die Werte nur als Richtwerte betrachtet werden. Um die Werte auf der Grundlage der aktuellen Preise zu aktualisieren, öffnen Sie einfach erneut die Kontraktspezifikationen.
18 Januar 2024
MetaTrader 5 Build 4150: Export von Handelsberichten und neue Methoden des Machine Learning in MQL5

Terminal

  1. Der Export von Handelsberichten als HTML- und PDF-Dateien hinzugefügt. Mit dieser Option können Sie Ihre Handelserfolge problemlos mit Kollegen und Investoren teilen. Neue Exportbefehle sind im Menü Datei und im Menü Bericht verfügbar.




  2. Es wurde die Möglichkeit hinzugefügt, den aktuellen Status des Fensters der Marktübersicht in einer CSV-Datei zu speichern. Wählen Sie dazu im Kontextmenü Export. Die Datei speichert die Metriken, die zum Zeitpunkt des Exports ausgewählt sind. Um mehr Daten zu speichern, aktivieren Sie zusätzliche Spalten über das Kontextmenü.




  3. Verbesserte Anzeige der Margenbedingungen in den Kontrakspezifikationen. Anstelle von Verhältnissen und Anfangsparametern für die Berechnungen werden in den Spezifikationen nun die endgültigen Werte für die Marge angezeigt. Wenn die Höhe der Marge vom Positionsvolumen abhängt, werden die entsprechenden Stufen im Dialog angezeigt.



    Die Marge wird auf der Grundlage des Instrumentenkurses zum Zeitpunkt des Öffnens des Spezifikationsfensters berechnet und nicht in Echtzeit aktualisiert. Daher sollten die Werte als Richtwerte betrachtet werden. Um die Werte auf der Grundlage der aktuellen Preise neu zu berechnen, öffnen Sie die Instrumentenspezifikation erneut.

  4. Die Unterstützung von Signalen auf Demokonten wurde deaktiviert. Mit dem neuen Handelsbericht haben Sie Zugriff auf erweiterte Statistiken Ihrer Demokonten. Er bietet eine Fülle von Metriken, die die Rentabilität und die Risiken Ihrer Strategie charakterisieren, darunter Wachstums-, Salden- und Kapitalkurven, Diagramme der Handelsverteilung nach Richtung und Instrumenten und vieles mehr.
  5. Die Darstellung des potentiellen Gewinn bzw. Verlustes bei der Bearbeitung von Take-Profit und Stop-Loss für Stop-Limit-Aufträge wurde korrigiert.
  6. Korrekturen und Verbesserungen im Zusammenhang mit dem Betrieb des Zahlungssystems.
  7. Die doppelte Überprüfungen beim Laden einer Gruppe von Symbolen im Market Watch aus einer *.set-Datei wurden behoben.
  8. Der Web-Installer für Parallels wurde korrigiert. Wenn Sie nun dieses Virtualisierungssystem auf macOS mit M1/M2/M3 verwenden, wird die Plattform korrekt installiert.
  9. Aktualisierte Übersetzungen der Nutzeroberfläche.
  10. Behoben wurde ein Fehler in den Absturzprotokollen.

MQL5

  1. Es wurden neue Methoden für Operationen mit Matrizen und Vektoren hinzugefügt, die beim maschinellen Lernen verwendet werden.

    • ConfusionMatrix: Berechnet die Fehlermatrix. Die Methode wird auf den Vektor der vorhergesagten Werte angewendet.
    • ConfusionMatrixMultilabel: Berechnet die Fehlermatrix für jeden Labelwert. Die Methode wird auf den Vektor der vorhergesagten Werte angewendet.
    • KlassifizierungMetrik: Berechnet die Klassifizierungsmetrik, um die Qualität der vorhergesagten Daten im Vergleich zu den wirklichen Daten zu bewerten. Die Methode wird auf den Vektor der vorhergesagten Werte angewendet.
    • ClassificationScore: Berechnet die Klassifizierungsmetrik, um die Qualität der vorhergesagten Daten im Vergleich zu den wirklichen Daten zu bewerten. Die Methode wird auf den Vektor der wirklichen (true) Werte angewendet.
     
  2. Das Speichern von Daten in eine Textdatei im UTF-8-Format mit der Funktion FileWrite wurde korrigiert.
  3. Deaktivierte und veraltete Signal*-Funktionen. Sie werden nun leere Signalsätze zurückgeben.

MetaEditor

  1. Erhöhte Abtastrate für die Profilierung. Der Profiler erfasst die Anwendungszustände jetzt 10.000 Mal pro Sekunde, was eine genauere Messung der Funktionsausführungsraten ermöglicht.
  2. Aktualisierung der verfügbaren Modelle im automatischen Codierassistenten Copilot. ChatGPT-4 Turbo Modell hinzugefügt, veraltete Implementierungen entfernt.
  3. Fehler beim Ersetzen von Wörtern in einem ausgewählten Textfragment behoben.

Tester

  1. Das Einfrieren von Vorwärtstests, das im generischen Optimierungsmodus auftreten konnte, wurde behoben.
  2. Optimierte und beschleunigte Operationen mit der Handelsgeschichte von MQL5-Programmen.
  3. Korrigierte Gewinnberechnungen für Close By Operationen. Bei Handelsinstrumenten, die nicht mit dem Hauptsymbol des Tests übereinstimmen, konnte ein Fehler auftreten.

Web-Terminal

  1. Die Aktualisierung der Eigenschaften von Handelssymbolen bei Änderungen der relevanten Eigenschaften auf der Seite des Brokers wurde behoben.
  2. Die Darstellung von Kerzenkörpern im Chart wurde korrigiert. Das Chart konnte kleine Körperhöhen nicht korrekt anzeigen.
  3. Die Funktion des Feldes Land (Country) im Kontoeröffnungsformular wurde korrigiert.
20 Oktober 2023
MetaTrader 5 build 4040: Verbesserungen und Korrekturen

Terminal

  1. Verbesserter Handelsbericht. Die Anzeige des ersten Wertes im Wachstumsdiagramm und in der Drawdown-Berechnung wurde korrigiert.



  2. Bei der Kontoeröffnung erhalten die Händler über das interne E-Mail-System mehrere Nachrichten. Sie enthalten Anmeldeinformationen und nützliche Informationen über die Fähigkeiten der Plattform und die integrierten Dienste. Wir haben diese E-Mails aktualisiert und verbessert, sie in 50 Sprachen übersetzt und das Design komplett überarbeitet.
  3. Optimierte Seiten für Kontoeinzahlungen und -auszahlungen.
  4. Der Fehler bei der Volumenänderung beim Aufgeben eines neuen Auftrags behoben. Bei einigen Kombinationen von Einstellungen für Handelsinstrumente war das Feld nicht zur Bearbeitung verfügbar.
  5. Die Anzeige der Links zu Maklerverträgen im Dialog bei der Eröffnung eines Demokontos wurde korrigiert.
  6. Aktualisierte Übersetzungen der Nutzeroberfläche.

MQL5

  1. Es wurde ein Fehler behoben, der unter bestimmten Bedingungen zum Absturz des MQL5-Programms beim Start führen konnte.

MetaTrader 5 Web-Terminal

  1. Die Anzeige der Stop-Loss- und Take-Profit-Werte in der Handelshistorie wurde korrigiert.
  2. Verbesserte Protokollierung. Neue Protokollmeldungen zeigen Informationen über erfolgreiche und fehlgeschlagene Verbindungen an.
  3. Die Bedienung des Kontextmenüs in der Marktübersicht wurde korrigiert.
  4. Die Anzeige von Benachrichtigungen über Operationsergebnisse beim Handel über die Markttiefe wurde korrigiert.
  5. Der Fehler, der dazu führte, dass das Indikator-Unterfenster beim Aufruf des Handelsdialogs aus dem Diagramm entfernt wurde, wurde behoben.
  6. Das Ziehen von Handelsstufen, die über analytischen Objekten angezeigt werden, auf dem Chart wurde korrigiert.
29 September 2023
MetaTrader 5 build 4000: Handelsbericht und Webterminal sind verbessert

Terminal

  1. Die Anzeige des monatlichen Geldzuwachses in den neuen Handelsberichten wurde hinzugefügt. Um die Metriken anzuzeigen, gehen Sie zum Übersichtsbericht und wählen Sie den Saldenmodus.


    Monatliches Geldwachstum im neuen Handelsbericht


  2. Die Anzeige des neuen Handelsberichts wurde korrigiert und verbessert.
  3. ONNX Runtime wurde auf Version 1.16 aktualisiert. Details zur Veröffentlichung finden Sie auf GitHub.
  4. Aktualisierte Übersetzungen der Nutzeroberfläche.

MetaTrader 5 Web-Terminal

  1. Die Anzeige der Dialoge zum Ändern von Passwörtern und zum Öffnen von Konten wurde korrigiert.
  2. Die Anzeige der Stop-Loss- und Take-Profit-Werte in der Historie wurde korrigiert. Nach der Änderung der betreffenden Preise konnten Fehler auftreten.
  3. Scrollen im Risikowarnungsdialog hinzugefügt.
  4. Aktualisierte Übersetzungen der Nutzeroberfläche.
  5. Verbesserungen und Korrekturen
21 September 2023
MetaTrader 5 build 3980: Verbesserungen und Korrekturen

Terminal

  1. Neue Verbesserungen im Handelsbericht. Die Anzeige des Gesamtwerts der Swaps und des Gewinndiagramms nach Symbolen wurde korrigiert.
  2. Optimierte Ein- und Auszahlungsseiten. Weitere Einzelheiten über die Integration von Zahlungssystemen in der neue Plattform finden Sie in den Versionshinweisen zu Build 3950.
  3. Optimierte Neuberechnungen von Finanzoperationen auf der gesamten Plattform, einschließlich des Strategieprüfers. Jetzt werden Gewinn, Margen und viele andere Parameter schneller berechnet.
  4. Aktualisierte Übersetzungen der Nutzeroberfläche.

MQL5

  1. Konjugierte Methoden für komplexe, vector<complex> und matrix<complex> Typen wurden hinzugefügt. Es können Konjugationen komplexer Zahlen durchgeführt werden.
    //+------------------------------------------------------------------+
    //| Skript Programm Start Funktion                                   |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       complex a=1+1i;
       complex b=a.Conjugate();
       Print(a, "  ", b);
       /*
       (1,1)  (1,-1)
       */
    
       vectorc va= {0.1+0.1i, 0.2+0.2i, 0.3+0.3i};
       vectorc vb=va.Conjugate();
       Print(va, "  ", vb);
       /*
       [(0.1,0.1),(0.2,0.2),(0.3,0.3)]  [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]
       */
    
       matrixc ma(2, 3);
       ma.Row(va, 0);
       ma.Row(vb, 1);
       matrixc mb=ma.Conjugate();
       Print(ma);
       Print(mb);
       /*
       [[(0.1,0.1),(0.2,0.2),(0.3,0.3)]
        [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]]
    
       [[(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]
        [(0.1,0.1),(0.2,0.2),(0.3,0.3)]]
       */
       
       ma=mb.Transpose().Conjugate();
       Print(ma);
       /*
       [[(0.1,0.1),(0.1,-0.1)]
        [(0.2,0.2),(0.2,-0.2)]
        [(0.3,0.3),(0.3,-0.3)]]
       */
      }
  2. Die Übergabe der Ausgaben von ONNX-Modellen des Typs ‚Sequence of maps‘ wurde hinzugefügt.

    Für ONNX-Modelle, die Map-Sequenzen in der Ausgabeschicht bereitstellen (ONNX_TYPE_SEQUENCE von ONNX_TYPE_MAP), sollte ein dynamisches oder festes Array von Strukturen als Ausgabeparameter übergeben werden. Die ersten beiden Felder dieser Struktur müssen den Schlüssel- und Werttypen ONNX_TYPE_MAP entsprechen und feste oder dynamische Arrays sein.

    Betrachten Sie das Modell iris.onnx, das mit dem folgenden Python-Skript erstellt wurde:
    from sys import argv
    data_path=argv[0]
    last_index=data_path.rfind("\\")+1
    data_path=data_path[0:last_index]
    
    from sklearn.datasets import load_iris
    iris_dataset = load_iris()
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
    from sklearn.neighbors import KNeighborsClassifier
    knn = KNeighborsClassifier(n_neighbors=1)
    knn.fit(X_train, y_train)
    
    # Konvertierung ins ONNX-Format
    from skl2onnx import convert_sklearn
    from skl2onnx.common.data_types import FloatTensorType
    initial_type = [('float_input', FloatTensorType([None, 4]))]
    onx = convert_sklearn(knn, initial_types=initial_type)
    path = data_path+"iris.onnx"
    with open(path, "wb") as f:
        f.write(onx.SerializeToString())
    Öffnen Sie die erstellte onnx-Datei in MetaEditor:

    Ansicht des ONNX-Modells in MetaEditor


    Die Map-Sequenz wird als "output_probability" übergeben. Sie verfügt über einen Schlüssel vom Typ INT64 (entspricht long in MQL5) und den Wert vom Typ float. Um Daten von diesem Ausgang zu erhalten, deklarieren Sie die folgende Struktur:
    struct MyMap
      {
       long              key[];
       float             value[];
      };
    Hier haben wir dynamische Arrays mit entsprechenden Typen verwendet. In diesem Fall können wir feste Arrays verwenden, da die Map für dieses Modell immer 3 Schlüssel/Wertpaare enthält.

    Da die Map-Sequenz zurückgegeben wird, sollte ein Array solcher Strukturen als Parameter für den Empfang von Daten von output_probability output übergeben werden. Diese Anordnung kann dynamisch oder fest sein, je nach den Eigenschaften eines bestimmten Modells. Beispiel:
    //--- ein Array deklarieren, um Daten von der Ausgabeschicht output_probability zu erhalten
    MyMap output_probability[];
    
    ...
    
    //--- Modell läuft
    OnnxRun(model,ONNX_DEBUG_LOGS,float_input,output_label,output_probability);

MetaEditor

  1. Die Anzeige der Ausgabetypen im ONNX-Modellbetrachter wurde korrigiert.



MetaTrader 5 Web Terminal build 3980

  1. Im Hauptmenü des Web-Terminals wurde der Abschnitt „Contact Broker“ hinzugefügt.
  2. Fehlerbehandlung für SSL-Authentifizierungen hinzugefügt. Diese Authentifizierungsart wird im Webterminal nicht unterstützt. Stattdessen können Einmal-Passwörter verwendet werden.
  3. Der Download-Link für die Desktop-Plattform im Hauptmenü wurde korrigiert.
  4. Der Dialog zur Kontoverwaltung wurde korrigiert. Wenn der Broker die Option zur Eröffnung eines Demo- oder Realkontos nicht anbietet, wird der entsprechende Menüpunkt ausgeblendet.
14 September 2023
MetaTrader 5 Plattform Build 3950: Einzahlungen/Abhebungen im Terminal und aktualisierter Handelsbericht

Terminal

  1. Unterstützung von Konten-Operationen zum Einzahlen/Abheben von Geldmitteln von einem Handelskonto direkt im Kundenterminal hinzugefügt.

    Wir haben die gängigsten Zahlungssysteme direkt in die MetaTrader 5-Plattform integriert, was es den Brokern ermöglicht, den Händlern ein neues Serviceniveau zu bieten. Wählen Sie beim Einzahlen oder Aufladen einfach die für Sie am besten geeignete Methode und schließen Sie die Transaktion ab. Für mehr Komfort können die Nutzer ausgewählte Karten speichern, damit sie nicht jedes Mal die Kartendaten eingeben müssen. Die Makler speichern keine Zahlungsdaten und Kartennummern. Die vom Nutzer eingegebenen Zahlungsdaten werden über einen sicheren Kanal an das vom Nutzer gewählte Zahlungssystem übermittelt.

    Die neue Funktionen bietet Händlern die Möglichkeit, ihre Gelder mit einem Klick zu verwalten, ohne das Kundenterminal verlassen zu müssen.



  2. Der Bericht über den Handelsverlauf wurde vollständig überarbeitet. Jetzt ist er einfacher gestaltet. Wir haben den Ansatz zur Darstellung von Informationen überarbeitet und trockene statistische Berichte in interaktive Grafiken und Diagramme umgewandelt. Die Arbeiten sind noch im Gange, aber Sie können die Änderungen bereits beurteilen.

    Um Handelsstatistiken anzuzeigen, klicken Sie im Terminalmenü Ansicht auf Berichte.





    Der Bericht ist in vier Registerkarten unterteilt, die jeweils aggregierte Informationen enthalten:

    • Zusammenfassung — Handelsübersicht: Kontodaten, Gesamtgewinn und -verlust, Einzahlungen und Abhebungen, Saldo, Wachstums- und Dividendendiagramme und andere.
    • Gewinn/Verlust — Daten zu Gewinn und Verlust der Handelsgeschäfte. Der Parameter ist nach Handelsarten unterteilt (manuelle, algorithmische und kopierende Trades). Die Ergebnisse können in Form von Handelsgeschäfte oder Geld nach Monaten und Jahren analysiert werden.
    • Long/Short — dynamisches Verhältnis von Käufen und Verkäufen in bestimmten Zeiträumen sowie Kauf- und Verkaufsrentabilität.
    • Symbole — Analyse von Geschäften nach Finanzinstrumenten. Hier sehen Sie, mit welchen Symbolen Sie Geld verdienen oder verlieren, wie oft Sie mit ihnen handeln, sowie Diagramme über den Handel und das Geldvolumen für diese Symbole.


    Neue Berichte ermöglichen es Ihnen, die Handelsergebnisse unter verschiedenen Aspekten visuell auszuwerten, indem Sie einfach auf die Registerkarten klicken. Histogramme, Schaubilder und Diagramme sind interaktiv und liefern zusätzliche Informationen, wenn der Mauszeiger über sie bewegt wird. Unsere Designer haben sich viel Mühe gegeben, die Berichte so einfach und klar wie möglich zu gestalten. Probieren Sie sie einfach aus!

  3. Die Verwendung der Befehle von Advanced Vector Extensions wurde hinzugefügt, falls sie von der CPU unterstützt werden. Dies ermöglicht eine effizientere Nutzung der CPU-Kapazitäten, mit denen das Terminal gestartet wird. Jetzt ermittelt das Terminal bei der Installation oder Aktualisierung selbständig die CPU-Architektur und installiert die optimalste Version. Während des Starts sendet das Terminal eine Nachricht (AVX/AVX2) an das Protokoll, die den Satz von Anweisungen anzeigt, für den das Terminal gebaut ist.
    Terminal	MetaTrader 5 x64 build 3914 started for MetaQuotes Software Corp.
    Terminal	Windows 10 build 19045, 20 x Intel Xeon  E5-2630 v4 @ 2.20GHz, AVX, 41 / 63 Gb memory, 58 / 280 Gb disk, UAC, GMT+2
    

    Advanced Vector Extensions (AVX) ist eine Erweiterung des x86-Befehlssatzes für Intel- und AMD-Mikroprozessoren, die bereits 2008 vorgeschlagen wurde. Die weitere Entwicklung hat zum Erscheinen von AVX2 und AVX-512 (2013) geführt.

  4. Zusätzlich zu den beiden Versionen der MetaTrader 5-Terminals auf X64 und AVX haben wir die dritte Version des Desktop-Terminals mit direkter Unterstützung für AVX2-Befehle veröffentlicht. Gleichzeitig arbeiten die ONNX-Modelle jetzt auch mit Unterstützung für AVX2-Befehle.
  5. Zusätzliche Anzeige von Links zu den erforderlichen regulatorischen Dokumenten des Maklers. Sie können nun alle notwendigen rechtlichen Informationen von Ihrem Makler direkt im Kundenterminal unter Hilfe / Terms & Conditions erhalten.



  6. Korrigiert wurde die 2FA Autorisierung im Falle der zusätzlichen Verwendung einer erweiterten Autorisierung mit Zertifikaten.
  7. Die Anzeige von internen Mails unter MacOS wurde korrigiert.
  8. Die Anzeige des Fensters „Signale“ bei der Arbeit in Wine wurde korrigiert.
  9. Neue MetaTrader 4 und 5 Installationsprogramme für Linux veröffentlicht.
  10. Zusätzliche Befehle zum Aufrufen Download-Seiten der Linux- und Mac-Terminalversion wurden in der Hilfe hinzugefügt. Für die Bequemlichkeit der Händler haben wir einen speziellen Bereich der Website mit Terminal-Versionen für alle Plattformen sowie für den Handel in einem Browser erstellt.



  11. Das Einbetten von Bildern in interne Mails wurde korrigiert.
  12. Neue MetaTrader 5 Terminal-Installationsprogramme für Mac mit Unterstützung für M1/M2-Prozessoren veröffentlicht. Aufgrund der Umstellung auf Wine 8.0.1 empfehlen wir Ihnen dringend, alte Versionen zu entfernen und die neue zu installieren. Bei der Verwendung von Wine-Versionen älter als 8.0.0 wird im Terminalprotokoll eine Meldung über die Notwendigkeit eines Updates angezeigt.
  13. Hinzufügen von „VPS Hosting Speed Up“ im Netzwerk-Scan-Menü, das den Ping zu Ihrem Trading Server anzeigt. So können Sie deutlich sehen, wie sich Ihre Netzwerkverzögerungen verringert, wenn Sie einen integrierten VPS mieten.




  14. Verschärfung der Anforderungen an die Mindestkomplexität von Passwörtern, nämlich:

    • Passwortlänge — mindestens 8 Zeichen
    • Das Passwort muss mindestens jeweils 1 Zeichen in Groß- und Kleinschreibung, mindestens 1 Ziffer und mindestens 1 Sonderzeichen enthalten.

  15. Verwendbare Links in Terminalprotokollen. Wenn die Nutzer nun auf Zeilen mit https-Links doppelklicken, werden sie zu ihren Browsern weitergeleitet und der Link wird geöffnet.
  16. Korrigierte Suche nach Handelsinstrumenten in Market Watch. Jetzt wird das Symbol zuerst nach dem Namen und dann in anderen Feldern gesucht: Beschreibung, ISIN usw.
  17. Bei der Berechnung des Saldos in den Berichten über den Kontohandel wurde der Gewinn aus dem Handel berücksichtigt. In einigen Fällen wurde der Instrumententyp bei den Berechnungen nicht berücksichtigt.

VPS-Hosting

  1. Es wurde die Möglichkeit hinzugefügt, EX5-Programme zu senden und auszuführen, die unter dem x64/AVX/AVX2-Befehlssatz kompiliert wurden. Programme für AVX512 werden auf dem integrierten VPS nicht unterstützt.
  2. Die Anzahl der Standorte für die Anmietung des integrierten VPS wurde auf 27 erhöht. Jetzt ist die Auswahl des nächstgelegenen Servers noch größer geworden.

MQL5

  1. Zusätzliche Steuerung der Kompilierungseinstellungen, einschließlich der Auswahl der erweiterten Prozessorbefehlssätze — AVX, AVX2, AVX512 und FMA3.

    Moderne CPUs verfügen über eine Reihe fortschrittlicher Befehle, die mathematische Berechnungen erheblich beschleunigen, aber die große Mehrheit der modernen Programme nutzt diese Möglichkeiten nicht. Wir haben den MQL5-Sprachcompiler um Unterstützung für diese Anweisungen erweitert, was eine effizientere und schnellere Codegenerierung ermöglicht.

    Wir haben auch die Möglichkeit hinzugefügt, zu wählen, mit welcher Art von Anweisungen ein MQL5-Programm kompiliert werden soll. Sie können sowohl allgemeine Einstellungen für einzelne Programme in den MetaEditor-Optionen festlegen, als auch persönliche Einstellungen in den Projekteinstellungen vornehmen:



  2. Die Enumerationen ENUM_AVERAGE_MODE und ENUM_CLASSIFICATION_METRIC wurden zu den Matrix- und Vektormethoden hinzugefügt.
  3. Set-Methode für Vektoren hinzugefügt.
  4. Überarbeitete OpenCL-Initialisierung — jetzt wird sie durch die erste tatsächliche Verwendung initialisiert, nicht durch das Laden eines MQL5-Programms, das OpenCL-Funktionen enthält.
  5. Ein Fehler beim Aufruf der Funktion SocketIsConnected wurde behoben.
  6. Die Verzögerung beim Aufruf von OnDeinit beim Entladen von nutzerdefinierten Indikatoren behoben.
  7. Es wurde ein Compiler-Fehler behoben, der eine falsche Berechnung der String-Länge in der Eigenschaft indicator_label verursachte, was zu einer falschen Anzeige von Tooltips für grafische Objekte führte.
  8. Die Verwendung von mehrzeiligen Kommentaren im Makrokörper wurde korrigiert. Ein Beispiel für ein Makro, bei dem der Fehler aufgetreten ist:
    #define MACRO1 /*
    #define MACRO2 */
    void OnStart()
    {
    #ifdef MACRO2
        Print( 2 );
    #else
        Print( 1 );
    #endif
    }
  9. Die Reihenfolge der Parameter der MathAtan2-Funktion wurde korrigiert. Die Reihenfolge entspricht nun der ähnlichen Funktion in C++.
  10. Der neue Wert TERMINAL_CPU_ARCHITECTURE wurde zur Enumeration ENUM_TERMINAL_INFO_STRING hinzugefügt. Außerdem wurde das Makro __CPU_ARCHITECTURE__ hinzugefügt, das die CPU-Architektur des Computers ermittelt, auf dem das Terminal läuft. Anwendungsbeispiel:
    void OnStart()
      {
       Print("CPU name:         ",TerminalInfoString(TERMINAL_CPU_NAME));
       Print("CPU cores:        ",TerminalInfoInteger(TERMINAL_CPU_CORES));
       Print("CPU architecture: ",TerminalInfoString(TERMINAL_CPU_ARCHITECTURE));  
       Print("");
       Print("EX5 architecture: ",__CPU_ARCHITECTURE__);                            
      }
    
    CPU name:         12th Gen Intel Core i9-12900K
    CPU cores:        24
    CPU architecture: AVX2 + FMA3
    
    EX5 architecture: AVX

  11. Das Verhalten der externen Modifikatoren wurde geändert. Die Deklaration einer Variablen mit dem Modifikator extern ist nun eine Vordeklaration der Variablen.

    Neue Einschränkungen:
    1. Die Vordeklaration der Variablen sollte keine Initialisierung enthalten. Beim Kompilieren des nachstehenden Codes wird beispielsweise der Fehler „X - external variable initialization is not allowed“ angezeigt:
      extern int X=0;
      
      void OnStart()
        {
        }

    2. Die „externe“ Variable sollte im Programm ohne das Schlüsselwort „extern“ deklariert werden. Beim Kompilieren des nachstehenden Codes wird beispielsweise der Fehler „unresolved extern variable X“ angezeigt:
      extern int X;
      
      void OnStart()
        {
        }

    3. Bei der Verwendung von 'extern' ist es wichtig, die Reihenfolge der Initialisierung zu beachten, da auf eine Variable zugegriffen werden kann, bevor sie initialisiert wurde. Der folgende Code schreibt beispielsweise „Y=0 X=5“ ins Protokoll, da die Initialisierung der Variablen Y vor der Initialisierung der Variablen X erfolgt:
      extern int X;
      int        Y=X;
      
      void OnStart(void)
        {
         Print("Y=",Y," X=",X);
        }
        
      int X=_Digits;

Lösungen an

  1. Die ALGLIB-Bibliothek wurde auf die Version 3.19 aktualisiert. ALGLIB ist eine leistungsstarke Bibliothek für numerische Analysen, die für die Arbeit mit numerischen Methoden und Datenanalysealgorithmen entwickelt wurde.

    Wir haben bestehende Bibliotheksklassen überarbeitet, um Matrizen und Vektoren zu verwenden, und auch neue Funktionen aus ALGLIB 3.19 hinzugefügt. Der gesamte Quellcode wurde überarbeitet und in einen einheitlichen Designstil gebracht. Der Quellcode der ALGLIB-Bibliothek befindet sich im Verzeichnis <Terminaldaten>\MQL5\Include\Math\Alglib. Die Testskripts befinden sich in MQL5\Scripts\UnitTests\Alglib.

    Leider waren die Änderungen in der ALGLIB-Bibliothek Version 3.19 für MQL5 ziemlich signifikant, sodass es keine Abwärtskompatibilität gibt. Wenn Ihre Codes die ALGLIB-Bibliothek für MQL5 Version 3.5 verwenden, müssen Sie Ihre Programme explizit überprüfen und die notwendigen Änderungen vornehmen.

    Neben der Bibliothek selbst wurden auch die Testskripte aktualisiert — die Anzahl der Tests stieg von 62 auf 91 für Klassen und von 143 auf 152 für Schnittstellen. Daher bieten die Entwickler der MetaTrader 5-Plattform den Händlern die effizientesten

    • MQL5, eine Sprache, die in Bezug auf die Geschwindigkeit mit C++ vergleichbar ist;
    • integrierte Verarbeitung von SQLite-Datenbanken, OpenCL-Berechnungen, DirectX-Unterstützung und Integration von Python;
    • mathematische Bibliotheken, einschließlich Fuzzy-Logik, Statistik und aktualisierte ALGLIB.

MetaEditor

  1. Die Verwendung der Befehle von Advanced Vector Extensions wurde hinzugefügt, falls sie von der CPU unterstützt werden.
  2. Verbesserte Anzeige von lokalen Variablen beim Debuggen.

Tester

  1. Die Verwendung von AVX2-Befehlen wurde hinzugefügt, sofern sie von der CPU unterstützt werden.
  2. Ein Fehler wurde behoben, der gelegentlich zum Einfrieren während der Kompilierung führte.
  3. Aktualisierte Übersetzungen der Nutzeroberfläche.

Behoben wurde ein Fehler in den Absturzprotokollen.


MetaTrader 5 Web Terminal Build 3950

  1. Die Anzeige des Briefkurses (Ask) wurde zu den Charteinstellungen hinzugefügt.



  2. Beschleunigter Erststart des Terminals.
  3. Es wurde die Möglichkeit hinzugefügt, das Passwort zu ändern.
  4. Es wurde die Möglichkeit hinzugefügt, das Passwort zu löschen und zu speichern.
  5. Es wurde ein nutzerdefinierter Zeitraum für die Anzeige der Handelshistorie hinzugefügt.
  6. Korrigiert wurde die erzwungene Passwortänderung.
  7. Korrigierte Berechnung von ‚diff‘ — dem Abstand zwischen dem Eröffnungskurs und den TP/SL-Levels.



  8. Fehler der Ticks-Stop beim Schließen aller Aufträge/Deals wurde behoben.
  9. Die Anzeige von wirtschaftlichen Kalenderereignissen wurde korrigiert. Manchmal wurden sie nicht im Chart angezeigt, obwohl die Option aktiviert war.
  10. Korrigiert wurde die Neuberechnung des Indikators, wenn das Symbol des Charts geändert wurde.
  11. Ein Fehler im Formular der Eröffnung eines realen Kontos bei der Bestätigung des Telefons/E-Mails wurde behoben.
  12. Neue Übersetzungen hinzugefügt und bestehende korrigiert.
8 Juni 2023
MetaTrader 5 Build 3800: Der Auftrag Book or Cancel (BOC), KI-Programmierassistent und erweiterte ONNX-Unterstützung

Terminal

  1. Hinzugefügt wurde die Unterstützung einer neuen Regel zur Auftragsabwicklung — Passiv / Book or Cancel (BOC, Buchen oder Löschen).



    Die BOC-Regel besagt, dass ein Auftrag nur in der Tiefe des Marktes (dem Orderbuch) platziert werden kann. Der Auftrag wird gelöscht, wenn er sofort nach seiner Erteilung ausgeführt werden könnte. Diese Regel garantiert, dass der Preis für den erteilten Auftrag schlechter ist als der aktuelle Markt. BOC wird für den passiven Handel verwendet: Das ist garantiert, dass, wenn der Auftrag nicht sofort nach seiner Erteilung ausgeführt wird, er somit die aktuelle Liquidität nicht beeinflusst. Diese Ausführungsregel wird nur für Limit- und Stop-Limit-Aufträge im Exchange Execution Modus unterstützt.

    Die Verfügbarkeit der neuen Ausführungsregel hängt vom Broker ab.

  2. Die Plattform wechselt zur Verwendung von Microsoft Edge WebView2 für die Anzeige von HTML-Inhalten.

    Im Vergleich zum veralteten MSHTML erweitert die neue Komponente die Möglichkeiten zur Darstellung von Inhalten erheblich, da sie Zugang zu modernen Technologien bietet. Die Verwendung von WebView2 verbessert das Erscheinungsbild einiger Plattformabschnitte, erhöht die Leistung und schafft eine reaktionsschnellere Schnittstelle. Die neue Komponente wird sich insbesondere auf die Bereiche Markt, Signale und VPS auswirken.
    Die volle Unterstützung für WebView2 wurde in Windows 10 eingeführt. Wir empfehlen allen Nutzern dringend, auf die neueste Version des Betriebssystems zu aktualisieren. Die Plattform wird zwar weiterhin MSHTML unter Windows 7 und Wine verwenden, aber die neuen Funktionen werden nicht verfügbar sein. Wir empfehlen Ihnen außerdem dringend, alle verfügbaren Betriebssystem-Updates zu installieren. Die empfohlene Mindestversion ist Windows 10 21H2 (Build 19044, November 2021).

  3. Verbessertes Marktsicherheitssystem. Um das Produkt ausführen zu können, muss der Nutzer auf der Plattform mit demselben MQL5-Konto autorisiert sein, über das das Produkt erworben wurde. Das Konto muss im Abschnitt Tools \ Options \ Community angegeben werden:



    Wenn kein Konto oder ein ungültiges Konto angegeben ist, wird das Produkt nicht gestartet, und die folgende Meldung wird im Plattformjournal ausgegeben:
    'ProductName' verlangt ein aktives MQL5.Konto in Tools->Options->Community
  4. Der Befehl Übersicht wurde zum Kontextmenü des Abschnitts der Historie hinzugefügt. Der Befehl öffnet den Handelsbericht eines Kontos:



  5. Anzeigefehler im Dialog für die Zwei-Faktor-Authentifizierung wurden behoben. Wenn das Terminal mehrere Konten mit derselben Nummer hatte, die aber bei verschiedenen Brokern eröffnet wurden, konnte es vorkommen, dass das Kontoverbindungsformular das Feld für das Einmalpasswort nicht anzeigte.
  6. Es wurde eine schnellere Darstellung von Indikatoren mit dem Anzeigestil DRAW_COLOR_CANDLES implementiert.
  7. Fehler bei der Erstellung von Handelsberichten behoben. Gewinn- und Kapitalwerte auf dem Chart konnten unter bestimmten Bedingungen falsch angezeigt werden.
  8. Die Anzeige der Kosten wurde dem Handelsbericht hinzugefügt. Der Wert gibt die Gesamtkosten an, die bei der Durchführung von Geschäften im Verhältnis zum aktuellen Mid-Point-Preis des Symbols anfallen (Mid-Point-Spread-Kosten). Dies ist der Betrag, den der Händler beim Handel aufgrund des Spreads verliert. Die Verfügbarkeit dieses Wertes hängt vom Broker ab.
  9. Aktualisierte UI-Übersetzungen.
  10. Verbesserte Stabilität unter Wine, insbesondere auf macOS-Systemen. Wir empfehlen, alte Terminals vollständig zu entfernen und es neu zu installieren:


  11. Beschleunigtes Herunterladen von Updates und der Installation von Paketen. Verbesserte Analyse der AVX-Verfügbarkeit auf dem Computer des Nutzers bei der Auswahl eines Distributionspakets.
  12. Aktivierte Unterstützung für TLS 1.3 in Webprotokollen. TLS 1.0 gilt als veraltet und unsicher und wurde daher deaktiviert.
  13. Die Abrechnung der Vermittlerprovisionen in den Berichten über den Handelsverlauf wurde korrigiert. Die entsprechenden Transaktionen könnten bei der Berechnung des endgültigen Gewinns ignoriert werden.
  14. Die Unmöglichkeit, den Server während des Kontoverbindungsdialog zu ändern, wurde behoben. Das Problem trat auf, wenn im Terminal mehrere Konten mit der gleichen Nummer von verschiedenen Brokern vorhanden waren.
Ab diesem Build funktionieren die Installationsprogramme nur noch mit 64-Bit-Plattformen. Die Unterstützung für 32-Bit-Versionen wird eingestellt. Zuvor installierte 32-Bit-Versionen werden aber noch bis zum 1. Januar 2024 funktionieren.

MQL5

  1. Der neuer Wert STAT_COMPLEX_CRITERION in der Enumeration ENUM_STATISTICS wurde hinzugefügt. Verwenden Sie diese Eigenschaft, um einen komplexen Kriteriumwert zu erhalten, der als Ergebnis der Optimierung berechnet wurde.
  2. Verbesserte RegressionMetric-Methode, die zur Berechnung der Regressionsmetrik auf der Grundlage der übergebenen Matrix oder des Vektors verwendet wird. Die Parameter vector_true und matrix_true wurden hinzugefügt, um wirkliche Werte zu übergeben, die die Qualität der vorhergesagten Daten bewerten.
    double vector::RegressionMetric(
       const vector& vector_true,            // true values
       const ENUM_REGRESSION_METRIC  metric  // metric
       );
     
    double matrix::RegressionMetric(
       const matrix& matrix_true,            // true values
       const ENUM_REGRESSION_METRIC metric   // metric
       );
     
    vector matrix::RegressionMetric(
       const matrix& matrix_true,            // true values
       const ENUM_REGRESSION_METRIC metric,  // metric
       const int                      axis   // axis
       );
  3. Die Methode LinearRegression wurde hinzugefügt. Sie gibt einen Vektor/eine Matrix mit berechneten linearen Regressionswerten für den übergebenen Vektor/die Matrix zurück.
    vector vector::LinearRegression();
     
    matrix matrix::LinearRegression(
       ENUM_MATRIX_AXIS axis=AXIS_NONE       // Achse, entlang der die Regression berechnet wird 
       );
    Beispiel:
    vector vector_a;
    //--- den Vektor mit Preisen füllen
    vector_a.CopyRates(_Symbol,_Period,COPY_RATES_CLOSE,1,100);
    //--- eine lineare Regression erhalten
    vector vector_r=vector_a.LinearRegression();
    Die Ergebnisse sind in der Grafik dargestellt:


    Visualisierung des von der Methode LinearRegression zurückgegebenen Ergebnisses


  4. Hinzufügen der Methode HasNan, die die Anzahl der NaN-Werte in einer Matrix/einem Vektor zurückgibt.
    ulong vector::HasNan();
    ulong matrix::HasNan();
    Wenn ein entsprechende Paar von Elementen mit NaN-Werten verglichen wird, betrachten die Methoden Compare und CompareByDigits diese Elemente als gleich, während bei einem gewöhnlichen Vergleich von Fließkommazahlen NaN != NaN.

  5. Die Struktur OnnxTypeInfo, die für Operationen mit ONNX-Modellen verwendet wird, wurde geändert:

    struct OnnxTypeInfo
      {
       ENUM_ONNX_TYPE       type;            // parameter type
       OnnxTensorTypeInfo   tensor;          // tensor description
       OnnxMapTypeInfo      map;             // map description
       OnnxSequenceTypeInfo sequence;        // sequence description
      };

    Der Datentyp wird in der Struktur über neue Unterstrukturen angegeben:

    • OnnxTensorTypeInfo — tensor
    • OnnxMapTypeInfo — map
    • OnnxSequenceTypeInfo — sequence

    struct OnnxTensorTypeInfo
      {
       ENUM_ONNX_DATATYPE   data_type;       // data type in the tensor
       long                 dimensions[];    // number of elements
      };
    
    struct OnnxMapTypeInfo
      {
       ENUM_ONNX_DATA_TYPE  key_type;        // key type
       OnnxTypeInfo         type_info;       // value type
      };
    
    struct OnnxSequenceTypeInfo
      {
       OnnxTypeInfo         type_info;       // data type in the sequence
      };
    Je nach OnnxTypeInfo::type (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP oder ONNX_TYPE_SEQUENCE) wird die entsprechende Unterstruktur gefüllt.

  6. Verbesserte Unterstützung für ONNX (Open Neural Network Exchange) Modelle.
  7. Hinzugefügt wurden die Methoden CopyIndicatorBuffer, die es ermöglichen, Indikatorpufferdaten in einen Vektor zu erhalten.
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,ulong start_pos,ulong count);
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,ulong count);
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,datetime stop_time);
  8. Korrigierte Operationen mit Arrays mit zwei oder mehr Dimensionen in den Methoden FrameAdd und FrameNext.
  9. Korrigierte Methode in der Standardbibliothek CRedBlackTree::Remove.
  10. Implementierung von Korrekturen in der Fuzzy-Logik-Bibliothek.

MetaEditor

  1. Zusätzliche Integration mit dem fortschrittlichen automatischen Codierungsassistenten Copilot. Seine Funktionsweise basiert auf OpenAI-Modellen. Geben Sie einen Kommentar oder einen Teil einer Funktion ein und senden Sie eine Aufforderung. Das neuronale Netz analysiert die Eingabeaufforderung und bietet Codierungsoptionen zur Umsetzung der Idee an.




    Je nach Dateityp wird am Anfang jeder Eingabeaufforderung automatisch die Zeichenfolge "MQL5 language", "Python language" oder "C++ language" eingefügt. Auf diese Weise wird das neuronale Netz das Ergebnis in der gewünschten Sprache liefern.

    Copilot ist derzeit kostenlos und ist bereits im Editor aktiviert. Unter Tools \ Options\ Copilot sind mehrere Optionen verfügbar:




    Einstellungen bei Zahlungen:

    • Verwenden Sie Ihr MQL5-Konto: Diese Option ist derzeit kostenlos verfügbar. Später können Sie das Abonnement direkt von Ihrem MQL5-Kontostand aus bezahlen.
    • Verwenden Sie einen OpenAI-Schlüssel, wenn Sie ein Abonnement erworben haben und den entsprechenden Schlüssel besitzen.

    Prompt-Einstellungen:

    • Model — ein neuronales Netzwerk, das Ihre Anfragen verarbeitet. text-davinci-003 und gpt-3.5-turbo sind derzeit verfügbar. Die Unterstützung von gpt-4 wird demnächst hinzugefügt.
    • Maximum tokens — die Anzahl der Texteinheiten, die das Modell als Antwort auf eine Aufforderung zurückgeben kann.
    • Variability — wirkt sich darauf aus, wie genau das neuronale Netz der Aufforderung folgt. Je größer der Wert, desto größer die Zufälligkeit des Ergebnisses. Diese Option entspricht dem Temperaturparameter in OpenAI-Modellen.

  2. Es wurde die Möglichkeit hinzugefügt, die Eigenschaften von ONNX-Modellen anzuzeigen.

    So können Sie den Inhalt der *.onnx-Datei direkt im Editor einsehen. Um ein Beispiel zu sehen, suchen Sie das Projekt ONNX.Price.Prediction unter Toolbox \ Public Projects und wählen Sie Join im Kontextmenü. Das Projekt wird auf Ihren Computer heruntergeladen und erscheint im Navigator.



  3. Es wurde die Möglichkeit hinzugefügt, Modelle für maschinelles Lernen und neuronale Netze mit Netron zu visualisieren. Dieser Viewer unterstützt gängige Modelle, darunter ONNX, TensorFlow Lite, Caffe, Keras und ncnn und weitere.

    Um ein Modell zu betrachten, wählen Sie seine Datei im Navigator und klicken Sie auf "In Netron öffnen". Wenn dieses Dienstprogramm nicht installiert ist, wird seine GitHub-Seite geöffnet, von der Sie das entsprechende Installationsprogramm für Ihr Betriebssystem herunterladen können. Verwenden Sie zum Beispiel Netron-Setup-X.X.X.exe für Windows. Wenn das Programm installiert ist, wird das Modell sofort zur Ansicht im Navigator geöffnet.


    Unterstützte Formate:

    • armnn, caffemodel, circle, ckpt, cmf, dlc, dnn, h5, har, hd5, hdf5, hn, keras, kmodel,
    • lite, mar, meta, mge, mlmodel, mlnet, mlpackage, mnn, model, nb, ngf, nn, nnp,
    • om, onnx, ort, paddle, param, pb, pbtxt, pdiparams, pdmodel, pdopt, pdparams, prototxt, pt, pth, ptl,
    • rknn, t7, tfl, tflite, tmfile, tm, tnnproto, torchscript, uff, xmodel

  4. Aktualisierte UI-Übersetzungen.

Tester

  1. Die Berechnung von "Durchschnitt der Verlustpositionen" im Testbericht wurde korrigiert. Zuvor konnten fälschlicherweise Positionseröffnungen einbezogen werden, wenn dafür Provisionen berechnet wurden.
  2. Verbesserte Optionen für nutzerdefinierte Provisionen im Strategietester. Um ein Symbol zu setzen, geben Sie seinen Namen und nicht den gesamten Pfad an.
  3. Aktualisierte Icons im Strategietester. Neue Metaphern machen sie verständlicher.

Behoben wurde ein Fehler in den Absturzprotokollen.

Web Terminal

  1. Verbesserter Abschnitt in der Handelshistorie:

    • Die Anzeige der Saldo-Operationen in der Handelshistorie, wie Einzahlungen und Abhebungen, Provisionen und Anpassungen, wurde hinzugefügt.
    • Die Anzeige von Summen in der Handelshistorie hinzugefügt: Saldo, Gewinn, Provision, Einzahlungen, Abhebungen und Anzahl der Aufträge, unter anderem.
    • In der mobilen Version können die Vorgänge nun sortiert und der Verlauf nach Tiefe gefiltert werden.




  2. Erweiterte Kontraktspezifikationen für Symbole. Die folgenden Informationen wurden hinzugefügt: Volumenlimit, Tick-Größe und -Wert, anfängliche und begesicherte Marge.
  3. Verbesserte Farbschemata:

    • Schwebende Aufträge werden im Chart grau dargestellt. Die Farbe der Position hängt von der Richtung ab: rot für Verkaufen und blau für Kaufen. Die neuen Farben erleichtern die Navigation, wenn mehrere Vorgänge auf dem Chart angezeigt werden.
    • Bei der Anzeige/Bearbeitung einer Position werden nur diese Position und ihre Niveaus hervorgehoben, während alle anderen Positionen und Aufträge grau erscheinen und ihre Niveaus aus der Preisskala ausgeblendet werden. Auf diese Weise wird es einfacher sein, getrennte Vorgänge zu verwalten.
    • Die Farbe des Stop Loss wurde von rot auf orange geändert, um Verwechslungen mit Verkaufspositionen zu vermeiden.
    • Verbesserte Symbole auf dem Chart, die den Zeitpunkt der Positionsschließung anzeigen. Ein grünes Symbol wird für Positionen verwendet, die durch Take Profit geschlossen wurden, und ein rotes Symbol für solche, die durch Stop Loss geschlossen wurden.

  4. Übersetzungen der Nutzeroberfläche in Arabisch, Bulgarisch, Vietnamesisch, Griechisch, Indonesisch, Malaiisch, Niederländisch, Persisch, Polnisch, Thai, Ukrainisch und Hindi wurden hinzugefügt. Das Webterminal ist jetzt in 24 Sprachen verfügbar.
  5. Türkische UI-Übersetzungen korrigiert.
  6. Änderung und Löschung von schwebenden Aufträgen in der mobilen Version des Web-Terminals behoben.
  7. Der Tooltip für einen geschlossenen Markt auf dem Chart wurde korrigiert.
  8. Die Anzeige der Gewinne in der Schaltfläche zum Schließen der Position im Handelsdialog wurde korrigiert. Der Fehler ist beim partiellen Schließen aufgetreten.
  9. Die Anzeige von Handelsbenachrichtigungen im Chart wurde korrigiert.
  10. Volumenänderung durch Pfeile in der Markttiefe behoben.
  11. Behoben wurde ein Fehler, der dazu führen konnte, dass die Einstellungen laufender Indikatoren unter bestimmten Bedingungen zurückgesetzt wurden.
  12. Die Überprüfung des Nutzernamens bei der Eröffnung neuer Konten wurde korrigiert. Früher führte ein Apostroph im Namen zu einem Fehler.
  13. Die Verarbeitung von Requotes wurde korrigiert. Der Dialog mit den angeforderten Preisen wird unter bestimmten Umständen nicht angezeigt.
  14. Die Anzeige des Ichimoku Kinko Hyo Indikators wurde korrigiert. Die Chikou-Spanne, die Kumo-Aufwärts- und die Kumo-Abwärts-Linien werden mit dem richtigen Versatz angezeigt.
  15. Die Überprüfung der Anfangsmarge bei der Eröffnung neuer Aufträge wurde korrigiert. Der Fehler trat im Buchungssystem von Hedging-Konten auf.
  16. Das Scrollen im Fenster mit den Kontraktspezifikationen  wurde korrigiert.

MQL5.community

  1. Die Website des MQL5 Cloud Network wurde komplett neu gestaltet: https://cloud.mql5.com.

    Erfahren Sie, wie Sie die Rechenleistung von Tausenden von Computern auf der ganzen Welt nutzen können, um Ihre Handelsstrategien zu optimieren. Mit dem MQL5-Cloud-Netzwerk können selbst die schwersten Berechnungen in wenigen Minuten abgeschlossen werden. Besuchen Sie die Website, um zu erfahren, wie Sie an dem Netzwerk teilnehmen und Geld verdienen können, indem Sie Ihre Computerressourcen zur Verfügung stellen.




  2. Verbesserter Screenshot-Bereich in den Marktprodukten. Autoren können jetzt Bilder mit bis zu 1920*1800 Pixeln hochladen, um zu demonstrieren, wie die Anwendungen funktionieren. Die Screenshot-Galerie wurde ebenfalls aktualisiert. Das Karussell zeigt Miniaturbilder an, und ein Klick darauf öffnet Bilder in voller Größe.



  3. Verbesserungen im Bereich Freelance. Die Nutzer erhalten jetzt mehr Tipps, wenn sie ihre ersten Auftrag erteilen wollen:

    • Beispiele für Anforderungsspezifikationen und eine Erinnerung daran, eine hinzuzufügen.
    • Anweisungen zur Erstellung eines Auftrags.
    • Tipps zur Verwendung von Vorlagen.

    Diese Tipps werden Ihnen helfen, den Auftrag zu erstellen und das gewünschte Ergebnis zu erhalten.




24 März 2023
MetaTrader 5 Build 3660: Verbesserungen und Korrekturen

Terminal

  1. Gelegentliche Fehler bei der Erstellung von Plattformprotokollen wurden behoben.
  2. Aktualisierte Übersetzungen der Nutzeroberfläche.

MQL5

  • Die Überprüfung globaler Variablen wurde korrigiert. Bei der Deklaration identischer Variablen in verschiedenen Namensräumen gab der Compiler eine fehlerhafte Warnung aus, dass die Variable bereits deklariert sei.

Web Terminal

  1. Die Nutzeroberfläche wurde ins Portugiesische übersetzt. Das Webterminal ist jetzt in 12 Sprachen verfügbar.
  2. Der Dialog zum Hinzufügen des Indikators Standard Deviation (Standardabweichung) wurde korrigiert.
  3. Kleinere Korrekturen und Verbesserungen.
17 März 2023
MetaTrader 5 Build 3640: Web-Terminal in 11 Sprachen

Web Terminal

  1. Übersetzungen des UI in 10 weit verbreiteten Sprachen wurde hinzugefügt: Vereinfachtes und traditionelles Chinesisch, Französisch, Deutsch, Italienisch, Japanisch, Koreanisch, Spanisch, Türkisch und Russisch. Diese Liste wird in künftigen Versionen noch erweitert werden. Um die Sprache zu wechseln, verwenden Sie das entsprechende Menü:


    Webterminal-Schnittstelle in 11 Sprachen verfügbar


  2. Optimierter Verbindungsmechanismus zum Handelsserver.

MQL5

  1. MQL5: Hinzugefügt wurden die Flags COPY_TICKS_VERTICAL und COPY_RATES_VERTICAL für die Methoden CopyTicks, CopyTicksRange und CopyRates.

    Standardmäßig werden Ticks und Zeitreihendaten entsprechend einer horizontalen Achse in die Matrix kopiert, d. h. die Daten werden am rechten Ende der Zeilen hinzugefügt. Für das Training von ONNX-Modelllaufaufgaben muss eine solche Matrix transponiert werden, um die Eingabedaten einzugeben:

    const long   ExtOutputShape[] = {1,1};    // Ausgangsform des Modells
    const long   ExtInputShape [] = {1,10,4}; // Eingangsform des Modells
    #resource "Python/model.onnx" as uchar ExtModel[]// das Modell als Resource
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    int OnStart(void)
      {
       matrix rates;
    //--- get 10 bars
       if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC,2,10))
          return(-1);
    //--- input a set of OHLC vectors
       matrix x_norm=rates.Transpose();
       vector m=x_norm.Mean(0);               
       vector s=x_norm.Std(0);
       matrix mm(10,4);
       matrix ms(10,4);

    Durch die Angabe des zusätzlichen Flags COPY_RATES_VERTICAL (bzw. COPY_TICKS_VERTICAL für Ticks) beim Aufruf der Methode können Sie die zusätzliche Datentransposition vermeiden:

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    int OnStart(void)
      {
       matrix rates;
    //--- get 10 bars
       if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC|COPY_RATES_VERTICAL,2,10))
          return(-1);
    //--- input a set of OHLC vectors
  2. Neuer Wert in der Enumeration ENUM_CHART_PROPERTY_INTEGER — CHART_SHOW_TRADE_HISTORY. Die Eigenschaft steuert die Anzeige von Handelsgeschäften aus der Handelshistorie im Chart. Verwenden Sie die Funktionen ChartGetInteger und ChartSetInteger, um die Eigenschaft zu erhalten und zu setzen. Weitere Einzelheiten über die Anzeige der Trades im Chart finden Sie in der Dokumentation der Plattform.

MetaEditor

  • Das Einfrieren der Schnittstelle, das unter bestimmten Bedingungen während der Dateikompilierung auftreten konnte, wurde behoben.

Terminal

  • Behoben wurde ein Fehler in den Absturzprotokollen.
10 März 2023
MetaTrader 5 Build 3620: Verbesserungen am Web-Terminal, ONNX-Unterstützung und schnelle Matrix-Multiplikationen in MQL5

Terminal

  1. Die Berechnung des Gesamtgewinns in den Handelsberichten wurde korrigiert.
  2. Aktualisierte Daten für Handelsinstrumente, die über das Fenster Market Watch verfügbar sind.
  3. Korrigiert wurde der Start der Handelsplattform unter Wine 7.0.1 auf Linuxsystemen
  4. Das Hinzufügen von Symbolen zur Markttiefe über die Suchleiste wurde korrigiert. Ein über die Beschreibung gefundenes Symbol konnte nicht durch Anklicken der entsprechenden Zeile in die Liste aufgenommen werden.

MQL5

  1.  Die Unterstützung für Operationen mit ONNX-Modellen (Open Neural Network Exchange) wurde hinzugefügt.

    ONNX ist ein Open-Source-Format für Modelle des maschinellen Lernens. Dieses Format wird von vielen Plattformen unterstützt, darunter Chainer, Caffee2 und PyTorch. Erstellen Sie ein ONNX-Modell mit Hilfe spezieller Tools, integrieren Sie es in Ihre MQL5-Anwendung und nutzen Sie es, um Handelsentscheidungen zu treffen.

    Beschreibungen aller unterstützten Funktionen finden Sie in der Dokumentation. Ein Beispiel für ein ONNX-Testmodell finden Sie unter „öffentliche Projekte“ im MetaEditor. Suchen Sie das Projekt ONNX.Price.Prediction in „Toolbox \ Öffent,iche Projekte“ und wählen Sie im Kontextmenü die Option Teilnehmen. Das Projekt wird auf Ihren Computer heruntergeladen und erscheint im Navigator:


    Ein Beispiel für die Arbeit mit einem ONNX-Modell in öffentlichen Projekten


    Kompilieren Sie das Projekt und lassen Sie es auf EURUSD H1 laufen, um das Ergebnis zu sehen.

    Neben dem Modell und dem MQL5-Code, der es ausführt, enthält das Projekt auch das Python-Skript PricePredictionTraining.py. Es zeigt, wie Sie selbst ein ONNX-Modell erstellen können. Um das Skript auszuführen, installieren Sie Python auf Ihrem Computer und die erforderlichen Module über die Eingabeaufforderung:

    python.exe -m pip install --upgrade pip
    python -m pip install --upgrade tensorflow
    python -m pip install --upgrade pandas
    python -m pip install --upgrade scikit-learn
    python -m pip install --upgrade matplotlib
    python -m pip install --upgrade tqdm
    python -m pip install --upgrade metatrader5
    python -m pip install --upgrade onnx==1.12
    python -m pip install --upgrade tf2onnx
    Anweisungen zur Verwendung von ONNX finden Sie in der Dokumentation.

  2. Unterstützung für General Matrix Multiplikation (GeMM) hinzugefügt. Dieser Algorithmus beschleunigt die Berechnungen auf einigen Prozessortypen durch parallelisierte Aufgaben und optimierte Nutzung der L1/L2/L3-Caches. Die Berechnungsgeschwindigkeit ist vergleichbar mit gängigen Paketen wie der Math Kernel Library (MKL) and OpenBLAS. Ausführliche Vergleichstests werden demnächst veröffentlicht.

    Der neue Algorithmus wird derzeit von der Methode matrix::GeMM unterstützt. Wenn Ihr Prozessor die Befehle AVX and FMA unterstützt (die meisten nach 2013 veröffentlichten Prozessoren unterstützen diese Befehle), wird der Algorithmus automatisch aktiviert.

  3.  Es wurde die Möglichkeit hinzugefügt, Matrizen und Vektoren zur einer DLL zu übertragen. Dies ermöglicht den Import von Funktionen, die die entsprechenden Typen verwenden, aus externen Variablen.

    Matrizen und Vektoren werden an eine DLL als Zeiger auf einen Puffer übergeben. Um zum Beispiel eine Matrix vom Typ float zu übergeben, muss der entsprechende Parameter der aus der DLL exportierten Funktion einen Pufferzeiger vom Typ float aufnehmen. Zum Beispiel:

    MQL5
    #import "mmlib.dll"
    bool sgemm(uint flags,matrix<float> &C,const matrix<float> &A,const matrix<float> &B,ulong M,ulong N,ulong K,float alpha,float beta);
    #import
    C++
    extern "C" __declspec(dllexport) bool sgemm(UINT flags,float *C,const float *A,const float *B,UINT64 M,UINT64 N,UINT64 K,float alpha,float beta)
    Zusätzlich zu den Puffern sollten Sie Matrix- und Vektorgrößen für eine korrekte Verarbeitung übergeben.

  4. Die neue Funktion CopySeries zum Kopieren von synchronisierten Zeitreihen aus MqlRates in separate Arrays hinzugefügt.

    Die Funktion CopySeries ermöglicht es, mit einem einzigen Aufruf nur die erforderlichen Zeitreihen in verschiedene spezifizierte Arrays zu erhalten, wobei alle Zeitreihendaten synchronisiert werden. Das bedeutet, dass alle Werte in den resultierenden Arrays bei einem bestimmten Index N zum selben Balken des angegebenen Symbol/Zeitrahmenpaares gehören. Daher muss der Programmierer die empfangenen Zeitreihen nicht zusätzlich mit der Eröffnungszeit der Balken synchronisieren.

    Im Gegensatz zu CopyRates, das den gesamten Satz von Zeitreihen als MqlRates-Array zurückgibt, ermöglicht die Funktion CopySeries, bestimmte erforderliche Zeitreihen in separaten Arrays zu erhalten. Dies kann durch die Angabe einer Kombination von Flags geschehen, um den Typ der Zeitreihe auszuwählen. Die Reihenfolge der an die Funktion übergebenen Arrays muss mit der Reihenfolge der Felder in der MqlRates-Struktur übereinstimmen:

    struct MqlRates
      {
       datetime time;         // period beginning time
       double   open;         // open price
       double   high;         // high price for the period
       double   low;          // low price for the period
       double   close;        // close price
       long     tick_volume;  // tick volume
       int      spread;       // spread
       long     real_volume;  // exchange volume
      }

    Wenn Sie also die Werte der Zeitreihen „time“, „close“ und „real_volume“ für die letzten 100 Balken des aktuellen Symbols/Zeitrahmens abrufen möchten, sollten Sie den folgenden Aufruf verwenden:

    datetime  time[];
    double    close[];
    long      volume[];
    CopySeries(NULL,0,0,100,COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_VOLUME_REAL,time,close,volume);
    

    Die Reihenfolge der Arrays „time, close, volume“ muss mit der Reihenfolge der Felder in der Struktur MqlRates übereinstimmen. Die Reihenfolge der Werte in der Maske rates_mask wird nicht berücksichtigt. Die Maske könnte auch folgendermaßen aussehen:

    COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE

    Beispiel

    //--- input parameters
    input datetime InpDateFrom=D'2022.01.01 00:00:00';
    input datetime InpDateTo  =D'2023.01.01 00:00:00';
    input uint     InpCount   =20;
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart(void)
      {
    //--- arrays to get timeseries from the Rates structure
       double   open[];
       double   close[];
       float    closef[];
       datetime time1[], time2[];
    //---request close prices to a double array
       ResetLastError();
       int res1=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE, time1, close);
       PrintFormat("1. CopySeries  returns %d values. Error code=%d", res1, GetLastError());
       ArrayPrint(close);
       
    
    //--- now also request open prices; use float array for close prices
       ResetLastError();
       int res2=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_OPEN, time2, open, closef);
       PrintFormat("2. CopySeries  returns %d values. Error code=%d", res2, GetLastError());
       ArrayPrint(closef);
    //--- compare the received data
       if((res1==res2) && (time1[0]==time2[0]))
         {
          Print("  | Time             |    Open      | Close double | Close float |");
          for(int i=0; i<10; i++)
            {
             PrintFormat("%d | %s |   %.5f    |   %.5f    |   %.5f   |",
                         i, TimeToString(time1[i]), open[i], close[i], closef[i]);
            }
         }
    /*  Result
            1. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
            2. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
              | Time             |    Open      | Close double | Close float |
            0 | 2023.03.01 17:00 |   1.06660    |   1.06722    |   1.06722   |
            1 | 2023.03.01 18:00 |   1.06722    |   1.06733    |   1.06733   |
            2 | 2023.03.01 19:00 |   1.06734    |   1.06653    |   1.06653   |
            3 | 2023.03.01 20:00 |   1.06654    |   1.06520    |   1.06520   |
            4 | 2023.03.01 21:00 |   1.06520    |   1.06573    |   1.06573   |
            5 | 2023.03.01 22:00 |   1.06572    |   1.06649    |   1.06649   |
            6 | 2023.03.01 23:00 |   1.06649    |   1.06694    |   1.06694   |
            7 | 2023.03.02 00:00 |   1.06683    |   1.06675    |   1.06675   |
            8 | 2023.03.02 01:00 |   1.06675    |   1.06684    |   1.06684   |
            9 | 2023.03.02 02:00 |   1.06687    |   1.06604    |   1.06604   |
    */
      }
  5. Die Operation der Funktion OrderSend wurde korrigiert. Die Funktionsabfrage konnte ein falsches Auftragsticket zurückgeben, wenn das gleiche Konto gleichzeitig auf mehreren Plattformen verwendet wurde.
  6. Der Import von EX5-Bibliotheken wurde korrigiert. Ein Fehler trat auf, wenn der Name der importierten Bibliothek mit dem Namen der Datei übereinstimmte, in die sie importiert wurde.

MetaEditor

  1.  Das Senden von Push-Benachrichtigungen im Rahmen eines „shared projects“ wurde hinzugefügt. Mit der neuen Option können Nutzer über Änderungen in Projekteinstellungen und Dateien benachrichtigt werden. Um Benachrichtigungen zu aktivieren, geben Sie Ihre MetaQuotes-ID unter dem Abschnitt „Einstellungen \ Sicherheit“ Ihres titleMQL5.community-Profilstitle ein.


    Push-Benachrichtigungen über Projektaktualisierungen


  2. Aktualisierte Dateisymbole im Navigator. Neue, einfachere Metaphern werden sie verständlicher machen.

Tester

  1. Es wurde ein Fehler behoben, der dazu führte, dass der Eingabe-String-Parameter abgeschnitten wurde, wenn er das Zeichen „|“ enthielt.

MetaTrader 5 Web Terminal Build 3620

  1. Es wurden vorbereitete Farbvorlagen für die Webterminal-Schnittstelle hinzugefügt. Die Vorlagen wirken sich auf die Anzeige der Balken und Linien im Chart sowie auf die Preise im Market Watch und in der Kontodarstellung aus. Unser Designteam hat auf der Grundlage Ihrer Vorschläge und traditioneller Farbkombinationen Farbvorlagen vorbereitet.


    Neue Webterminal-Farbvorlagen


  2. Das Fenster für die Spezifikation von Symbolen wurde neu gestaltet. Die Daten der Handelsinstrumente wurden zur besseren Übersichtlichkeit in logische Blöcke gegliedert.


    Aktualisiertes Fenster für die Spezifikation von Handelsinstrumenten


  3. Das Eröffnen von Echtgeldkonten über das Webterminal wurde korrigiert. Der Server konnte nach dem Ausfüllen eines Registrierungsformulars einen Fehler zurückgeben.
  4. Ein Fehler im Handelsdialog wurde behoben. Wenn der Nutzer eine Position durch Drücken der X-Taste im Toolbox-Fenster schloss, während der Dialog zur Positionsänderung geöffnet war, wurde der Inhalt des Dialogs nicht zurückgesetzt. Nach der Aktualisierung wird der Dialog in diesem Fall automatisch auf einen neuen Modus für die Auftragserteilung zurückgesetzt.
  5. Die Anzeige des Feldes „Server“ im Kontoverwaltungsdialog wurde korrigiert.
  6. Die Anzeige des aktuellen Zeitrahmens in der Symbolleiste wurde korrigiert.
  7. Die Anzeige der Volumina in Bezug auf die Einheiten des Basiswerts im Handelsdialog wurde korrigiert.
  8. Die Änderung der Stop-Loss- und Take-Profit-Ebenen wurde korrigiert. Die Änderung eines der Werte kann unter bestimmten Bedingungen den zweiten Wert zurücksetzen.
  9. Die Anzeige von Warnungen vor Investitionsrisiken wurde korrigiert.
6 März 2023
MetaTrader 5 für iPhone/iPad: Verbesserte On-Chart-Handels- und Analysefunktionen
  1. Es wurde die Möglichkeit hinzugefügt, Stop- und Stop-Limit-Orders aus dem Chart heraus zu platzieren.

    In früheren Versionen waren nur Limit-Aufträge verfügbar. Wählen Sie den gewünschten Typ, indem Sie nacheinander auf die Schaltfläche im unteren Chartbereich drücken.


    Stop- und Stop-Limit-Aufträge vom Chart aus platzieren


  2. Es wurde die Möglichkeit hinzugefügt, vom Chart aus auf die Funktionen zum Schließen von Positionen oder zum Löschen von schwebenden Aufträgen zuzugreifen. Wählen Sie eine Position oder einen Auftrag im Chart aus, und der entsprechende Befehl wird im Paneel unten im Chart angezeigt:


    Positionen und Aufträge vom Chart aus verwalten


  3. Verbesserte Funktionsweise, die den rechten Rand des Preischarts verschiebt. Um zu verschieben, scrollen Sie einfach im Chart zum letzten Preis, bis eine vertikale Trennlinie erscheint. Bewegen Sie dann das Dreieck auf der unteren Chartskala:


    Ändern der Verschiebung des Charts durch Ziehen des Dreiecks an der unteren Skala


  4. Es wurde die Möglichkeit hinzugefügt, analytische Objekte im Chart zu kopieren. Dies ermöglicht eine schnellere Chartgestaltung. Öffnen Sie das Objektmenü mit einem langen Druck und wählen Sie "Kopieren":

    Kopien von analytischen Objekten erstellen


  5. Es wurde die Möglichkeit hinzugefügt, die Anzeige von Indikatoren auf verschiedenen Zeitrahmen zu verwalten. Wenn der Indikator für bestimmte Chartperioden nicht geeignet ist, kann er ausgeblendet werden, um Platz auf dem Bildschirm für andere Analysetools zu schaffen.


    Verwalten der Anzeige von Indikatoren in verschiedenen Zeitrahmen


  6. Die Anzeige von Symbolkommissionen im Instrumentenspezifikationsfenster wurde hinzugefügt.


    Ermitteln Sie den Provisionsbetrag in der Instrumentenspezifikation


  7. Link zur Passwortwiederherstellung hinzugefügt. Das Passwort eines Kontos kann nur über den jeweiligen Broker wiederhergestellt werden. Der Link zeigt die Kontaktdaten des Maklers an.


    Hilfe bei der Passwortwiederherstellung


  8. Es wurde die Möglichkeit hinzugefügt, einen Link zu an MQL5.community channel zu teilen.


    Teilen Sie einen Link zu Ihrem Kanal über die App


  9. Verbesserte Nutzerfreundlichkeit bei der Verbindung zu einem Konto mit einer Handelsbeschränkungen.

    Der Handel kann aus verschiedenen Gründen eingeschränkt werden: Login mit dem Investor-Passwort; eine Handelsvereinbarung wurde nicht akzeptiert; die Überprüfung des Brokers wurde nicht abgeschlossen und andere. Früher wurde der Grund für die Einschränkung der Handelsfunktionen nicht erklärt.

    Wenn der Handel eingeschränkt ist, ist die Schaltfläche zum Erteilen von Aufträgen im Bereich Handel ausgegraut. Wenn Sie darauf drücken, werden die entsprechenden Informationen und Empfehlungen angezeigt.


    Hilfreiche Informationen, wenn der Handel eingeschränkt ist


  10. Verbesserter Arbeitsablauf mit SSL-Zertifikaten, die für die erweiterte Authentifikation verwendet werden.

    Wenn sich der Nutzer mit einem Konto mit erweiterter Authentifizierung verbindet, zeigt die App nun eine kurze Beschreibung der erforderlichen Aktionen an.


    Verbessertes Arbeiten mit SSL-Zertifikaten


    Ein Zertifikat kann aus einer PFX-Datei importiert werden. Speichern Sie die benötigte Datei in der App Datei-App und verwenden Sie dann die Importfunktion im Startdialog.

    Es ist jetzt auch möglich, Zertifikate in Dateien zu importieren, was die Verwendung von Zertifikaten auf anderen Geräten ermöglicht. Gehen Sie dazu zu Einstellungen \ Zertifikate und wählen Sie im Zertifikatsmenü "Exportieren".

  11. Die Konstruktion von Preischarts wurde auf „Metal“ übertragen. Das ist die neuesten Generation der in Apple-Geräten verwendeten Grafik-API. Dadurch wird die Leistung beim Rendern des Charts, von Indikatoren und Objekten erheblich gesteigert.
  12. Feste Ersetzung der Stop-Loss- und Take-Profit-Ebenen in der Markttiefe. Bei FIFO-Konten werden die Stop-Levels automatisch in Übereinstimmung mit den Stop-Levels der bestehenden offenen Positionen für dasselbe Instrument gesetzt. Dieses Verfahren ist erforderlich, um die FIFO-Regel einzuhalten.
  13. Reaktivierung behoben. Wenn ein neues Angebot zurückkommt, hat der Nutzer eine kurze Frist, um die neuen Preise zu akzeptieren oder abzulehnen. Wird innerhalb des erforderlichen Zeitrahmens nichts unternommen, wird der Antrag automatisch abgelehnt und das Requote-Fenster geschlossen.
  14. Die Anzeige der Zeit im Chartbereich bei Verwendung des dunklen Oberflächenthemes wurde korrigiert.
16 Dezember 2022
MetaTrader 5 Build 3550: Verbesserungen und Korrekturen

MetaTrader 5 Client Terminal Build 3550

  1. Terminal: Aktualisierte Übersetzungen der Nutzeroberfläche.
  2. Korrekturen aufgrund von Absturzprotokollen.

MetaTrader 5 Web Terminal Build 3550

9 Dezember 2022
MetaTrader 5 Build 3540: 2FA/TOTP-Authentifizierung und verbesserte Marktbeobachtung im Webterminal

Web Terminal

  1. 2FA/TOTP-Authentifizierung mit Google Authenticator und ähnlichen Anwendungen hinzugefügt.

    Die 2FA/TOTP-Authentifizierung schützt ein Handelskonto vor unbefugtem Zugriff, selbst wenn dessen Login und Passwort bekannt geworden sind. Die Authentifizierung mit dem One-Time-Password-Algorithmus (TOTP) kann mit verschiedenen mobilen Anwendungen umgesetzt werden. Die bekanntesten davon sind Google Authenticator, Microsoft Authenticator, LastPass Authenticator und Authy. Jetzt können Sie sich mit Ihrem Konto im MetaTrader 5-Client-Terminal verbinden, indem Sie Einmalpasswörter verwenden, die von solchen Authenticator-Apps generiert werden.

    Um die Zwei-Faktor-Authentifizierung zu aktivieren, verbinden Sie sich über das MetaTrader 5 Web Terminal mit Ihrem Konto. Klicken Sie dann im Menü auf Ihr Konto und wählen Sie im neu geöffneten Dialog „Enable 2FA“ (2FA aktivieren). Starten Sie die Authenticator-App auf Ihrem Mobilgerät, klicken Sie auf „+“, um Ihr Handelskonto hinzuzufügen, und scannen Sie den QR-Code vom Terminal. Geben Sie den generierten Code in das Feld „One-time password“ (Einmalpasswort) ein und klicken Sie auf „Enable 2FA“ (2FA aktivieren). Für Ihr Konto wird auf dem Handelsserver des Brokers ein Geheimcode registriert.


    Unterstützung für 2FA/TOTP-Authentifizierung mit Google Authenticator und ähnlichen Apps wurde hinzugefügt.


    Der gespeicherte Geheimcode wird in der Authenticator-App verwendet, um jedes Mal, wenn Sie sich mit Ihrem Konto verbinden, ein Einmalpasswort, One-time password oder OTP, zu generieren. Jedes Passwort ist 30 Sekunden lang gültig. Danach wird ein Neues erstellt.


    Für die Verbindung mit dem Konto ist ein zusätzliches Einmalpasswort, ein One-Time Password oder OTP, von der Authenticator-App erforderlich


    Im QR-Code-Dialog wird auch ein Backup-Code für die Verknüpfung mit dem Generator angezeigt. Bewahren Sie sie an einem sicheren Ort auf. Wenn Sie den Zugang zu Ihrem verknüpften Gerät verlieren, können Sie mit dem Code Ihr Konto wieder zur Authenticator-App hinzufügen.

    Wenn Sie sich entscheiden, den gespeicherten Geheimcode aus der Authenticator-App zu entfernen, sollten Sie zunächst die 2FA/TOTP-Authentifizierung über den entsprechenden Befehl im Kontextmenü des Kontos deaktivieren. Wenn die neue 2FA/TOTP-Authentifizierungsmethode auf Ihrem Konto nicht verfügbar ist, wenden Sie sich bitte an Ihren Broker.

  2. Die Anzahl der im Market Watch angezeigten Daten wurde erweitert. Zusätzlich zu den aktuellen Bid/Ask (Geld-/Briefkursen) und der prozentualen Preisänderung können Sie nun sehen:

    • Maximaler und minimaler Geld-/Briefkurs für die aktuelle Handelssitzung
    • Eröffnungskurse der aktuellen Handelssitzung und Schlusskurse der vorherigen Handelssitzung

    Verwenden Sie das Kontextmenü, um die angezeigten Informationen anzupassen:


    Zusätzliche Daten der Marktübersicht


  3. Die Anzeige von Risikomeldungen wurde hinzugefügt, wenn eine entsprechende Einstellung auf der Seite des Brokers aktiviert ist. Einige Regulierungsbehörden verlangen, dass die Händler die Meldung vor dem Handel lesen und akzeptieren.
  4. Die Anzeige der oberen Symbolleiste auf iPhone-Modellen mit einer Aussparung am oberen Rand des Bildschirms wurde korrigiert. Zuvor konnte sie gelegentlich die Tasten des Bedienfelds verdecken.
  5. Die Anzeige der endgültigen Finanzparameter des Kontos (Gewinn, Eigenkapital usw.) im Google Chrome Browser wurde korrigiert. Manchmal wurden sie nicht aktualisiert.

Terminal

  1. Der Dialog zur Eröffnung eines Demokontos wurde optimiert und stark beschleunigt.
  2. Aktualisierte Übersetzungen der Nutzeroberfläche.
  3. Korrekturen aufgrund von Absturzprotokollen.

MQL5

  1. Der Klasse COpenCL der Standardbibliothek wurden neue Methoden hinzugefügt:

    • BufferFromMatrix — Füllen des Gerätepuffers mit Daten aus der Matrix
    • BufferToMatrix — Einlesen der Daten aus dem Gerätepuffer in die Matrix
    • ContextCreate — Erstellung des Gerätekontexts (der erste Teil der Initialisierungsmethode )
    • ProgramCreate — Erstellung eines Programms auf der Grundlage des OpenCL-Quellcodes (der zweite Teil der Initialisierungsmethode)
    • ContextClean — Freigabe aller zum Gerätekontext gehörenden Daten (ähnlich wie bei der Methode Shutdown, jedoch ohne den Kontext zu entfernen)
    • GetDeviceInfoInteger — Empfangen einer ganzzahligen Geräteeigenschaft
    • GetKernelInfoInteger — Empfangen einer ganzzahligen Kernel-Eigenschaft
    • GetDeviceInfo — empfängt jede einzelne ganzzahlige Geräteeigenschaft, die nicht in der Aufzählung ENUM_OPENCL_PROPERTY_INTEGER enthalten ist

    Verwendungsbeispiel von GetDeviceInfo;
    long preferred_workgroup_size_multiple=OpenCL.GetDeviceInfo(0x1067);
  2. Die Werte TERMINAL_CPU_NAME und TERMINAL_OS_VERSION wurden zur Enumeration ENUM_TERMINAL_INFO_STRING hinzugefügt. Sie ermöglichen den Empfang der CPU- und Betriebssystemnamen des Nutzers.
    void OnStart()
      {
       string cpu,os;
    //---
       cpu=TerminalInfoString(TERMINAL_CPU_NAME);
       os=TerminalInfoString(TERMINAL_OS_VERSION);
       PrintFormat(„CPU: %s, OS: %s“,cpu,os);
      }
    
    Ergebnis:
    CPU: Intel Xeon  E5-2630 v4 @ 2.20GHz, OS: Windows 10 build 19045
  3. Die Funktion des Parameters „table_or_sql“ in den Funktionen DatabasePrint und DatabaseExport wurde korrigiert. Jetzt kann er zusätzlich zu einer SQL-Abfrage auch einen Tabellennamen übergeben.

MetaEditor

  1. Die Prüfung der maximalen Anzahl der anzeigbaren Spalten in der Datenbank wurde korrigiert. Es können jetzt bis zu 64 Spalten angezeigt werden.
  2. Die Bedienung von Haltepunkten in kurzen Konstruktionen wie IF[ if(cond) break; ] wurde korrigiert.
25 November 2022
MetaTrader 5 Build 3520: 2FA/TOTP-Authentifizierung mit dem Google Authenticator

Terminal

  1. 2FA/TOTP-Authentifizierung mit Google Authenticator und ähnlichen Anwendungen hinzugefügt.

    Die 2FA/TOTP-Authentifizierung schützt ein Handelskonto vor unbefugtem Zugriff, selbst wenn dessen Login und Passwort bekannt werden. Die Authentifizierung mit dem One-Time-Password-Algorithmus (TOTP) kann mit verschiedenen mobilen Anwendungen umgesetzt werden. Die bekanntesten davon sind Google Authenticator, Microsoft Authenticator, LastPass Authenticator und Authy. Jetzt können Sie sich mit Ihrem Konto im MetaTrader 5-Client-Terminal verbinden, indem Sie Einmalpasswörter verwenden, die von solchen Authenticator-Apps generiert werden.

    Um die Zwei-Faktor-Authentifizierung zu aktivieren, verbinden Sie sich mit Ihrem Konto und führen Sie den Befehl "2FA/TOTP aktivieren" im Kontextmenü Ihres Kontos aus. Starten Sie die Authenticator-App auf Ihrem Mobilgerät, klicken Sie auf "+", um Ihr Handelskonto hinzuzufügen, und scannen Sie den QR-Code vom Terminal. Geben Sie den generierten Code in das Feld "Einmaliges Passwort" ein und klicken Sie auf "2FA aktivieren". Für Ihr Konto wird auf dem Handelsserver des Brokers ein Geheimcode registriert.


    Unterstützung für 2FA/TOTP-Authentifizierung mit Google Authenticator und ähnlichen Apps wurde hinzugefügt.

    Der gespeicherte Geheimcode wird in der Authenticator-App verwendet, um jedes Mal, wenn Sie sich mit Ihrem Konto verbinden, ein Einmalpasswort, One-time password oder OTP, zu generieren. Jedes Passwort ist 30 Sekunden lang gültig. Danach wird ein Neues erstellt.



    Für die Verbindung mit dem Konto ist ein zusätzliches Einmalpasswort, ein One-Time Password oder OTP, von der Authenticator-App erforderlich

    Wenn Sie sich entscheiden, den gespeicherten Geheimcode aus der Authenticator-App zu entfernen, sollten Sie zunächst die 2FA/TOTP-Authentifizierung über den entsprechenden Befehl im Kontextmenü des Kontos deaktivieren. Wenn die neue 2FA/TOTP-Authentifizierungsmethode auf Ihrem Konto nicht verfügbar ist, wenden Sie sich bitte an Ihren Broker.

MQL5

  1. Die Funktion CopyTicks für nutzerdefinierte Handelsinstrumente wurde korrigiert. Bei der Arbeit mit nutzerdefinierten Symbolen konnten unter bestimmten Bedingungen die Anfangsticks der vorherigen Sitzung anstelle der angeforderten Daten zurückgegeben werden.

  2. MQL5: Es wurden neue Enumerationswerte hinzugefügt, um den letzten OpenCL-Fehlercode und die Textbeschreibung zu erhalten.
    1. Der Wert CL_LAST_ERROR (Zahl: 4094) wurde der Enumeration ENUM_OPENCL_PROPERTY_INTEGER hinzugefügt

      Beim Abrufen des letzten OpenCL-Fehlers über CLGetInfoInteger wurde der Parameter handle ignoriert. Fehlerbeschreibungen: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.
      Bei einem unbekannten Fehlercode wird die Zeichenfolge "unknown OpenCL error N" zurückgegeben, wobei N der Fehlercode ist.

      Beispiel:
      //--- the first handle parameter is ignored when obtaining the last error code
      int code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);

    2. Der Wert CL_ERROR_DESCRIPTION (4093) wurde der Enumeration ENUM_OPENCL_PROPERTY_STRING hinzugefügt.
      Eine textuelle Fehlerbeschreibung kann mit CLGetInfoString abgerufen werden. Fehlerbeschreibungen: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.

      Wenn CL_ERROR_DESCRIPTION verwendet wird, sollte ein Fehlercode als Parameter handle in CLGetInfoString übergeben werden. Wenn CL_LAST_ERROR anstelle des Fehlercodes übergeben wird, gibt die Funktion die letzte Fehlerbeschreibung zurück.

      Beispiel:
      //--- get the code of the last OpenCL error
      int    code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);
      string desc; // to get the text description of the error
      
      //--- use the error code to get the text description of the error
      if(!CLGetInfoString(code,CL_ERROR_DESCRIPTION,desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      
      
      //--- to get the description of the last OpenCL error without receiving the code, pass CL_LAST_ERROR  
      if(!CLGetInfoString(CL_LAST_ERROR,CL_ERROR_DESCRIPTION, desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      Der interne Name der Enumeration wird als Fehlerbeschreibung übergeben. Die Erklärung dazu finden Sie unter https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS. Der Wert CL_INVALID_KERNEL_ARGS bedeutet beispielsweise "Wird zurückgegeben, wenn der Kernel in die Prozess-Enqueue gestellt wird und einige Kernel-Argumente nicht gesetzt oder ungültig sind."

  3. Die Funktion der Methode matrix::MatMul wurde korrigiert. Bei der Arbeit mit großen Matrizen konnte das Terminal bei bestimmten Größen abstürzen.

Behoben wurde ein Fehler in den Absturzprotokollen.
18 November 2022
MetaTrader 5 Build 3510: Verbesserungen am Web-Terminal

MetaTrader 5 WebTerminal

  1. In der mobilen Version haben wir das Sortieren der Handelshistorie und leistungsfähige Filter implementiert. Verwenden Sie die Befehle des oberen Bedienfeld, um die Anzeige der Historie anzupassen:


    Anpassbare Ansicht der Handelshistorie in der mobilen Version


    Die Vorgänge können nach den wichtigsten Parametern sortiert werden, wie z. B. Datum, Ticket, Symbol und Volumen, um nur einige zu nennen.

  2. Verbesserter Zugang zu den Details des Handelskontos.

    • In der Desktop-Version sind die aktuellen Kontodaten anklickbar. Klicken Sie auf das Konto, um seine Details anzuzeigen.
    • In der mobilen Version wird das aktuelle Konto unter dem Abschnitt Einstellungen angezeigt. Klicken Sie auf das Konto, um seine Details anzuzeigen.


    Verbesserter Zugang zu Handelskontodaten

  3. Die Anzeige des Kontotyps im Fenster der Kontoverwaltung wurde korrigiert.
  4. Korrigiert wurde die Anzeige des Kapitals und der freien Marge nach der Seitenaktualisierung des Webterminals in mobilen Browsern.
  5. Die Anzeige der unteren Leiste im mobilen Firefox-Browser wurde korrigiert.

Terminal

  1. Korrigiert wurde die Berechnungen von Kapital und Saldo im Handelsbericht.

MQL5

  1. Neues Verhalten von typename(expr). Die aktualisierte Funktion gibt den vollständigen Typ mit Modifikatoren und Dimensionen (für Arrays) zurück:
    Klasse A
      {
      };
    
    void OnStart(void)
      {
       const A *const arr[][2][3]={};
       Print(typename(arr));
      }
    
    Ergebnis:
    "class A const * const [][2][3]"
Behoben wurde ein Fehler in den Absturzprotokollen.
11 November 2022
MetaTrader 5 Build 3500: Verbesserungen und Korrekturen

Terminal

  1. Das Kontextmenü der Abschnitte Handel und Historie wurde um einen neuen Befehl ergänzt, der den Zugriff auf den neuen Handelsbericht ermöglicht.


    Der Handelsbericht enthält die folgenden Leistungsdaten:
    • Diagramme und Tabellen zur Visualisierung der monatlichen Wachstumsmetriken
    • Kapitaldiagramm
    • Sterndiagramm, das eine schnelle Bewertung der Kontosituation ermöglicht
    • Handelsstatistiken nach Instrumenten
    • Eine Vielzahl zusätzlicher Metriken für die Handelsanalyse

  2. Korrigierte Berechnungen der Ersteinlage im Handelsbericht.
  3. Die Einstellung der Stop-Loss- und Take-Profit-Level bei Verwendung des Quick-Trading-Paneels im Chart und Market Watch wurde korrigiert. Die Level konnten von zuvor eröffneten Positionen übernommen werden, auch wenn die Übernahme nicht erforderlich war (die entsprechende Funktionsweise ist für FIFO-basierte Konten implementiert).
  4. Aktualisierte Übersetzungen der Nutzeroberfläche.

MQL5

  1. Es wurde ein Compilerfehler behoben, der den Zugriff auf ein Strukturfeld über eine konstante Zeichenkette mit dem Wert des Feldnamens ermöglichte.
  2. Die Prüfung von Tastenzuständen mit der Funktion TerminalInfoInteger(TERMINAL_KEYSTATE_*) wurde korrigiert.

Fehler in den Absturzprotokollen wurden behoben.

MetaTrader 5 WebTerminal Version 3500

  1. Ein Fehler, durch den Positionen bei Requotes geschlossen wurden, wurde korrigiert.
  2. Die Verbindung zum Server wurde wiederhergestellt, nachdem ein Browser-Fenster maximiert wurde, das lange Zeit inaktiv war.
  3. Korrigierte Anzeige der Kreditmittel.
  4. Verbesserungen und Korrekturen
4 November 2022
MetaTrader 5 Build 3490: Die Version des Mobile Web Terminals und neue Matrix-Methoden in MQL5

Mobile Version der Webplattform

Das neue Web-Terminal bietet eine umfassende Unterstützung für mobile Geräte. Die Oberfläche passt sich automatisch an die Bildschirmgröße an und ermöglicht so eine effiziente Bedienung von iOS- und Android-Handys und -Tablets:


Außerdem bietet das Web-Terminal eine Reihe von Korrekturen und Verbesserungen.

Das neue MetaTrader 5 Web-Terminal unterstützt den vollen Umfang der Handelsfunktionen. Es ermöglicht den Nutzern:

  • die Arbeit mit Demo- und Live-Konten,
  • den Erhalt von Preise für jede Art von Finanzsymbolen,
  • den Handel auf allen Märkten,
  • die Analyse der Preise der Symbole mit mehr als 30 Indikatoren und 20 grafischen Objekten,
  • die Nutzung der Wirtschaftskalenderdaten für die Fundamentalanalyse,


Terminal

  1. Erweiterte Funktionen des Task-Managers. Die neue Version ermöglicht eine genauere Überwachung der verwendeten Ressourcen.

    • Die Anzeige der Stackgröße für Threads wurde hinzugefügt.
    • Die Anzeige der Anzahl der Kontextwechsel wurde hinzugefügt.
    • Erkennung von System- und Drittanbieter-DLL-Threads hinzugefügt.
    • Anzeige der Betriebszeit im Kernel-Modus hinzugefügt. Ein Anstieg dieser Kennzahl im Vergleich zu der im Nutzermodus verbrachten Zeit kann auf Probleme auf Systemebene hinweisen: Treiberprobleme, Hardwarefehler oder langsame Hardware. Für weitere Details lesen Sie bitte die Microsoft Dokumentation.
    • Die Anzeige der Betriebszeit im Nutzermodus wurde hinzugefügt.




  2. Neue OpenCL-Registerkarte in den Terminaleinstellungen zur Verwaltung der verfügbaren Geräte. Der neue OpenCL-Manager ermöglicht die explizite Angabe von Geräten, die für Berechnungen verwendet werden sollen.




  3. Hinzugefügt wurde die Darstellung von Stop-Loss und Take-Profit in der Markttiefe für Konten, die im FIFO-Modus arbeiten (der Modus kann auf der Seite des Brokers aktiviert werden).

    Nach der FIFO-Regel können die Positionen für jedes Instrument nur in der gleichen Reihenfolge geschlossen werden, in der sie eröffnet wurden. Um durch die Stopp-Level die Positionen FIFO-konforme zu schließen, wurde auf der Seite des Client-Terminals folgende Logik implementiert:

    Wenn mehrere Positionen für dasselbe Instrument bestehen, führt das Setzen von Stopp-Levels für eine der Positionen dazu, dass die gleichen Levels auch für alle anderen Positionen gesetzt werden. Dementsprechend werden bei Auslösung eines Levels alle Positionen in einer FIFO-konformen Reihenfolge geschlossen.

    Wenn der Nutzer nun die Markttiefe für ein Instrument öffnet, für das bereits offene Positionen bestehen, werden die Niveaus der bestehenden Positionen (falls vorhanden) automatisch in den Feldern Stop-Loss und Take-Profit angegeben.

  4. Das Löschen von Stop-Loss- und Take-Profit-Levels mit Hilfe der X-Schaltflächen im Toolbox\Trade-Fenster wurde korrigiert. Der Fehler trat auf, wenn die Schnellhandelsfunktion deaktiviert war. Ein Klick auf die Schaltfläche öffnet einen Handelsdialog mit einem leeren Wert des entsprechenden Levels.

  5. Die Beschriftung der Grafiken und die Berechnung der Endprovisionen im Handelsbericht wurden korrigiert. Der Abschnitt konnte falsche Gewinne in den Berichtsstatistiken und falsche Werte in den Tooltips der Kapital- und Saldendiagramme anzeigen.

MQL5

  1. Die Vektor- und Matrixmethoden CopyTicks und CopyTicksRange wurden hinzugefügt. Sie ermöglichen das einfache Kopieren von Arrays mit Tickdaten in Vektoren und Matrizen.
    bool matrix::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    bool vector::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    Der kopierte Datentyp wird im Parameter rates_mask unter Verwendung der Enumeration ENUM_COPY_RATES angegeben. Die folgenden Werte sind verfügbar:
    COPY_TICKS_INFO    = 1,       // Ticks aufgrund der Änderungen von Bid and/or Ask
    COPY_TICKS_TRADE   = 2,       // Ticks aufgrund der Änderungen von Last und Volumen
    COPY_TICKS_ALL     = 3,       // alle Ticks haben sich geändert
    COPY_TICKS_TIME_MS = 1<<8,    // Zeit in Millisekunden
    COPY_TICKS_BID     = 1<<9,    // Bid-Preis
    COPY_TICKS_ASK     = 1<<10,   // Ask-Preis
    COPY_TICKS_LAST    = 1<<11,   // Last-Preis
    COPY_TICKS_VOLUME  = 1<<12,   // Volume
    COPY_TICKS_FLAGS   = 1<<13,   // Tick-Flags
    Wenn mehrere Datentypen ausgewählt werden (nur bei Matrizen möglich), entspricht die Reihenfolge der Zeilen in der Matrix der Reihenfolge der Werte in der Enumeration.

  2. Erweiterte Funktionen der Methoden matrix::Assign und vector::Assign.

    Jetzt kann der Matrix ein eindimensionales Array oder ein Vektor zugewiesen werden:
    bool matrix::Assign(const vector &vec);
    Das Ergebnis wird eine einzeilige Matrix sein.

    Außerdem kann jetzt eine Matrix einem Vektor zugewiesen werden (es wird Matrixglättung durchgeführt):
    bool vector::Assign(const matrix &mat);
  3. Swap-Methoden für Vektoren und Matrizen hinzugefügt.
    bool vector::Swap(vector &vec);
    bool vector::Swap(matrix &vec);
    bool vector::Swap(double &arr[]);
    bool matrix::Swap(vector &vec);
    bool matrix::Swap(matrix &vec);
    bool matrix::Swap(double &arr[]);
    Jedes Array, jeder Vektor oder jede Matrix verweist auf einen Speicherpuffer, der die Elemente des betreffenden Objekts enthält. Die Swap-Methode tauscht tatsächlich die Zeiger auf diese Puffer aus, ohne die Elemente in den Speicher zu schreiben. Eine Matrix bleibt also eine Matrix, und ein Vektor bleibt ein Vektor. Das Vertauschen einer Matrix und eines Vektors führt zu einer einzeiligen Matrix mit Vektorelementen und einem Vektor mit Matrixelementen in einer flachen Darstellung (siehe die Methode Flat).
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---
      matrix a= {{1, 2, 3}, {4, 5, 6}};
      Print("a vor dem Tausch: \n", a);
      matrix b= {{5, 10, 15, 20}, {25, 30, 35, 40}, {45, 50, 55, 60}};
      Print("b vor dem Tausch: \n", b);  
    //--- Tausch der Matrix-Pointer
      a.Swap(b);
      Print("a nach dem Tausch: \n", a);
      Print("b nach dem Tausch: \n", b);
      /*
      a vor dem Tausch:
      [[1,2,3]
      [4,5,6]]
      b vor dem Tausch:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      
      a nach dem Tausch:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      b nach dem Tausch:
      [[1,2,3]
      [4,5,6]]
      */
      vector v=vector::Full(10, 7);
      Print("v vor dem Tausch: \n", v);
      Print("b vor dem Tausch: \n", b);
      v.Swap(b);
      Print("v nach dem Tausch: \n", v);
      Print("b nach dem Tausch: \n", b);
      /*
      v vor dem Tausch:
      [7,7,7,7,7,7,7,7,7,7]
      b vor dem Tausch:
      [[1,2,3]
      [4,5,6]]
      
      v nach dem Tausch:
      [1,2,3,4,5,6]
      b nach dem Tausch:
      [[7,7,7,7,7,7,7,7,7,7]]
      */
     }
    Die Methode Swap() ermöglicht auch Operationen mit dynamischen Arrays (Arrays fester Größe können nicht als Parameter übergeben werden). Das Array kann eine beliebige Dimension haben, aber eine vereinbarte Größe, was bedeutet, dass die Gesamtgröße einer Matrix oder eines Vektors ein Vielfaches der Dimension Null des Arrays sein muss. Die Dimension Null des Arrays enthält die Anzahl der Elemente, die im ersten Index enthalten sind. Bei einem dynamischen dreidimensionalen Array ‚double array[][2][3]‘ beispielsweise ist die Dimension Null das Produkt aus der Größe der zweiten und dritten Dimension: 2x3=6. Daher kann ein solches Array bei der Swap-Methode nur mit Matrizen und Vektoren verwendet werden, deren Gesamtgröße ein Vielfaches von 6 ist: 6, 12, 18, 24, usw.

    Betrachten Sie das folgende Beispiel:
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- Füllen einer 1x10 Matrix mit dem Wert 7.0
      matrix m= matrix::Full(1, 10, 7.0);
      Print("matrix vor dem Tausch:\n", m);
    //--- Tauschversuch von Matrix und Array
      double array_small[2][5]= {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};
      Print("array_small vor dem Tausch:");
      ArrayPrint(array_small);
      if(m.Swap(array_small))
       {
        Print("array_small nach dem Tausch:");
        ArrayPrint(array_small);
        Print("matrix nach dem Tausch: \n", m);
       }
      else // Die Größe der Matrix ist kein Vielfaches der ersten Dimension
       {
        Print("m.Swap(array_small) failed. Error ", GetLastError());
       }
      /*
      matrix vor dem Tausch:
      [[7,7,7,7,7,7,7,7,7,7]]
      array_small vor dem Tausch:
               [,0]     [,1]     [,2]     [,3]     [,4]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000
      [1,]  6.00000  7.00000  8.00000  9.00000 10.00000
      m.Swap(array_small) failed. Error 4006
      */
    //--- neuer Versuch des Tausches mit einer größeren Matrix
      double array_static[3][10]= {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
         {2, 4, 6, 8, 10, 12, 14, 16, 18, 20},
         {3, 6, 9, 12, 15, 18, 21, 24, 27, 30}
       };
      Print("array_static vor dem Tausch:");
      ArrayPrint(array_static);
      if(m.Swap(array_static))
       {
        Print("array_static nach dem Tausch:");
        ArrayPrint(array_static);
        Print("matrix nach dem Tausch: \n", m);
       }
      else // ein statisches Array kann nicht für einen Matrix-Tausch verwendet werden
       {
        Print("m.Swap(array_static) failed. Error ", GetLastError());
       }
      /*
      array_static vor dem Tausch:
             [,0]     [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000  6.00000  7.00000  8.00000  9.00000 10.00000
      [1,]  2.00000  4.00000  6.00000  8.00000 10.00000 12.00000 14.00000 16.00000 18.00000 20.00000
      [2,]  3.00000  6.00000  9.00000 12.00000 15.00000 18.00000 21.00000 24.00000 27.00000 30.00000
      m.Swap(array_static) failed. Error 4006
      */
    //--- ein weiterer Tauschversuch von Array und matrix
      double array_dynamic[][10];    // dynamischer Array
      ArrayResize(array_dynamic, 3); // setzen der Größe der ersten Dimension
      ArrayCopy(array_dynamic, array_static);
    //--- jetzt die Verwendung eines dynamischen Arrays für dejn Tausch
      if(m.Swap(array_dynamic))
       {
        Print("array_dynamic nach dem Tausch:");
        ArrayPrint(array_dynamic);
        Print("matrix nach dem Tausch: \n", m);
       }
      else //  no error
       {
        Print("m.Swap(array_dynamic) failed. Error ", GetLastError());
       }
      /*
      array_dynamic nach dem Tausch:
            [,0]    [,1]    [,2]    [,3]    [,4]    [,5]    [,6]    [,7]    [,8]    [,9]
      [0,] 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000
      matrix nach dem Tausch:
      [[1,2,3,4,5,6,7,8,9,10,2,4,6,8,10,12,14,16,18,20,3,6,9,12,15,18,21,24,27,30]]
      */
     }
  4. Die Methode LossGradient für Vektoren und Matrizen wurde hinzugefügt. Diese Methode berechnet einen Vektor oder eine Matrix von partiellen Ableitungen der Verlustfunktion auf vorhergesagte Werte. In der linearen Algebra wird ein solcher Vektor als Gradient bezeichnet und beim maschinellen Lernen verwendet.
    vector vector::LossGradient(const vector &expected,ENUM_LOSS_FUNCTION loss) const;
    matrix matrix::LossGradient(const matrix &expected,ENUM_LOSS_FUNCTION loss) const;
  5. Die Verwendung von FOREIGN KEYS in SQLite wurde ermöglicht, um Beziehungen zwischen Tabellen in SQL-Abfragen zu erzwingen.   Beispiel:
    CREATE TABLE artist(
      artistid    INTEGER PRIMARY KEY, 
      artistname  TEXT
    );
    
    CREATE TABLE track(
      trackid     INTEGER, 
      trackname   TEXT, 
      trackartist INTEGER,
      FOREIGN KEY(trackartist) REFERENCES artist(artistid)
    );

  6. Korrigiert wurde die Auswahl der geeigneten Klassenmethode in Abhängigkeit von der Methoden- und Objektdeklaration.

MetaEditor

  1. Die zulässige Länge von Kommentaren bei der Übertragung in den MQL5-Storage wurde erhöht. Ausführliche Kommentare beim Übertragen von Änderungen in das Repository gelten als gute Praxis bei der Arbeit an großen Projekten, aber bisher war die Länge der Kommentare auf 128 Zeichen beschränkt. Die zulässige Länge beträgt jetzt bis zu 260 Zeichen.

MetaTester

  1. Erhöhte Empfindlichkeit des Prüfgeschwindigkeitsschalters im visuellen Modus.
Fehler in den Absturzprotokollen behoben.

17 September 2022
MetaTrader 5 Build 3440: Neuartiger Bericht über das Handelskonto

Terminal

  1. Neuer Bericht über die Handelsleistung des Kontos hinzugefügt. Er ähnelt den bereits bekannten Signal-Berichten in Bezug auf die Verfügbarkeit von Statistiken und die Darstellung der Daten. Die folgenden Leistungsdaten werden auf der Plattform verfügbar sein:
    • Diagramme und Tabellen zur Visualisierung der monatlichen Wachstumsmetriken
    • Diagramm zum Eigenkapital
    • Sterndiagramm, das eine schnelle Bewertung des Kontostands ermöglicht
    • Handelsstatistiken nach Instrumenten
    • Eine Vielzahl zusätzlicher Metriken für die Handelsanalyse

    Der Bericht kann direkt auf der Plattform angezeigt werden, ohne dass er in eine Datei exportiert werden muss. Um ihn zu öffnen, wählen Sie Berichte im Menü Ansicht.



  2. Korrigiertes Füllen der Optionstafeln für Call- und Put-Kontrakte mit nicht übereinstimmender Menge oder Symbolart.
  3. Die Positionsauswahl im Handelsdialog während der Operationen Close by (Schließen durch) wurde korrigiert. Der Fehler trat bei Listen mit entgegengesetzter Reihenfolge auf, die nach einer anderen Spalte als dem Ticket sortiert waren.
  4. Beschleunigte Protokollierung der Plattform.
  5. Die Anzeige von Kommentaren in nutzerdefinierten Symbolcharts wurde korrigiert.

MQL5

  1. Die Funktion CArrayList::LastIndexOf wurde korrigiert. Zuvor wurde immer -1 anstelle des Index des zuletzt gefundenen Elements zurückgegeben.
  2. Neue Matrix- und Vektor-Methode hinzugefügt - Assign (Zuweisung). Es ersetzt Matrix/Vektor-Elemente durch die übergebenen Matrix/Vektor- oder Array-Daten.
    bool vector<TDst>::Assign(const vector<TSrc> &assign);
    bool matrix<TDst>::Assign(const matrix<TSrc> &assign);
    
    Beispiel:
      //--- copying matrices
      matrix b={};
      matrix a=b;
      a.Assign(b);
      
      //--- copying an array to a matrix
      double arr[5][5]={{1,2},{3,4},{5,6}};
      Print("array arr");
      ArrayPrint(arr);
      b.Assign(arr);
      Print("matrix b \n",b);
    /*
    array arr
            [,0]    [,1]    [,2]    [,3]    [,4]
    [0,] 1.00000 2.00000 0.00000 0.00000 0.00000
    [1,] 3.00000 4.00000 0.00000 0.00000 0.00000
    [2,] 5.00000 6.00000 0.00000 0.00000 0.00000
    [3,] 0.00000 0.00000 0.00000 0.00000 0.00000
    [4,] 0.00000 0.00000 0.00000 0.00000 0.00000
    matrix b 
    [[1,2,0,0,0]
     [3,4,0,0,0]
     [5,6,0,0,0]
     [0,0,0,0,0]
     [0,0,0,0,0]]
    
    */
  3. Neue Matrix- und Vektor-Methode hinzugefügt - CopyRates. Es kopiert Preisdaten-Arrays in Vektoren und Matrizen.
    bool matrix::CopyRates(string symbol,ENUM_TIMEFRAMES period,ulong rates_mask,ulong from,ulong count);
    bool vector::CopyRates(string symbol,ENUM_TIMEFRAMES period,ulong rates_mask,ulong from,ulong count);
    Der kopierte Datentyp wird im Parameter rates_mask unter Verwendung der Enumeration ENUM_COPY_RATES angegeben. Die folgenden Werte sind verfügbar:
    COPY_RATES_OPEN
    COPY_RATES_HIGH
    COPY_RATES_LOW
    COPY_RATES_CLOSE
    COPY_RATES_TIME
    COPY_RATES_VOLUME_TICK
    COPY_RATES_VOLUME_REAL
    COPY_RATES_SPREAD
    COPY_RATES_OHLC
    COPY_RATES_OHLCT
    Die letzten beiden Werte ermöglichen die gleichzeitige Auswahl der Parameter mehrerer Balken: Open, High, Low, Close und time. (Eröffnung, Hoch, Tief, Schluss, Zeit)

    Wenn mehrere Datentypen ausgewählt werden (nur bei Matrizen möglich), entspricht die Reihenfolge der Zeilen in der Matrix der Reihenfolge der Werte in der Enumeration.

  4. Die Anzeige von Text-Label-Objekten wurde korrigiert. Bei Verwendung der Eigenschaften OBJPROP_XOFFSET und OBJPROP_YOFFSET konnte ein falsches Bildfragment im Chart angezeigt werden.

  5. Fehler beim Ändern eines konstanten Parameters, der als Objektzeigerreferenz an eine Funktion übergeben wurde, behoben.

    Der Spezifizierer const deklariert eine Variable als Konstante, um zu verhindern, dass sie während der Programmausführung geändert wird. Es erlaubt nur die einmalige Initialisierung von Variablen während der Deklaration. Ein Beispiel für konstante Variablen in der Funktion OnCalculate:

    int OnCalculate (const int rates_total,      // price[] array size
                     const int prev_calculated,  // bars processed on previous call
                     const int begin,            // meaningful data starts at
                     const double& price[]       // array for calculation
       );
    

    Das folgende Beispiel enthält einen Compilerfehler, der ein implizites Zeiger-Casting für Referenzparameter zuließ:

    class A {};
    const A *a = new A;
    
    void foo( const A*& b )
      {
       b = a;
      }
    
    void OnStart()
      {
            A *b; 
            foo(b);  // not allowed
            Print( a,":",b );
      }
    Der Compiler erkennt solche illegalen Operationen und gibt den entsprechenden Fehler zurück.

MetaEditor

  1. Die Anzeige von komplexen Zahlenreferenzen im Debugger wurde korrigiert.
  2. Verbesserter Schutz der MQL5 Cloud. Zuvor konnte der Dateischutz unter bestimmten Bedingungen fehlschlagen.
  3. Fehler in Absturzprotokollen behoben.


Neues MetaTrader 5 Web-Terminal

Wir haben ein überarbeitetes MetaTrader 5 Web-Terminal veröffentlicht, das eine aktualisierte Oberfläche und einen neu gestalteten Kern aufweist. Die neue Oberfläche ähnelt der Terminalversion für das iPad:



Außerdem bietet es eine Fülle neuer Funktionen:

  • Möglichkeit zur Beantragung echter Konten mit dem detaillierten Registrierungsformular und den Optionen zur Einreichung von Dokumenten,
  • Unterstützung für Preisdatenabonnements und die Möglichkeit, verzögerte Kurse zu erhalten,
  • Mehr analytische Objekte mit komfortablen Verwaltungsoptionen,
  • Darstellung auf dem Chart der Ein- und Austritte im Markt,
  • Anzeige der Ereignisse des Wirtschaftskalenders auf dem Chart.
  • Bequeme Konfiguration von Instrumenten im Market Watch, zusammen mit den Tagesänderungen der Preise.
  • Vereinfachte Nutzeroberfläche, um Anfängern den Einstieg in das Terminal zu erleichtern: Das Kontextmenü des Charts und das obere Menü wurden entfernt; alle Befehle zur Chartsteuerung, Objekte und Indikatoren sind auf der linken Seite und im oberen Bereich verfügbar, während andere Befehle über das Hamburger-Menü aufgerufen werden können
  • Dunkler Modus der Schnittstelle

Versuchen Sie das neue Webterminal unter www.mql5.com gleich jetzt. Es wird in Kürze für Ihre Makler verfügbar sein.

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

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.
2 Juni 2022
MetaTrader 5 build 3320: Verbesserungen und Korrekturen

Terminal

  1. Erweiterte Tooltips für Handelsobjekte, die auf den Charts angezeigt werden:
    • Die Deals, mit denen aus dem Markt ausgestiegen wurde, zeigen jetzt Gewinne an.
    • Bei Deals, die als Folge einer Take Profit- oder Stop Loss-Aktivierung ausgeführt wurden, wird die entsprechende Anzeige eingeblendet.

    Ähnliche Tooltips sind für die Verbindungslinien zwischen Ein- und Ausstiegs-Deals verfügbar.

    Erweiterte Tooltips für Handelsobjekte


  2. Verbesserte grafische Systemleistung.
  3. Die Protokollierung von Operationen mit offenen Aufträgen und Positionen wurde hinzugefügt. Wenn ein solcher Befehl ausgeführt wird, wird dem Journal ein entsprechender Protokolleintrag hinzugefügt, z. B.: "Massenschließung von XXX Positionen gestartet".
  4. Festgelegte Massenschließung von gegenüberliegenden Positionen.
  5. Die Aktualisierung von Chart-Objekten, die den Handelsverlauf anzeigen, wurde korrigiert. Der Fehler trat beim Ändern des Diagrammsymbols auf.

MQL5

  1. Arbeiten an Matrix- und Vektor-Funktionen sind im Gange: Unterstützung für 'float' und 'complex' wird implementiert.
  2. Der Operator "!" (LNOT) für einen Zeiger prüft dessen Gültigkeit durch einen impliziten Aufruf von CheckPointer. Der Operator "==" sollte für eine schnelle Prüfung auf NULL verwendet werden. Zum Beispiel: ptr==NULL oder ptr!=NULL.

MetaTester

  1. Die Anzeige von Deal-Objekten in Testdiagrammen wurde korrigiert.
  2. Die Leistung des grafischen Systems wurde verbessert.

MetaEditor

  • Aktualisierte UI-Übersetzungen.

Fehler in den Absturz-Logs behoben.

Zurück123456