Was ist neu im MetaTrader 5

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

24 Juli 2020
MetaTrader 5 build 2560: Verbessertes integriertes Schulungssystem

Terminal

  1. Im vorherigen Plattform-Update haben wir ein vollständig überarbeitetes Schulungssystem vorgestellt. In der neuesten Version wurden weitere Verbesserungen implementiert:
    • Der Fortschrittsbalken ist deutlicher sichtbar geworden
    • Der Text von ein paar Empfehlungen wurde bearbeitet
    • Die Berechnung des Lernfortschritts wurde korrigiert
    Schließen Sie alle Lektionen ab, um die Möglichkeiten der Plattform bis zum Maximum auszureizen.




  2. Optimierte und erheblich beschleunigte Verarbeitung großer Tickströme (mit mehr als Zehntausenden von Ticks pro Minute).
  3. Fehler bei der Berechnung von Preisänderungen im Vergleich zum Schlusskurs der vorherigen Sitzung behoben. Um diese Variable anzuzeigen, aktivieren Sie die Spalte "Tägliche Änderungen" im Kontextmenü von Market Watch.

MQL5

  1. Optimierter und beschleunigter Zugriff auf numerische Charteigenschaften über die Funktion ChartGetInteger.
  2. Die Suche nach nutzerdefinierten Indikatoren wurde korrigiert, wenn ein solcher Indikator von einem MQL5-Programm über die Funktion iCustom angefordert wird.

MetaEditor

  1. Hinzugefügt wurde das Kompilieren von C/C++ Programmen in Projects.

Tester

  1. Signifikat verbesserte Leistung des MQL5 Cloud Network. Aufgrund der verbesserten Effizienz der Agentensuche kann das Netzwerk Aufgaben schneller verteilen und Berechnungsergebnisse zurückgeben.
Aktualisierte Dokumentation.

10 Juli 2020
MetaTrader 5 Build 2530: Sortierung in Market Watch und erweiterte Operationen mit Optimierungsergebnissen

Terminal

  1. Im Fenster Market Watch kann nun sortiert werden:
    • Klicken Sie auf einen Spaltennamen, um die Liste nach den gewünschten Daten zu sortieren, z.B. nach dem Symbolnamen, dem Schlusskurs, der täglichen Änderung oder anderen Variablen. Verwenden Sie das neue Menü mit den beliebtesten Sortieroptionen. Die Sortierung nach dem höchsten Wachstum und Rückgang auf der Grundlage einer täglichen Symbolpreisänderung kann beim Handel mit Börseninstrumenten nützlich sein.
    • Verwenden Sie das neue Menü mit den am häufigsten verwendeten Sortieroptionen. Die Sortierung nach dem höchsten Wachstum und Rückgang auf der Grundlage einer täglichen Symbolpreisänderung kann beim Handel mit Börseninstrumenten nützlich sein.


  2. Neu gestaltetes und verbessertes integriertes Lernsystem.
    Alle interaktiven Hinweise sind zur leichteren Navigation in verschiedenen Kategorien gruppiert. Für jede Kategorie wird die Anzahl der abgeschlossenen und verbleibenden Hinweise angezeigt.



    Jeder Hinweis ist jetzt mit einer Checkliste versehen, die die Schlüsselaktion angibt, die der Benutzer ausführen sollte, um die Schulung abzuschließen.
    Wir haben das Design des Lernsystems überarbeitet und Fehler in der Berechnung des Gesamtfortschritts behoben.

  3. Es wurde eine automatische Berechnung der vorherigen Sitzungsschlusszeit und der aktuellen Sitzungsöffnungszeit eines Symbols hinzugefügt. Wenn die entsprechenden Daten nicht direkt vom Broker zur Verfügung gestellt werden, berechnet das Terminal die Werte auf der Grundlage der ersten und der letzten Kurse in einer Sitzung. Die relevanten Informationen können im Market Watch-Fenster angezeigt werden: Aktivieren Sie die entsprechenden Spalten im Abschnitt "Symbole" oder navigieren Sie zum Abschnitt "Details".



  4. Optimierte und beschleunigte Anwendung von Preisen offener Positionen. Wenn neue Ticks im Terminal ankommen, werden Preise, Gewinn und Margenanforderungen schneller aktualisiert.
  5. Korrigierte Berechnung des integrierten Stochastischer Oszillators. Bei einer begrenzten Anzahl von Balken, die in Diagrammen angezeigt wurden, konnte ein Fehler auftreten.

MQL5

  1. Optimierte und beschleunigte Funktion AccountInfo*, die Zugang zu Handelskontoeigenschaften bietet.
  2. Optimierter und beschleunigter Zugriff auf numerische Charteigenschaften über die Funktion ChartGetInteger.

MetaEditor

  1. Die folgenden Kontextmenübefehle wurden die Registerkarten der Codebearbeitung für effiziente Operationen mit der MQL5-Speicherung hinzugefügt:
    • Vergleichen einer Arbeitskopie einer Datei mit der aktuellen Revision
    • Änderungen rückgängig machen
    • Datei-Änderungshistorie anzeigen



  2. Das Hervorheben der passenden Klammern wurde geändert. Das Hervorheben wird jetzt auf Klammern und nicht auf den Hintergrund angewendet. Das Hervorheben ist standardmäßig deaktiviert. Sie kann unter Editoreinstellungen aktiviert werden.



  3. Verbesserte Such- und Ersetzungsfunktionen:
    • Wenn Sie einen Text in der Datei auswählen und das Suchfeld aufrufen, wird der Text automatisch im Feld "Suchen" ersetzt. Wenn kein Text ausgewählt ist, wird ein Text aus der Zwischenablage in das Feld "Suchen" eingefügt. Wenn die Zwischenablage leer ist, wird der Fokus im Suchfeld auf das Feld "Suchen" gesetzt.
    • Ein ähnliches Verhalten ist für das Ersetzen-Fenster implementiert: Der ausgewählte Text wird in das Suchfeld eingefügt, und der Cursor wird in das Feld "Ersetzen durch" bewegt. So können Sie sofort den gewünschten neuen Text eingeben.
    • Die Such- und Ersetzungsergebnisse werden jetzt im Protokoll anstelle des zuvor verwendeten separaten Dialogfensters angezeigt. Wenn das Toolbox-Fenster aktiviert ist, wird darin automatisch die Registerkarte Journal ausgewählt. Sie müssen also nicht mehr mit zusätzlichen Fenstern arbeiten.

  4. Korrigierte Suche im Dateivergleichsfenster bei der Arbeit mit dem MQL5-Speicher.
  5. Es wurde die Möglichkeit zum Suchen und Ersetzen in Dateien hinzugefügt, die mit der aktuellen Datei über die Direktive #include verbunden sind.
    Die neue Option ermöglicht schnellere Operationen mit Projekten, die aus mehreren Dateien bestehen. Um z.B. einen Text in allen Dateien zu ersetzen, müssen Sie deren Verzeichnisse nicht manuell angeben, während der Editor sie automatisch über die #include-Direktiven finden kann.



Tester

  1. Wir haben Optimierungskriterien überarbeitet, die zwei Variablen enthalten, von denen eine der Saldo (Balance) ist. Jetzt berücksichtigen die Kriterien nur noch die zweite Variable und ignorieren den Saldo. Die neuen Optimierungskriterien sind einfacher zu analysieren.

    • Saldo + Maximaler Gewinn -> Maximaler Gewinn
    • Saldo + maximal Erwartetes Ergebnis (Expected Payoff) -> maximal Erwartetes Ergebnis
    • Saldo + Minimale Inanspruchnahme (Drawdown) -> Minimale Inanspruchnahme
    • Saldo + Maximaler Erholungsfaktor (Recovery Factor) -> Maximaler Erholungsfaktor
    • Saldo + Maximales Sharpe Ratio -> Maximales Sharpe Ratio


  2. Im Untermenü "Optimierungsparameter" haben wir Befehle zum schnellen Ein- oder Ausblenden aller Eingabespalten in der Tabelle mit den Optimierungsergebnissen hinzugefügt:



  3. Färbung für die Tabelle und das Diagramm der Optimierungsergebnisse für eine bequemere visuelle Analyse hinzugefügt.
    Das Diagramm wird je nach dem Wert des Optimierungskriteriums mit einem Gradienten von grün nach rot eingefärbt. Folgende Farben werden für die Tabelle verwendet:
    • Saldo: Werte über der Ersteinlage sind blau gefärbt, Werte unter der anfänglichen Einlage sind rot dargestellt.
    • Gewinn: Blau wird für Werte über Null verwendet, und rot für Werte unter Null.
    • Erwartetes Ergebnis (Expected Payoff): Blau wird für Werte über Null verwendet, und rot für Werte unter Null.
    • Inanspruchnahme (Drawdown): von grün (0-5%) bis rot (über 30%).
    • Sharpe Ratio: von Grün (über 2) nach Rot (unter 0).
    • Erholungsfaktor (Recovery Factor): von grün (über 2) nach rot (unter 1).



  4. Hinzugefügt wurden Filter in der Optimierungsergebnistabelle. Verwenden Sie Filter, um erfolglose Durchläufe aus der Liste auszublenden:
    • Durchläufe ohne Handel
    • Verlustbringende Durchläufe
    • Durchläufe mit einer Inanspruchnahme (Drawdown) von über 50%.
    • Durchläufe mit einem Erholungsfaktor unter 1
    • Durchläufe mit einem Sharpe-Ratio unter 0,5



  5. Optimierte Arbeit des MQL5-Cloud-Netzwerks. Wenn nun eine Optimierung für denselben Expert Advisor gestartet wird, versucht das Netzwerk, die gleichen Test-Agenten zu verwenden, die während des vorherigen Optimierungsdurchlaufs verwendet wurden, da das erforderliche Marktumfeld, einschließlich der Handelshistorie, auf solchen Agenten bereits verfügbar ist.

Aktualisierte Dokumentation.
26 Juni 2020
MetaTrader 5 iOS build 2505: Wischgesten, neue Abschnitte und Farbschemata

MetaTrader 5 iOS build 2505

Wir haben das Feedback von MetaTrader 5 iOS Nutzern gesammelt und die Anwendung erheblich überarbeitet

  • Hinzugefügt wurde die Suche nach Symbolen im Abschnitt Kurse.
  • Das Standard-Farbschema "Farbe auf Weiß" für Diagramme wurde hinzugefügt.
  • Die Darstellung von Geschäften auf den Charts wurde hinzugefügt.
  • Das Zeitrahmen-Schaltfeld wurde nach oben verschoben, so dass es den Chart nicht mehr überlappt.
  • Vertikale Skalierung von Charts hinzugefügt — einfach über die Preisskala wischen.
  • Es wurde die Möglichkeit hinzugefügt, Konten mit Hilfe von QR-Codes auf andere Geräte zu verschieben.
  • Es wurde die Anzeige der täglichen Preisänderung in Pips im Abschnitt der Kurse hinzugefügt. Die Daten sind nur verfügbar, wenn sie von einem Broker zur Verfügung gestellt werden.
  • Wischgesten auf den Kurs-, Historien- und Handelsbildschirmen wurden hinzugefügt.
  • Die adaptive Auswahl eines Handelsvolumens für schnellen Handel wurde hinzugefügt.
  • Es wurde die Möglichkeit hinzugefügt, über FaceID oder Fingerabdruck auf den OTP-Generator zuzugreifen.
Die Navigation auf dem iPad wurde neu gestaltet.
  • Das Ein-Klick-Handelspanel wurde nach oben verschoben;
  • Das untere Menü mit seinen Bereichen und Indikatoren wurde hinzugefügt;
  • Die Abschnitte E-Mail, Nachrichten und Kontoverwaltung wurden auf separate Registerkarten verschoben;
  • Verbesserte Kontoverwaltung.
5 Juni 2020
MetaTrader 5 build 2485: iCustom-Verbesserungen und Gesamtoptimierung in MQL5

Terminal

  1. Optimierte und erheblich beschleunigte Bearbeitung der Balkenhistorie für kundenspezifische Finanzinstrumente. Die Verbesserung betrifft auch die Funktion CustomRatesUpdate.
  2. Der Export von nutzerdefinierten Symboleinstellungen in eine JSON-Datei wurde korrigiert.
  3. Fehler in den Absturz-Logs behoben.

MQL5

  1. Diese Version enthält einen überarbeiteten Algorithmus zum Laden nutzerdefinierter Indikatoren über iCustom.

    Wenn der Backslash '\' vor dem Namen des nutzerdefinierten Indikators angezeigt wird, wird die EX5-Indikator-Datei relativ zum MQL5-Stammordner durchsucht. Bei einem Aufruf von iCustom(Symbol(), Periode(), "\FirstIndicator"...) wird daher der Indikator MQL5\FirstIndicator.ex5 geladen. Wenn die Datei unter diesem Pfad nicht gefunden wird, wird der Fehler 4802 (ERR_INDICATOR_CANNOT_CREATE) ausgeworfen.

    Wenn der Pfad nicht mit einem Backslash '\' beginnt, wird der Indikator auf der Grundlage der folgenden Reihenfolge von Aktionen gesucht und geladen:

    • Die EX5-Datei wird im gleichen Ordner gesucht, in dem sich auch die EX5-Datei des aufrufenden Programms befindet. Beispielsweise befindet sich der CrossMA.EX5 Expert Advisor unter MQL5\Experts\MyExperts. Er enthält den folgenden Aufruf: iCustom(Symbol(), Periode(), "SecondIndicator"...). In diesem Fall wird der Indikator unter MQL5\Experts\MyExperts\SecondIndicator.ex5 gesucht.
    • Wenn der Indikator nicht gefunden wird, wird eine Suche relativ zum Stammverzeichnis des Indikators durchgeführt: MQL5\Indikatoren. Es wird also die Datei MQL5\Indicators\SecondIndicator.ex5 gesucht. Wenn der Indikator nicht gefunden wird, gibt die Funktion INVALID_HANDLE zurück und der Fehler 4802 (ERR_INDICATOR_CANNOT_CREATE) wird ausgeworfen.

    Wenn der Indikatorpfad in einem Unterverzeichnis wie MyIndicators\ThirdIndicator gesetzt ist, beginnt die Suche im Ordner des aufrufenden Programms (der Expert Advisor befindet sich im Ordner MQL5\Experts\MyExperts) unter dem folgenden Pfad: MQL5\Experts\MyExperts\MyIndicators\ThirdIndicator.ex5. Im Falle eines Fehlschlags wird der Ordner MQL5\Indicators\MyIndicators\ThirdIndicator.ex5 durchsucht. Bitte beachten Sie, dass das Pfad-Trennzeichen als doppelter Backslash '\\' angegeben werden sollte. Zum Beispiel: iCustom(Symbol(), Period(), "MyIndicators\\ThirdIndicator"...)

    Außerdem, wenn ein nutzerdefinierter Indikatoraufruf über iCustom im Programmcode gefunden wird, fügt der Compiler implizit die Direktive "#property tester_indicator XXX" hinzu, wenn sie nicht angegeben ist.

  2. Optimierte und erheblich beschleunigte Funktion HistorySelect, die es erlaubt, die Historie von Geschäften und Aufträgen abzufragen.
  3. Ein gelegentlicher Fehler bei der Tick-Anforderung über die Funktion CopyTicksRange wurde behoben. Der Fehler führte dazu, dass der Bereichsanfang auf den Tagesanfang und nicht auf die angegebene Zeit gesetzt wurde.
  4. Optimierte und signifikant beschleunigte Anzeige von Warnhinweisen mit der Funktion Alert.
  5. Neue Eigenschaft SYMBOL_TIME_MSC für die letzte Tick-Zeit des Symbols in Millisekunden. Die Eigenschaft kann mit der Funktion SymbolInfoInteger abgerufen werden.
29 Mai 2020
MetaTrader 5 build 2470

Terminal

  • Ein Fehler wurde behoben, der dazu führte, dass finanzielle Symbole mit '-', '=', '_' und '+' im Namen nicht in der Marktübersicht eingefügt werden konnten.

MQL5

MetaEditor

  • Korrektur der erweiterten Suche nach den Zeilenende-Zeichen '\n' und '\r'.
Aktualisierte Dokumentation.
22 Mai 2020
MetaTrader 5 build 2450: Abonnement-Service, UI-Verbesserungen und überarbeitete Funktionen im MetaEditor

Terminal

  1. Wir haben den brandneuen Abonnementsdienst freigegeben. Abonnements bieten zusätzliche Dienste, die Sie beim Handel unterstützen können. So können Sie beispielsweise hochwertige Marktdaten von bekannten Anbietern abonnieren, empfangene Daten analysieren und neue Handelsstrategien entwickeln. Optional können Sie persönliche Managerdienste anfordern, die Ihnen beim Erlernen der Handelsgrundlagen oder bei der Beherrschung Ihrer Fähigkeiten zur Nutzung der Plattform helfen.

    Der Dienst befindet sich derzeit in der Entwicklung und wird in den nächsten Versionen zur Verfügung stehen.

    Wie es funktioniert
    Im Navigator wurde ein neuer Abschnitt Abonnements hinzugefügt. Alle verfügbaren Dienste werden unter diesem Abschnitt angezeigt. Die Liste der Dienste wird auf der Broker-Seite konfiguriert und hängt somit vom Server ab, mit dem Sie verbunden sind. Die Abonnements sind in Kategorien eingeteilt, um das Suchen zu erleichtern.


    Wählen Sie einen Dienst, um sich seine detaillierte Beschreibung anzeigen zu lassen. Klicken Sie dann auf Abonnieren. Alle Ihre aktiven Abonnements werden in einem separaten Abschnitt angezeigt.


    Wenn Sie Marktdaten abonnieren, stehen Ihnen im Market Watch die geeigneten Handelsinstrumente zur Auswahl. Sie können als reguläre Symbole verwendet werden: Anzeigen von Kursen im Market Watch, Öffnen von Charts und deren Analyse anhand von Objekten und Indikatoren sowie Ausführen von Expert Advisors im Strategietester. Handelsoperationen für diese Symbole werden nicht unterstützt.

    Wie man für Abonnements bezahlt
    Sie können die Dienstleistungen mit den Mitteln Ihres Handelskontos bezahlen. Es ist nicht notwendig, andere Websites zu besuchen, da die Zahlung direkt von der Plattform aus vorgenommen werden kann.

    Bald werden wir die Möglichkeit hinzufügen, Marktdaten-Abonnements zu erwerben, indem wir uns mit MetaQuotes-Demo
    verbinden. Wir planen, Abonnements für Marktdaten von verschiedenen Börsen in der ganzen Welt einzurichten. Mit nur wenigen Klicks können Sie Echtzeitkurse von Nasdaq, CME, NYSE, BOVESPA und anderen Börsen erhalten. Sie können die Abonnements mit einem MQL5.community-Konto bezahlen, ähnlich wie beim Kauf von Market, Signals und Hosting.

  2. Die neue Option "Ticker anzeigen" wurde in den Chart-Einstellungen hinzugefügt. Die Option blendet die Zeile ein/aus, die den Namen des Handelssymbols, den Zeitrahmen und einen nutzerdefinierten Kommentar enthält.



  3. Hinzugefügt wurde die Option "Handelshistorie anzeigen" in den Terminal-Einstellungen und in den Chart-Einstellungen. Die Möglichkeit, Marktein- und -ausgänge in Charts anzuzeigen, war in früheren Versionen verfügbar, wurde aber über den Abschnitt "Toolbox \ Historie" verwaltet. Die neue Option ermöglicht eine komfortablere Einstellung der Darstellung der Historie. Sie können sie für alle Charts auf einmal konfigurieren oder separat für bestimmte Charts einstellen.




    Darüber hinaus können Sie über das Chart-Kontextmenü schnell die Anzeige der Handelshistorie und der Handelsebenen aktivieren:



  4. Hinzugefügt wurde ein neues "Farbe auf Weiß"-Schema in den Charteinstellungen hinzugefügt.


  5. Den Positions- und Auftragskontextmenüs wurden neue Befehle hinzugefügt, die ein schnelles Öffnen der Markttiefe und des Charts des entsprechenden Symbols ermöglichen:



  6. Hinzugefügt wurden das Hervorheben des Chartrahmens. Dies wird Ihnen helfen, das gewünschte Symbolchart zu finden, wenn mehrere Charts im Terminal geöffnet sind. Wählen Sie ein Symbol in der Marktbeobachtung, eine Order- oder Positionslinie im Handels- oder Historienabschnitt oder einen Alarm aus, und der Rahmen des entsprechenden Symbolcharts blinkt dreimal.



  7. Verbesserte Anzeige der Handelsebenen auf dem Chart.
    • Tickets werden nicht mehr für Positionen, Aufträge und Levels angezeigt, um den Chart sauber zu halten.
    • Bildunterschriften erscheinen zur besseren Lesbarkeit in Großbuchstaben
    • Volumina werden ohne Dezimalstellen angezeigt, wenn diese Null sind.
    • Die Ebenen werden ausgeblendet, wenn die Diagrammhöhe weniger als 80 Pixel beträgt.



  8. Eine Anzeige der Symbolbeschreibung (falls vorhanden) wurde in der linken oberen Diagrammecke zusätzlich zum Symbolnamen hinzugefügt.





  9. In der Liste der offenen Aufträge und Positionen wurden neue Spalten hinzugefügt:
    • Veränderung - Handelsgewinn in Prozent
    • Wert - Marktwert der Position
    • Magic — der vom Expert Advisor bei der Eröffnung von Aufträgen und Positionen angegebene Identifikator (Magicnummer)

    Die neuen Spalten können über das Kontextmenü ein-/ausgeblendet werden.


    Die Spalten "Positionswert" und "Magic" wurden ebenfalls zum Abschnitt "Handelshistorie" hinzugefügt.

    Darüber hinaus wird das Gewinnfeld in den Abschnitten "Offene Positionen" und "Historie" in Abhängigkeit vom Ergebnis der Operation hervorgehoben.

  10. Hinzugefügt wurde die Unterstützung für negative Preise. Dies ermöglicht einen ordnungsgemäßen Plattformbetrieb in Situationen, die dem jüngsten Rückgang der Ölpreise unter Null gleichen. Dies beinhaltet:
    • Die Anzeige der Kurse im Market Watch
    • Die Anzeige von Charts und Markttiefe
    • Ausführung von Handelsgeschäften
    • Berechnung von Gewinnen und Sicherheiten

  11. Die maximale Anzahl von Symbolen, die gleichzeitig im Market Watch aktiviert werden können, wurde auf 5000 erhöht.
  12. Das Sortieren nach dem Datum der letzten Aktualisierung in chats wurde korrigiert.
  13. Optimierter und beschleunigter Betrieb mit einer großen Anzahl von Handelssymbolen (50.000 und mehr).
  14. Ein Fehler wurde behoben, durch den es unmöglich war, eine Position zu schließen, wenn ihr aktuelles Volumen nicht zu der Änderungsschrittweite des Volumens des Symbols entsprach.

MQL5

  1. Optimierte und beschleunigte Operationen der Tick-Historie.
  2. Hinzugefügt wurden neue Funktionen für die Arbeit mit Datenbanken:
    • DatabaseReset — setzt die Anfrage in den Anfangszustand zurück, ähnlich wie der Aufruf von DatabasePrepare. Die Funktion ist für das mehrfache Ausführen einer Anfrage mit verschiedenen Parameterwerten bestimmt. Wenn der Tabelle z.B. mit dem INSERT-Befehl massenweise Daten hinzugefügt werden, sollte für jeden Eintrag ein vom Nutzer selbst definierter Satz von Feldwerten gebildet werden.
    • DatabaseBind — setzt einen Parameterwert in einer Anfrage. Die Funktion wird verwendet, wenn eine SQL-Anfrage parametrisierbare Werte der Form "?" oder "?N" enthält, wobei N den Parameterindex (beginnend mit Eins) bedeutet.
    • DatabaseBindArray — legt ein Array als Parameterwert fest.

  3. Hinzugefügt wurde das Flag FSD_FILE_MUST_EXIST für die Funktion FileSelectDialog. Es zeigt an, dass die ausgewählten Dateien existieren müssen.
  4. Hinzugefügt wurden Werte zur Beschreibung von Optionen wurden zur Enumeration ENUM_SYMBOL_INFO_DOUBLE:
    • SYMBOL_PRICE_CHANGE — Änderung des aktuellen Preises relativ zum Ende des vorangegangenen Handelstages in %.
    • SYMBOL_PRICE_VOLATILITY — Preisvolatilität in %.
    • SYMBOL_PRICE_THEORETICAL — theoretischer Optionspreis.
    • SYMBOL_PRICE_DELTA — Option/Optionsschein-Delta. Zeigt den Wert, um den sich der Optionspreis ändert, wenn sich der Preis des zugrunde liegenden Vermögenswerts um 1 ändert.
    • SYMBOL_PRICE_THETA — Option/Optionsschein-Theta. Anzahl der Punkte, die der Optionspreis jeden Tag aufgrund einer vorübergehenden Auflösung, d.h. wenn sich das Verfallsdatum nähert, verlieren soll.
    • SYMBOL_PRICE_GAMMA — Options-/Optionsschein-Gamma. Zeigt die Änderungsrate des Deltas — wie schnell oder langsam sich die Optionsprämie ändert.
    • SYMBOL_PREIS_VEGA — Options-/Optionsschein-Vega Zeigt die Anzahl der Punkte, um die sich der Optionspreis ändert, wenn sich die Volatilität um 1% ändert.
    • SYMBOL_PREIS_RHO — Option/Optionsschein rho. Gibt die Sensitivität des theoretischen Optionspreises auf die Zinsänderung um 1% an.
    • SYMBOL_PREIS_OMEGA — Options-/Optionsschein-Omega. Optionselastizität — eine relative prozentuale Änderung des Optionspreises um die prozentuale Änderung des zugrunde liegenden Vermögenspreises.
    • SYMBOL_PRICE_SENSITIVITY — Options-/Optionsschein-Sensitivität. Zeigt an, um wie viele Punkte sich der Preis des zugrundeliegenden Vermögenswerts der Option ändern sollte, so dass sich der Preis der Option um einen Punkt ändert.

  5. Hinzugefügt wurde der Export von BLOB-Feldern im HEX-Format in der Funktion DatabaseExport.
  6. Die neue Eigenschaft CHART_SHOW_TICKER wurde zu ENUM_CHART_PROPERTY_INTEGER hinzugefügt — sie zeigt einen Symbol-Ticker in der oberen linken Ecke. Wenn die Eigenschaft CHART_SHOW_TICKER auf false gesetzt ist, wird auch CHART_SHOW_OHLC auf false gesetzt und somit OHLC ausgeblendet.   
  7. Die Qualität des vom Compiler generierten Codes wurde verbessert. Dadurch konnte seine Ausführungsgeschwindigkeit erhöht werden.
  8. Die Fehler im Zusammenhang mit der Kompilierung und Ausführung von Template-Funktionen und -Klassen wurden behoben. Das sind:
    • Fehler bei den Prioritäten von überladenen Vorlagenfunktionsaufrufen
    • Fehler beim Erstellen der Vorlagen von Methoden bzw. Klassen
    • Ein Fehler beim Versuch, auf die interne Klasse für den Template-Parameter der Template-Funktion zuzugreifen
    • Fehler beim Erstellen des Codes einer Vorlagenklasse, der durch die Verwendung einer internen Klasse verursacht wurde.
    • Fehler bei der Verwendung des Vorlagenobjekts B<int> vor B<void*>
    • Fehler beim Erstellen komplexer Objekte mit dem internen Typ C, die mehrfach umgebrochen sind
    • Fehler beim Übertragen des Funktionszeiger-Arguments als const ref-Vorlage
    • Fehler bei der Übergabe einer internen Struktur an eine Funktion einer Vorlage
    • Prioritätsfehler bei der Ausführung von Vorlagenfunktionen
    • Falsche Klammerzählung in for- und do-while-Schleifen
    • Falsche Klammeranzahl in der Klassenstrukturbeschreibung
    • Verlangsamung beim Hinzufügen eines einzelnen Elements mit ArrayResize
    • Fehler bei der Auswahl einer passenden überladenen Funktion

  9. Gelegentliche Fehler in der Funktion CustomTicksReplace behoben.
  10. Korrigiert wurde die Auswahl des Anzeigezeitraums für die Historie von Handelsaufträgen. Der Bereich basiert jetzt auf dem Ausführungsdatum des Auftrags anstelle des zuvor verwendeten Erstellungsdatums.

Python

  1. Hinzugefügt zur Methode initialize wurde der Pfadparameter — der Pfad zu metatrader.exe oder metatrader64.exe. Wird der Pfad nicht angegeben, versucht das Modul die ausführbaren Dateien selber zu finden.
  2. Die folgenden neuen Methoden wurden hinzugefügt:
    • symbols_get — erhält alle finanziellen Symbole vom MetaTrader 5 Terminal.
    • symbols_total — erhält die Anzahl aller Finanzsymbole im MetaTrader 5 Terminal.

  3. Hinzugefügt wurde die Filterung nach Symbolgruppen für die folgenden Funktionen: orders_get, positions_get, history_orders_get and history_deals_get. Verwenden Sie Aufrufe mit dem Parameter "group".
  4. Der Rückgabewert von order_send und order_check wird nun mit dem Feld 'request' übergeben, das die vollständige Beschreibung der ursprünglichen Anfrage enthält. Zum Beispiel:
    ...
    comment=Request executed
    request_id=55
    retcode_external=0
    request=TradeRequest(action=1, magic=234000, order=0, symbol='USDJPY', volume=0.1, price=108.018, stoplimit=0.0, ...
        traderequest: action=1
        traderequest: magic=234000
        traderequest: order=0
        traderequest: symbol=USDJPY
        traderequest: volume=0.1
        traderequest: price=108.018
        traderequest: stoplimit=0.0
    ...
  5. Wenn Python-Skripte auf einem Diagramm gestartet werden, erhalten sie jetzt das Symbol des Diagramms und den Zeitraum (in Minuten) als Argumente.
    import sys
    
    chart_symbol='unknown'
    chart_tf=1
    
    if len(sys.argv) == 3:
        chart_symbol, chart_tf = sys.argv[1:3];
    
    print("Hello world from", chart_symbol, chart_tf)
    
    >> Hello world from T.NYSE 15

MetaEditor

  1. Hinzugefügt wurde der Befehl "Einen bestehenden Ordner hinzufügen". Das ermöglicht ein stapelweises Hinzufügen aller unterstützten Dateien aus dem ausgewählten Verzeichnis in das Projekt.


  2. Erweiterte Such- und Ersetzungsoptionen.

    Hinzugefügt wurde erweiterte Suchfunktionen mit teilweiser Unterstützung für reguläre Ausdrücke. Sie können jetzt \r, \n, \t für Zeilenvorschub- und Tabulatorzeichen in Suchanfragen angeben. Dialoge zum Suchen und Ersetzen wurden zu einem einzigen Dialog mit mehreren Registern zusammengefasst.


    Eine separate Registerkarte für die Suche in Gemeinschaft der Programmierer wurde hinzugefügt. Dazu gehören MQL5.community, sowie GitHub, MSDN und Stack Overflow.

    Suchergebnisse aus externen Ressourcen werden im Fenster der MetaEditor-Toolbox angezeigt:



    Außerdem können Sie die Quelldateien sofort von GitHub herunterladen. Die Dateien werden in ein separates Unterverzeichnis des Ordners Projekte heruntergeladen, das entsprechend dem GitHub-Projektnamen benannt ist.

    Suchergebnisse können zusätzlich nach Datum sortiert werden.

  3. Hinzugefügt wurde die Möglichkeit die Schriftgröße im Code-Editierfenster schnell zu ändern. Um die Schriftgröße zu ändern, drücken Sie Strg und bewegen Sie das Mausrad.
  4. Hinzugefügt wurde die Möglichkeit, Tabellen aus CSV-Dateien in Datenbanktabellen zu importieren. Die folgenden Parameter können während des Imports eingestellt werden:
    • Tabellenname in der Datenbank
    • Automatische oder manuelle Erkennung der Dateikodierung
    • Typ des Datenseparators
    • Überspringen der angegebenen Anzahl von Zeilen am Anfang
    • Kommentar-Präfix
    • Wenn die Datei Spaltennamen hat
    • Wie Zeilenumbrüche bestimmt werden
    • Ob die Daten zu einer neuen Tabelle oder zu einer bestehenden Tabelle hinzugefügt werden sollen
    • Welche Anführungszeichen für Zeichenketten zu verwenden sind


  5. Hinzugefügt wurden Kurzbefehle zum Einfügen von Zeit und Farbe in den Programm-Quellcode hinzugefügt. Wählen Sie die gewünschten Werte aus dem interaktiven Kalender und der Palette aus, und der Editor fügt sie im entsprechenden Format ein.



  6. Die MQL4-Unterstützung wurde deaktiviert, da jetzt nur noch 64-Bit-Code generiert wird.
  7. Korrigiert wurde die Operation der Klassen-Snippets.
  8. Korrigierte Unterstützung für absolute Pfade in Projekten.
Aktualisierte Dokumentation.
    6 März 2020
    MetaTrader 5 build 2360: Erweiterte Integration von SQLite
    1. MQL5: Ausführungsfehler der SQLite Datenbank können nun mit den standardmäßigen Hilfsmitteln von MQL5 analysiert werden. Folgende Fehlermeldungen wurden ergänzt:

      • ERR_DATABASE_ERROR — allgemeiner Fehler.
      • ERR_DATABASE_INTERNAL — SQLite, Fehler der internen Logik.
      • ERR_DATABASE_PERM — Zugriff verweigert.
      • ERR_DATABASE_BUSY — Datei der Datenbank ist blockiert.
      • ERR_DATABASE_LOCKED — Tabelle der Datenbank ist blockiert.
      • ERR_DATABASE_NOMEM — Nicht genügend Speicherplatz, die Operation zu beenden.
      • ERR_DATABASE_READONLY — Versuch, in eine schreibgeschützte Datenbank zu schreiben.
      • ERR_DATABASE_IOERR — E/A-Fehler der Festplatte.
      • ERR_DATABASE_CORRUPT — Das Festplattenabbild der Datenbank ist beschädigt.
      • ERR_DATABASE_FULL — Das Einfügen ist fehlgeschlagen, weil die Datenbank voll ist.
      • ERR_DATABASE_CANTOPEN — Die Datei der Datenbank kann nicht geöffnet werden.
      • ERR_DATABASE_PROTOCOL — Fehler im Sperrprotokoll der Datenbank.
      • ERR_DATABASE_SCHEMA — Ausschließlich für den internen Gebrauch.
      • ERR_DATABASE_TOOBIG — Zeichenkette oder BLOB überschreitet die Größenbeschränkung.
      • ERR_DATABASE_CONSTRAINT — Abbruch wegen Verletzung der Einschränkungen.
      • ERR_DATABASE_MISMATCH — Nicht übereinstimmende Datentypen.
      • ERR_DATABASE_MISUSE — Fehlerhafte Verwendung der Bibliothek.
      • ERR_DATABASE_AUTH — Authentifizierung ist fehlgeschlagen.
      • ERR_DATABASE_RANGE — Parameterfehler bei der Einbindung, Indexfehler
      • ERR_DATABASE_NOTADB — Geöffnete Datei ist keine Datenbankdatei.

    2. MQL5: Korrigierte Ausführung der Funktion DatabaseImport, die den Datenimport aus einer Datei in eine Datenbanktabelle ermöglicht.
    3. MetaEditor: Korrigierte Ausgabe von Zeichenketten mit mehr als 32Kb in die Logs.
    4. MetaEditor: Die gelegentliche fehlerhafte Kodierung von Nachrichten, die von der Python-Konsole (stdout, stderr) im Fehlerabschnitt des Editors gesendet wurden, wurde behoben.
    5. Aktualisierte Dokumentation.
    21 Februar 2020
    MetaTrader 5 Plattform build 2340: Verwaltung von Kontoeinstellungen im Tester und erweiterte Integration mit Python

    MetaEditor

    1. Es wurden neue Funktionen für die Arbeit mit SQLite-Datenbanken hinzugefügt.

      Im vorherigen Plattform-Update haben wir die Unterstützung für Operationen mit SQLite-Datenbanken direkt aus MQL5 eingeführt. Die Hauptfunktionen sind über die Benutzeroberfläche des MetaEditor geworden:

      • Erstellen und Verbinden von Datenbanken
      • Tabellen anzeigen und schnelle Datenabfragen durchführen
      • Erstellen und Ausführen von SQL-Abfragen, Rollback-Änderungen

      Wie es funktioniert
      Die Funktionen zur schnellen Datenbankerstellung sind über den MQL5-Assistenten verfügbar. Sie können auf einfache Weise Ihre erste Tabelle erstellen und ihre Felder definieren.



      Bei der Erstellung der Datenbank werden Sie zu einem neuen Abschnitt des Navigators weitergeleitet, der Befehle zur Verwaltung der Daten enthält.

      Die Datenbanktabellen werden im linken Fenster angezeigt. Mit einem Doppelklick auf den Tabellennamen können die ersten 1.000 Datensätze schnell abgefragt werden. In diesem Navigatorteil können Sie auch andere Datenbanken erstellen und öffnen sowie mit Tabellen arbeiten.

      Die Datenbank kann im Hauptfenster des Editors verwaltet werden. Hier können Sie die Tabelle ausfüllen, Daten suchen und auswählen, SQL-Abfragen eingeben und andere Operationen ausführen:



      Für weitere Details über MetaTrader 5 Operationen mit Datenbanken lesen Sie bitte den Artikel "SQLite": Natives Arbeiten mit SQL-Datenbanken in MQL5".

    2. Erweiterte Unterstützung für mehrsprachige Projekte. Dieses Update bietet erweiterte Möglichkeiten für die Arbeit mit Python-Skripten:

      • Solche Skripte können jetzt mit dem MQL5-Assistenten erstellt werden, während Sie die erforderlichen Bibliotheksabhängigkeiten sofort in den Code einfügen können.
      • Spezielle Symbole wurden im Navigator hinzugefügt, und die entsprechende Syntax ist im Editor verfügbar.
      • Wenn ein Skript über MetaEditor ausgeführt wird, erscheinen Meldungen von der Python-Konsole (stdout, stderr) unter dem Abschnitt Fehler.


      Klicken Sie im Editor auf "Kompilieren", um das Skript auszuführen:


      Um mit Python zu arbeiten, vergessen Sie nicht, dessen Pfad im Abschnitt Einstellungen \ Compiler im MetaEditor anzugeben. Um die Verwendung der MetaTrader 5-Bibliothek zu ermöglichen, installieren Sie sie mit dem folgenden Befehl:
      pip install MetaTrader5
      Für Details zur Python-Integration lesen Sie bitte die entsprechende Dokumentation.
    3. MetaEditor: Anzeige von SQLite-Datenbankdateien (*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3) im Navigator hinzugefügt.
    4. MetaEditor: Fehler beim Speichern der Projekteigenschaften behoben.

    MQL5

    1. Vollständig überarbeitete Python-Integration. Das Update beinhaltet viele neue Funktionen und neue Befehlsbenennungen.

      Neue Benennung
      Die bestehenden Befehle wurden wie folgt umbenannt:
      MT5Initialize       -> initialize
      MT5Shutdown         -> shutdown
      MT5TerminalInfo     -> terminal_info
      MT5Version          -> version
      MT5CopyRatesFrom    -> copy_rates_from
      MT5CopyRatesFromPos -> copy_rates_from_pos
      MT5CopyRatesRange   -> copy_rates_range
      MT5CopyTicksFrom    -> copy_ticks_from
      MT5CopyTicksRange   -> copy_tick_range

      Neue Befehle
      Die Liste der unterstützten Befehle wurde erweitert. Es wurden Handelsfunktionen sowie Funktionen für die Arbeit mit der Handelshistorie und die Beschaffung von Informationen über Finanzsymbole und das laufende Konto hinzugefügt.

      • account_info() erhält Informationen über das laufende Konto. Ein Analogon von AccountInfoInteger, AcountIndoDouble und AccountInfoString.
      • positions_total() erhält die Anzahl der offenen Positionen. Ein Analogon von PositionenGesamt.
      • positions_get(symbol, ticket) erhält die offenen Positionen nach Symbol oder Ticket.
      • orders_total() erhält die Anzahl der Orders. Ein Analogon von OrdersTotal.
      • orders_get(symbol, ticket) erhält die offenen Orders nach Symbol oder Ticket.
      • history_orders_total(from, to) ruft die Anzahl der Aufträge im angegebenen historischen Zeitrahmen ab.
      • history_orders_get(from, to, position, ticket) ruft die Orders aus dem angegebenen historischen Zeitrahmen, nach Ticket oder gefiltert nach Position ab.
      • history_deals_total() erhält die Anzahl der Transaktionen in der Historie. Ein Analogon von HistoryDealsTotal.
      • history_deals_get(from, to, position, ticket) ruft die Orders aus dem angegebenen historischen Zeitrahmen, nach Ticket oder gefiltert nach Position.
      • symbol_info(symbol) erhält Informationen über ein Finanzinstrument. Ein Analogon von SymbolInfoInteger, SymbolInfoDouble, SymbolInfoString.
      • symbol_info_tick(symbol) erhält den letzten Tick nach Symbol. Ein Analogon von SymbolInfoTick.
      • symbol_select(symbol, enable) aktiviert/deaktiviert ein Symbol im Market Watch. Ein Analogon von SymbolSelect.
      • order_check(request) prüft die Marge der Order. Ein Analogon von OrderCheck.
      • order_send(request) sendet eine Order an den Server. Ein Analogon von OrderSend.
      • order_calc_margin(action, symbol, volume, price) berechnet die Marge für eine Order. Ein Analogon von OrderCalcMargin.
      • order_calc_profit(action, symbol, volume, price_open, price_close) berechnet den Gewinn. Ein Analogon von OrderCalcProfit.

      Python-Skripte auf einem Chart ausführen
      Python-Skripte können direkt auf Plattform-Charts ausgeführt werden, ähnlich wie bei regulären MQL5-Programmen. Diese Skripte sind im Navigator mit speziellen Symbolen gekennzeichnet.


      Skriptnachrichten werden unter dem Abschnitt "Werkzeuge \ Experten" angezeigt. Wenn eine MetaTrader 5-Bibliothek in einem Skript verwendet wird, kann das Skript Handelssymbol- und Kontodaten empfangen sowie Handelsoperationen durchführen.

      Python-Skripte können auf demselben Chart parallel zu anderen MQL5-Skripten und Expert Advisors ausgeführt werden. Um ein Skript, das eine Schleife ausführt, zu stoppen, entfernen Sie es vom Chart.

      Zusätzlicher Schutz
      Um zusätzlichen Kontoschutz bei der Verwendung von Python-Bibliotheken von Drittanbietern zu aktivieren, können Sie die Option "Automatisierten Handel über externe Python-API deaktivieren" in den Terminal-Einstellungen verwenden.


      Python-Skripte können nur Handelsoperationen ausführen, wenn diese Option deaktiviert ist.

    2. Deutlich beschleunigter Neustart von MQL5-Programmen und Neuerstellung von benutzerdefinierten Indikatoren aus MQL5-Programmen. In einigen Fällen werden die Operationen 100 Mal schneller ausgeführt.
    3. Es wurden Funktionen für die Arbeit mit Datenbanken hinzugefügt:

      DatenbankImport
      Importiert Daten aus einer Datei in eine Tabelle.
      lang DatenbankImport(
         int           database,          // Datenbank-Handle empfangen in DatabaseOpen
         const string  table,             // Tabellenname für das Einfügen der Daten
         const string  filename,          // Dateiname zum Importieren der Daten
         uint          flags,             // Kombination der Flags
         const string  separator,         // Trennzeichen der Daten
         ulong         skip_rows,         // Anzahl der ersten zu überspringenden Zeilen
         const string  skip_comments      // Reihe der Zeichen, die Kommentare kennzeichnen
         );

      DatabaseExport
      Exportiert eine Tabelle oder das Ergebnis einer SQL-Anfrage in eine CSV-Datei. Die erstellte Datei ist in UTF-8 encodiert.
      long  DatabaseExport( 
         int           database,           // Datenbank-Handle empfangen in DatabaseOpen 
         const string  table_or_sql,       // Tabellenname oder SQL-Anfrage
         const string  filename,           // Name der CSV-Datei für den Export
         uint          flags,              // Kombination der Flags
         const string  separator           // Trennzeichen der Daten in der CSV-Datei
         );

      DatabasePrint
      Druckt die Tabelle oder das Ergebnis der SQL-Anfrage im Experten-Journal aus.
      long  DatabasePrint(
         int           database,          // Datenbank-Handle empfangen in DatabaseOpen
         const string  table_or_sql,      // Tabellenname oder SQL-Anfrage
         uint          flags              // Kombination der Flags
         );

    4. Hinzugefügt wurde die Funktion FileSelectDialog, die den Systemdialog zum Erstellen/Öffnen einer Datei oder eines Ordners aufruft.
      int  FileSelectDialog(
         string   caption,              // Fenstertitel
         string   initial_dir,          // Anfangsverzeichnis
         string   filter,               // Erweiterungsfilter
         uint     flags,                // Kombination der Flags
         string&  filenames[],          // Array mit den Dateinamen
         string   default_filename      // Standard-Dateiname
         );
      Die neue Funktion ermöglicht die effiziente Benutzerinteraktion mit dem MQL5-Programm.

    5. Ein neuer Wert, DEAL_FEE, in der Aufzählung ENUM_DEAL_PROPERTY_DOUBLE. Er wird für eine Deal-Gebühr verwendet. Der Wert gibt einen separaten Provisionstyp an, der vom Makler erhoben wird.

    Tester

    1. Zusätzliche Funktionen zum Festlegen von nutzerdefinierten Handelskontoeinstellungen während des Strategietests, wie z.B. Handelsbeschränkungen, Margin-Einstellungen und Provisionen. Die neuen Funktionen bieten erweiterte Möglichkeiten zur Modellierung verschiedener Handelsbedingungen.



      Allgemeine Einstellungen
      In diesem Abschnitt können Sie die maximale Anzahl offener Orders und Positionen festlegen, die gleichzeitig auf dem Konto existieren dürfen. Zusätzlich können Sie Zeiten konfigurieren, in denen das Programm nicht handeln darf.

      Marge
      Der Teil ermöglicht die Konfiguration von Regeln der Reservierung für die Marge und von Positionsabrechnungssystemen, die beim Testen verwendet werden können:

      • Risikomanagement — Risikomanagementmodell: OTC- und Börsenmodell, Netting und Hedging-Systeme. Für Einzelheiten lesen Sie bitte die Hilfe.
      • Margin-Call-Level — wenn dieses Level erreicht ist, wechselt das Konto in den Status Margin-Call.
      • Stop-Out-Level — wenn dieses Level erreicht ist, werden alle Aufträge storniert und alle Handelspositionen geschlossen. Diese Levels können in Prozent und in Geld angegeben werden. Im ersteren Fall werden sie durch den Vermögenswert auf dem Konto bestimmt. Wenn "In Prozent" gewählt wird, werden die Level als der Wert des Kontos "Margin-Level" (Geldmittel/Margin*100) definiert.
      • Unrealisierter Gewinn — berücksichtigt den aktuellen schwankenden Gewinn/Verlust in der freien Marge:
        • Keine Verwendung der nicht realisierten Gewinne/Verluste — Gewinn/Verlust der offenen Positionen werden nicht in die Berechnung einbezogen.
        • Nicht realisierte Gewinne/Verluste verwenden — Gewinne/Verluste der offenen Positionen werden in die Berechnung einbezogen.
        • Nicht realisierte Gewinne verwenden — nur die Gewinne einbeziehen.
        • Nicht realisierte Verluste verwenden — nur die Verluste berücksichtigen.
      • Täglich fixierter Gewinn — berücksichtigt den täglich fixierten Gewinn/Verlust des Kunden in der freien Marge:
        • Täglich fixer Gewinn/Verlust verwenden — Gewinne und Verluste, die während eines Handelstages erhalten wurden, werden in die freie Marge einbezogen.
        • Täglich fixierter Verlust — berücksichtigt nur den während des Handelstages erhaltenen Verlust. Während des Tages wird der erhaltene Gewinn im Feld Sonderkonto ("Gesperrt") gesammelt. Am Ende des Handelstages wird der kumulierte Gewinn freigegeben (auf Null gesetzt) und dem Kontostand hinzugefügt (in der freien Marge enthalten).
      • Festen Gewinn am Ende des Tages freigeben — diese Option wird nur dann verfügbar, wenn die Option "Festen Tagesverlust verwenden" gewählt wird. Wenn sie aktiviert ist, wird der kumulierte Gewinn am Ende des Tages aufgelöst (und somit in die freie Marge einbezogen). Andernfalls bleibt dieser Gewinnbetrag gesperrt.

      Provisionen
      Dieser Abschnitt bietet die Kontrolle über die Kommissionen, die für alle Handelsoperationen erhoben werden.

      • Die Provision kann einstufig und mehrstufig sein, d.h. unabhängig vom Dealvolumen/Umsatz sein oder von deren Größe abhängen. Entsprechende Daten werden im Terminal angezeigt.
      • Die Provision kann sofort nach Geschäftsabschluss oder am Ende eines Handelstages/Monats berechnet werden.
      • Getrennte Provisionen können je nach Deal-Richtung erhoben werden: Eingang, Ausgang oder beide Typen.
      • Die Provision kann pro Los oder pro Deal berechnet werden.
      • Die Provision kann in Geld, Prozentsatz oder Punkten berechnet werden.


    2. Optimierte und beschleunigte Arbeit im Market-Scanner-Modus, bei dem mehrere Testdurchgänge für alle in der Market Watch verfügbaren Symbole durchgeführt werden.
    3. Deal- oder das Positionsvolumina werden jetzt bei der Berechnung des Gewinns in Pips berücksichtigt. Zuvor wurde die Berechnung nur für ein Los durchgeführt.
    4. Verbesserte Kontrolle über das Diagramm der Optimierungsergebnisse. Die Bildlaufoption wurde für ein gezoomtes Optimierungsdiagramm hinzugefügt. Durch Doppelklicken auf einen Diagrammpunkt wird das entsprechende Ergebnis in der Durchgangstabelle ausgewählt.
    Aktualisierte Dokumentation.
    13 Dezember 2019
    MetaTrader 5 Platform Build 2280

    Terminal

    1. Es wurde ein Fehler behoben, der dazu führte, dass ein Expert Advisor nicht aus dem Chart ohne Daten gelöscht werden konnte.
    2. Die Anzeige der Chart-Kopfzeilen unter Wine wurde korrigiert.

    MQL5

    1. Verbesserte Lade- und Kompilierungsgeschwindigkeit von MQL5-Programmen.
    2. Ein Doppelklick auf ein Chart wird nun als Ereignis mit einem Klick an ein MQL5-Programm übergeben. Vorher wurde auf ein solches Ereignis nicht reagiert.
    3. Behoben wurde ein Fehler bei der Funktionsausführung von StringTrimRight.
    4. Hinzugefügt wurden die DirectX-Funktionen für 3D-Darstellungen.

    Tester

    1. Es wurde ein Fehler behoben, der dazu führte, dass das Testsymbol in den Einstellungen leer blieb. Der Fehler kann auch das Ergebnis eines Wechsels zwischen Handelskonten mit unterschiedlichen Handelsinstrumenten sein. Das neue Verhalten: Wird das zuvor ausgewählte Symbol nicht auf dem aktuell verbundenen Handelskonto gefunden, wird stattdessen automatisch das erste verfügbare Symbol im Fenster der Marktübersicht ausgewählt.

    MetaEditor

    1. Das Laden der Anwendungssymbole beim erneuten Öffnen von Projekteigenschaften wurde korrigiert.
    Aktualisierte Übersetzungen der Nutzerschnittstellen.
    Fehlerbehebungen auf Basis von Absturzberichten.
    6 Dezember 2019
    MetaTrader 5 Build 2265: DirectX-Funktionen für 3D-Darstellungen in MQL5 und Symboleinstellungen im Strategietester

    Terminal

    1. Jetzt sind weitere Spalten in der Marktübersicht verfügbar. Im Hauptbereich stehen nun 40 zusätzliche Symbolparameter zur Verfügung, die bisher nur über die Registerkarte Details verfügbar waren.




    2. Hinzugefügt wurde die Hervorhebung des aktuell verbundenen Kontos und des aktuellen Servers im Navigator. Die Funktion ist nützlich, wenn Sie mehrere Konten bei verschiedenen Brokern haben.




    3. Aktualisiertes Rahmendesign der Charts. Die Rahmen sind kleiner geworden und damit steht nun mehr Platz für nützliche Informationen zur Verfügung.




    4. Modifizierter Algorithmus zur Berechnung der Handelssummen bei der Anzeige der Handelshistorie als Positionen. Die Werte werden nun auf Basis von Ist-Sätzen berechnet.

      Um die Handelshistorie in Form von Positionen anzuzeigen, verwendet das Terminal Informationen über die im angeforderten Zeitraum abgeschlossenen Deals. Nur die Positionen, die in diesem Zeitraum geschlossen wurden, werden in der Historie angezeigt. Wenn die Position noch offen ist oder ihre Schließzeit nicht innerhalb des gewählten Zeitraums liegt, wird sie in der Historie nicht angezeigt. Daher können sich die gesamten Gewinne und Provisionen im Modus "Positionen" von denen im Modus "Orders/Deals" unterscheiden.

      Sie schauen sich beispielsweise den Verlauf der vergangenen Woche an. In diesem Zeitraum wurden 100 Deals durchgeführt, von denen 98 beim Eröffneten und 20 Positionen geschlossen wurden. Die letzten beiden Deals eröffneten neue Positionen, die bisher nicht geschlossen wurden. In diesem Fall enthält die Historie der Deals 100 Datensätze und entsprechende Gesamtwerte, die auf der Grundlage dieser Deals berechnet werden. Wenn Sie sich die Historie als Positionen anzeigen lassen, sehen Sie 20 Datensätze, die auf 98 Deals basieren. Nur diese Daten werden bei der Berechnung der Gesamtwerte berücksichtigt. Wenn der Broker bei der Eröffnung eines Deals Gebühren erhebt, unterscheidet sich der endgültige Provisionswert in der Deal-Historie von den in der Positionshistorie angezeigten Provisionen, da die beiden letzten Deals im letzteren Fall ignoriert werden.

    5. Ein schnellerer Start von MQL5-Programmen wurde implementiert.
    6. Für die Terminal-Installationsdatei wurde ein neuer /beta-Schlüssel hinzugefügt, der den Download der Beta-Version ermöglicht. Im Normalmodus sollte zuerst die Release-Version installiert werden, die dann bis zu einer Beta-Version aktualisiert werden kann. Wenn Sie diesen Schritt überspringen, können Sie Zeit und Traffic sparen. Beispiel für einen Installationsstart:
      C:\mt5setup.exe /beta
    7. Die Darstellung der Margenanforderungen für Instrumente mit dem Typ "Exchange Stocks" wurde korrigiert.
    8. Beschleunigte Ausführung aller Plattformkomponenten durch den Einsatz des Clang/LLVM-Compilers. In einigen Fällen ist die Kompilierung 20% schneller.

    MQL5

    1. Neue Funktionen und Shader von DirectX 11 für die 3D-Visualisierung wurden hinzugefügt. Jetzt können leistungsstarke dreidimensionale Grafiken direkt in MQL5 erstellt werden.

      Die neue Klasse CCanvas3D ist eine Erweiterung der Klasse CCanvas Custom Graphic. Sie befinde sich im Verzeichnis \MQL5\Include\Canvas\. Die Klasse verfügt über Funktionen zur Darstellung dreidimensionaler Objekte über das DirectX-API.

      • Create — erstellt eine Szene.
      • Attach — verbindet eine Szene mit einem Chart.
      • Destroy — zerstört eine Szene.
      • ObjectAdd — fügt der Szene ein von der Basisklasse CDXObjekt abgeleitetes Objekt hinzu.
      • Render — die vollständige Renderschleife mit Pufferclearing und Rendering aller CDX-Objekte, die über die Methode ObjectAdd hinzugefügt wurden.
      • RenderBegin — startet das Rendern der Szenen, füllt den Renderpuffer mit der angegebenen Farbe (wenn das Flag DX_CLEAR_COLOR gesetzt ist) und den Tiefenpuffer (bei Verwendung von DX_CLEAR_DEPTH) und setzt den Szenenpuffer DXInputScene für den Standard-Shader.
      • RenderEnd — schließt das Rendering der Szenen ab und empfängt ein Ergebnis in einem internen Puffer. Wenn redraw==true, wird das Bild auf dem Chart angezeigt, auf dem es gerade läuft.
      • ViewMatrixGet — empfängt eine Ansichtsmatrix.
      • ViewMatrixSet — setzt eine Ansichtsmatrix. Die Matrix ist nicht kompatibel mit den Methoden ViewPositionSet, ViewRotationSet, ViewTargetSet und ViewUpDirectionsSet.
      • ViewPositionSet — stellt die Kameraposition ein.
      • ViewRotationSet — setzt die Kamera-Rotationsmatrix.
      • ViewTargetSet — setzt den Punkt, auf den die Kamera zeigt. Zusammen mit ViewUpDirectionsSet ist es eine Alternative zu ViewRotationSet.
      • ViewUpDirectionsSet — stellt die vertikale Position der Kamera ein. Zusammen mit ViewTargetSet ist es eine Alternative zu ViewRotationSet.
      • ProjectionMatrixGet — Empfängt eine Projektionsmatrix.
      • ProjectionMatrixSet — Setzt eine Projektionsmatrix.

      Eine ausführliche Dokumentation der neuen Bibliothek wird in Kürze veröffentlicht.




    2. Hinzugefügt wurde die Unterstützung für die Arbeit mit SQLite-Datenbanken direkt aus MQL5. Dies ermöglicht eine einfache Ausführung von SQL-Abfragen, ohne komplexe Anweisungen zu erstellen. Der interne Betrieb wird durch die neue Standardbibliothekserweiterung realisiert.

      Es stehen folgende Funktionen zur Verfügung:
      >
      • DatabaseOpen — öffnet oder erstellt eine Datenbank in der angegebenen Datei
      • DatabaseClose — schließt eine Datenbank
      • DatabaseTableExists — prüft, ob es eine Tabelle in der Datenbank gibt
      • DatabaseExecute — führt eine Abfrage bei der angegebenen Datenbank durch
      • DatabasePrepare — erstellt das Handle für die Anfrage, das mit DatabaseRead() weiter ausgeführt werden kann
      • DatabaseRead — springt zum nächsten Datensatz im Abfrageergebnis
      • DatabaseFinalize — löscht eine Abfrage, die in DatabasePrepare() erstellt wurde
      • DatabaseTransactionBegin — startet die Ausführung einer Transaktion
      • DatabaseTransactionCommit — schließt die Ausführung einer Transaktion ab
      • DatabaseTransactionRollback — Zurücksetzen einer Transaktion
      • DatabaseColumnsCount — empfängt die Anzahl der Felder in einer Abfrage
      • DatabaseColumnName — empfängt den Feldnamen nach Nummer
      • DatabaseColumnType — empfängt Feldtyp nach Nummer
      • DatabaseColumnSize — empfängt Feldgröße in Bytes
      • DatabaseColumnText — empfängt den Feldwert als Zeichenkette aus dem aktuellen Datensatz
      • DatabaseColumnInteger —  empfängt einen Integer-Wert aus dem aktuellen Datensatz
      • DatabaseColumnLong — empfängt einen Long-Wert aus dem aktuellen Datensatz
      • DatabaseColumnDouble — empfängt einen Double-Wert aus dem aktuellen Datensatz
      • DatabaseColumnBlob — empfängt ein Array von Feldwerten aus dem aktuellen Datensatz

      Die folgenden Fehlernummern wurden für die Funktionen hinzugefügt:

      • ERR_MQL_DATABASE_INTERNAL (5120) — interner Datenbankfehler
      • ERR_MQL_DATABASE_INVALID_HANDLE (5121) — ungültiges Datenbankhandle
      • ERR_MQL_DATABASE_TOO_MANY_OBJECTS (5122) maximale Anzahl der Datenbankobjekte überschritten
      • ERR_MQL_DATABASE_CONNECT (5123)Datenbankverbindungsfehler
      • ERR_MQL_DATABASE_EXECUTE (5124) Ausführungsfehler der Anfrage
      • ERR_MQL_DATABASE_PREPARE (5125) Fehler bei der Erstellung von Anfragen
      • ERR_MQL_DATABASE_NO_MORE_DATA (5126) — keine Daten mehr zum Lesen
      • ERR_MQL_DATABASE_STEP (5127) Fehler beim Wechsel zum nächsten Abfragedatensatz
      • ERR_MQL_DATABASE_NOT_READY (5128) Daten zum Lesen von Abfrageergebnissen sind noch nicht bereit
      • ERR_MQL_DATABASE_BIND_PARAMETERS (5129) SQL-Abfrage Auto-Substitutionsfehler

    3. Hinzugefügt wurden neue Eigenschaft von MQL5-Programmen, die die Auswahl einer Standard-Visualisierungsmethode ermöglicht.
      #property optimization_chart_mode "3d,InpX,InpY"
      Die Eigenschaft ermöglicht die Bestimmung des Chart-Typs, der sich am Ende der Optimierung öffnet, sowie der Programmparameter für die X- und Y-Achse.
      Die Eigenschaft legt nur die Standardsicht des Charts fest. Sie kann über das Kontextmenü jederzeit manuell geändert werden.

    4. Die neue Funktion MathArctan2. Liefert das Bogenmaß des Winkels, dessen Tangente gleich dem Verhältnis der beiden angegebenen Zahlen ist.
      double  MathArctan2(
         double  y      // die Y-Koordinate des Punktes
         double  x      // die X-Koordinate des Punktes
         );
    5. Wir haben die allgemeine Optimierung von Programmen zur Leistungssteigerung und Reduzierung des Ressourcenverbrauchs durchgeführt.
    6. Beispiele für mathematische Berechnungen, die im Strategie-Tester durchgeführt werden können, wurden hinzugefügt. Sie befinden sich im Verzeichnis \MQL5\Experts\Examples\Math 3D\Math.
    7. Es wurde eine strengere Kontrolle der namespaces (Namensräume) eingeführt.
    8. Das Laden von verknüpften Bibliotheken bei der Verwendung von .NET-Bibliotheken in MQL5-Programmen wurde hinzugefügt. Wenn die verwendete Bibliothek .NET andere Bibliotheken für den Betrieb benötigt, versucht der Compiler, die benötigten Bibliotheken automatisch aus \MQL5\Libraries zu laden.
    9. Feste Zeitoperationen im MetaTrader-Modul für die Python-Integration. Nun verwenden alle Ausgabedaten die Zeit des Handelsservers, mit dem das Terminal verbunden ist.

    Tester

    1. Eine Fülle von neuen Funktionen und Verbesserungen:


      Nutzereinstellungen für Finanzinstrumente
      Nun können Sie die Einstellungen des Haupthandelsinstruments ändern, für das eine Test/Optimierung durchgeführt wird. Fast alle Spezifikationsparameter können überschrieben werden: Volumen, Handelsmodi, Margenanforderungen, Ausführungsmodus und andere Einstellungen. Wenn Sie also einen Expert Advisor unter verschiedenen Bedingungen überprüfen müssen, ist es nicht erforderlich, ein separates nutzerdefiniertes Symbol zu erstellen und dessen Historie zu erstellen. Dies kann durch Ändern der Standardsymbol-Einstellungen geschehen.



      Wenn die Symbolspezifikation angepasst ist, werden das Zahnradsymbol und das Symbolsymbol mit einem Sternchen gekennzeichnet. Dies zeigt, dass für den aktuellen Test nutzerdefinierte Parameter verwendet werden.




      Letzte Einstellungen/Expert Advisors/Charts
      Mit den neuen Kontextmenübefehlen können Sie schnell testen oder optimieren. Wählen Sie die zuletzt verwendeten Testeinstellungen, die letzten Charts oder Anwendungen:




    MetaEditor

    1. Es wurde die Möglichkeit zugefügt, mit C/C++- und Python-Projekten direkt aus dem MetaEditor zu arbeiten. Jetzt können mehrsprachige Projekte mit dem integrierten Editor verwaltet werden.

      Wenn auf Ihrem PC entsprechende Compiler installiert sind, erkennt MetaEditor diese und fügt sie zu den Einstellungen hinzu. Optional können Sie auf der Registerkarte Compiler Pfade zu den erforderlichen Komponenten angeben. Über die gleiche Registerkarte können Sie die Komponenten laden, indem Sie auf Installieren neben dem entsprechenden Feld klicken.




      Danach können Sie mit C/C++- und Python-Projekten ähnlich wie mit MQL5-Programmen arbeiten.

    2. Hinzugefügt wurde eine Unterstützung für Teilprojekte im Verzeichnis der gemeinsamen Projekte, die für die gemeinsame Projektentwicklung über MQL5 Storage bestimmt sind. Bisher konnten auf der obersten Ebene nur einzelne Projekte angelegt werden.
    3. Eingebaute Debugger-Updates.
    4. Das Hinzufügen eines Funktionskopfes bei Verwendung eines Code Stylers wurde korrigiert.
    5. Die Befehle 'Zur vorherigen/nächsten Cursorposition springen' sind nun nicht nur im Menü Ansicht, sondern auch in der Symbolleiste verfügbar.
    6. Leerzeichen können nun auch in Projektnamen verwendet werden.

    Android

    1. Es wurde die Möglichkeit zugefügt, direkt zu den Ein-/Auszahlungsseiten auf der Broker-Website zu wechseln.

      Sie müssen nicht mehr nach geeigneten Funktionen im Händlerraum auf der Website Ihres Brokers suchen. Befehle für eine direkte Navigation sind direkt in den Terminals verfügbar: Aus den Bereichen Konten und Handel kann der Nutzer direkt auf Ein- und Auszahlungsseiten wechseln:



      • Ein- und Auszahlungsvorgänge sind nur verfügbar, wenn für das Handelskonto auf der Brokerseite entsprechende Funktionen aktiviert sind.
      • Das Handelsterminal führt keine Kontoein- und -auszahlungen durch. Die integrierten Funktionen leiten den Nutzer auf die entsprechenden Seiten der Broker-Website weiter.

    2. Positionen in der Historie werden nun nach dem Datum der Positionsschließung sortiert.
    3. Hinzugefügt wurde das Markieren von Positionen, die durch Stop-Loss oder Take-Profit geschlossen wurden, mit roten und grünen vertikalen Linien im Abschnitt History.
    4. Hinzugefügt wurden neue Felder in der Spezifikation eines Handelssymbols:

      • Kategorie — die Eigenschaft wird zur zusätzlichen Kennzeichnung von Finanzinstrumenten verwendet. Dies kann beispielsweise die Marktsparte sein, zu der das Symbol gehört: Landwirtschaft, Öl & Gas und andere. Die Kategorie wird nur angezeigt, wenn der Broker die entsprechenden Informationen zur Verfügung stellt.
      • Börse — der Name der Börse an der das Wertpapier gehandelt wird. Die Kategorie wird nur angezeigt, wenn der Broker die entsprechenden Informationen zur Verfügung stellt.

    5. Hinzugefügt wurde eine Statusanzeige bezüglich eines Margin-Calls im Handelsbereich. Bei Eintreten dieser Situation werden die Parameter Marge, Freie Marge und Margenstufe rot dargestellt.
    6. Die Anzeige der OTP-Sektion Öffnungsknopf in Tabletten wurde korrigiert.
    7. Andere Korrekturen und Verbesserungen.

    iPhone/iPad

    1. Es wurde die Möglichkeit zugefügt, schnell zu den Ein-/Auszahlungsseiten auf der Broker-Website zu wechseln. Weitere Informationen finden Sie in der Liste What's New von MetaTrader 5 für Android.



    2. Unterstützung für den Dunkelmodus für iOS/iPadOS hinzugefügt.
    3. Der Bereich Einmal-Passwort ist jetzt in der iPad-Version verfügbar.
    4. Die Positionen, die durch Stop-Loss oder Take-Profit geschlossen werden, sind im Abschnitt Historie mit roten und grünen vertikalen Linien markiert.
    5. Positionen in der Historie werden nun nach dem Datum der Positionsschließung sortiert. Wenn die Position noch nicht geschlossen wurde, wird ihr Öffnungsdatum für die Sortierung verwendet.
    6. Weitere Korrekturen und Verbesserungen.


    18 Oktober 2019
    MetaTrader 5 build 2190

    Terminal

    1. Die Anzeigereihenfolge der MQL5-Programme im Navigator wurde korrigiert.

    MQL5

    1. Fehler bei der Kompilierung wurden behoben, die mit der Verwendung lokaler statischer Variablen in Programmen mit der Deklaration input group verbunden waren.

    VPS

    1. Korrigierte Anforderung von Hosting Journalen.

    Tester

    1. Verbesserte Darstellung der dreidimensionalen Optimierungsdiagramme.
    2. Der Empfang von Frames während der Vorwärtsoptimierung wurde korrigiert. Nun stehen alle Frames aus der Haupt- und Vorwärtsoptimierung in der Funktion OnTesterDeinit zur Verfügung.
    3. Die Bildung eines Symbolbaums in den Einstellungen des Strategy Tester wurde korrigiert.

    Übersetzung der Benutzeroberfläche in Punjabi (Indien) hinzugefügt.

    Die Dokumentation wurde aktualisiert.

    Fehlerbehebungen auf Basis von Absturzberichten.

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

    5 Oktober 2019
    MetaTrader 5 Plattform Build 2170: MQL5 Umgebung, globaler Strategietester und Updates des integrierten Virtual Hostings

    Terminal

    1. Völlig neu gestaltete Verwaltungsoptionen des integrierten Virtual Hostings. Alle Informationen über das gemietete Terminal sowie die Funktionen Umgebungsmigration, Stopp und Start sind nun in einer separaten Registerkarte des Werkzeugfensters verfügbar.

      In früheren Versionen waren die Funktionen des Virtual Hostings im Kontextmenü des Navigator-Fensters verfügbar. Jetzt sind alle notwendigen Informationen und Steuerbefehle übersichtlich in der Registerkarte "VPS" angeordnet:




      Die grundlegenden Informationen zum Abonnement werden auf der linken Seite angezeigt:

      • Verbindungsdaten: Vergleich der Netzwerkverzögerungen zwischen Ihrem Terminal auf dem Hosting-Server und auf einem lokalen PC.
      • Das Handelskonto, für das ein Hosting gemietet wurde, und der Zahlungsplan.
      • Eindeutige Abonnementsidentifikation. Ein Klick auf die ID öffnet den Bereich Hosting im Benutzerprofil der MQL5.community, von dem aus das Abonnement verwaltet werden kann.
      • Registrierungsdatum und aktueller Stand. Wird der Hosting-Dienst gestoppt, erscheint hier sofort ein entsprechender Status.

      Mit der Start/Stop-Taste kann das virtuelle Terminal schnell gestartet oder gestoppt werden.

      Daten über die Serverhardware und den CPU-Belastungsdiagramme des Hostings werden im rechten Teil des Fensters angezeigt. Basierend auf den angezeigten Informationen können Sie rechtzeitig reagieren, wenn Ihr Expert Advisor oder Indikator übermäßigen Speicherplatz oder CPU-Zeit beansprucht.

      Informationen über die letzte Migration der Handelsumgebung sowie Migrationsbefehle sind ebenfalls hier verfügbar. Diese Befehle ermöglichen eine schnelle Migration der Umgebung nach dem Kauf eines Abonnements.

      Eine virtuelle Plattform kann über die Registerkarte "VPS" gemietet werden. Der Mietvorgang hat sich nicht geändert und ist wie vorher genauso schnell und einfach. Sie müssen nur einen Zahlungsplan und einen geeigneten Zahlweg auswählen. Der beste Server für die Verbindung zu Ihrem Broker wird automatisch ausgewählt.




    2. Es wurde die Möglichkeit hinzugefügt, schnell zu den Ein- und Auszahlungsvorgängen auf der Broker-Website zu wechseln.

      Sie müssen nicht mehr nach geeigneten Funktionen im Händlerraum auf der Website Ihres Brokers suchen. Schnelle Navigationsbefehle sind direkt in den Terminals verfügbar: im Menü Konten im Navigator und in Extras > der Registerkarte Handel:



      • Ein- und Auszahlungsvorgänge sind nur verfügbar, wenn für das Handelskonto auf der Brokerseite entsprechende Funktionen aktiviert sind.
      • Das Handelsterminal führt keine Kontoein- und -auszahlungen durch. Die integrierten Funktionen leiten den Nutzer auf die entsprechenden Seiten der Broker-Website weiter.
    3. Neue Felder in der Spezifikation des Handelssymbols:

      Kategorie
      Diese Eigenschaft wird zur zusätzlichen Bewertung von Finanzinstrumenten genutzt. Dies kann beispielsweise die Marktsparte sein, zu der das Symbol gehört: Landwirtschaft, Öl & Gas und andere. Die Kategorie wird nur angezeigt, wenn der Broker die entsprechenden Informationen zur Verfügung stellt.

      Börsenplatz
      Der Name des Handelsplatzes, an der das Wertpapier gehandelt wird. Die Kategorie wird nur angezeigt, wenn der Broker die entsprechenden Informationen zur Verfügung stellt.

      Provisionen
      Informationen über Provisionen, die ein Broker für den Handel des Symbols berechnet. Die Berechnungsdetails werden hier angezeigt:

      • Die Provision kann einstufig und mehrstufig sein, d.h. unabhängig vom Dealvolumen/Umsatz sein oder von der Größe abhängen. Entsprechende Daten werden im Terminal angezeigt.
      • Die Provision kann sofort nach Geschäftsabschluss oder am Ende eines Handelstages/Monats berechnet werden.
      • Die Provision kann je nach Geschäftsrichtung berechnet werden: bei Eröffnung, beim Schließen oder in beiden Fällen.
      • Die Provision kann pro Lot oder pro Deal berechnet werden.
      • Die Provision kann in Geld, Prozentsatz oder Punkten berechnet werden.

      Der folgende Eintrag bedeutet z.B., dass eine Provision sofort nach Eröffnung und nach dem Schließen berechnet wird. Wenn das Dealvolumen zwischen 0 und 10 Lose beträgt, wird eine Provision von 1,2 USD pro Vorgang berechnet. Wenn das Dealvolumen 11 bis 20 Lose beträgt, wird eine Provision von 1,1 USD pro Los des Deals berechnet.
      Provision | Sofort, Volumen, Eröffnung/Schließen
      0  - 10  | 1.2 USD je Deal
      11 - 20  | 1.1 USD je Los



    4. Zusätzliche Felder für Optionen wurde den Symbolspezifikationen hinzugefügt:

      • Optionstyp — Call oder Put
      • Underlying — das zugrunde liegende Symbol der Option
      • Ausübungspreis — Optionsausübungspreis

    5. Für Optionen wurden "griechische Zeichen" hinzugefügt: Delta, Gamma, Vega, Theta, Rho. Broker können zusätzliche Informationen zu solchen Instrumenten bereitstellen. Die Daten werden im Bereich Details des Fensters Market Watch angezeigt und können für die erweiterte Handelsanalyse verwendet werden:




    6. Das Fadenkreuz des Charts zeigt nun zusätzlich zu den bisher verfügbaren Kernen den Abstand zwischen den Preisniveaus in Prozent an:




    7. Es wurde die Darstellung eines resultierenden Preises in den Handelsdialogen während der Markt- und Börsenausführung hinzugefügt, wenn dieser Preis zum Zeitpunkt des Eingangs einer Antwort vom Broker verfügbar ist:




    8. Es wurde ein gelegentlicher Fehler behoben, aufgrund dessen der Befehl "Alle anzeigen" im Fenster Marktübersicht die Liste aller verfügbaren Handelsinstrumente nicht anzeigen konnte.

    MQL5

    1. Der Namensraum (scope) wurde überarbeitet und damit ist MQL5 noch näher an C++ herangeführt worden. Dies bietet MQL5-Programmierern erweiterte Möglichkeiten im Betrieb mit Bibliotheken von Drittanbietern. Mit dem Update entfällt die Notwendigkeit, Bibliotheken zu modifizieren und Identifikatoren zu vereinheitlichen.

      Beispiel: Ein Code enthält die Deklaration von zwei gleichnamigen Strukturen, die jedoch zu verschiedenen Klassen gehören. In früheren Versionen führte eine solche Deklaration zu einem Kompilierfehler: "Identifikator bereits verwendet". Nun wird dieser Code erfolgreich kompiliert und ausgeführt. Für einen korrekten Zugriff auf die gewünschte Variable/Struktur/Funktion von außerhalb ihres Umfangs sollten Sie eine Klasse angeben (in diesem Fall ist es CBar::Item).
      class CFoo
        {
      public:
         struct Item { int x; };
        };
      //+------------------------------------------------------------------+
      class CBar
        {
      public:
         struct Item { int x; };
        };
        
      CBar::Item item;  // korrekte Deklaration der Struktur item der Klasse CBar
      Item       item;  // falsche Deklaration
      Hinzugefügt wurde die Unterstützung von Namensräumen, die mehr Möglichkeiten bei der Verwendung von Drittanbieter-Code/Bibliotheken in MQL5-Anwendungen bietet.

      #define PrintFunctionName() Print(__FUNCTION__)
      
      namespace NS
      {
      void func()
        {
         PrintFunctionName();
        }
      
      struct C
        {
         int               x;
                           C() { PrintFunctionName(); };
        };
      }
      
      struct C
        {
         int               x;
                           C() { PrintFunctionName(); };
        };
      
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
      void func()
        {
         PrintFunctionName();
        }
      //+------------------------------------------------------------------+
      //| Script program start function                                    |
      //+------------------------------------------------------------------+
      void OnStart()
        {
         func();
         NS::func();
      
         C c;
         NS::C ac;
        }
      Nach der Ausführung wird das folgende Ergebnis ausgegeben:
      2019.09.18 13:39:35.947    TestScript (AUDCAD,H1)    func
      2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::func
      2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    C::C
      2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::C::C

    2. Die neue Version bietet einen schnelleren Zugriff auf die Daten von Zeitreihen mit folgender Funktion: iTime, iOpen, iHigh, iLow, iClose, iVolume, iTickVolume, iSpread.

    3. Ergänzt wurde die Unterstützung des Attributs "=delete". Damit kann die Verwendung bestimmter Klassenmethoden verhindert werden.
      class A
        {
         void              operator=(const A &)=delete;    // prohibit object copying operator
        };
      
      class B : public A
        {
        };
      
      //+------------------------------------------------------------------+
      //| Script program start function                                    |
      //+------------------------------------------------------------------+
      void OnStart()
        {
         A a1,a2;
         B b1,b2; 
        
         a1=a2;
         b1=b2;
        }
      In diesem Beispiel wirft der Compiler Fehler für "a1=a2" und "b1=b2" aus:
      attempting to reference deleted function 'void A::operator=(const A&)'
         function 'void A::operator=(const A&)' was explicitly deleted here

      attempting to reference deleted function 'void B::operator=(const B&)'
         function 'void B::operator=(const B&)' was implicitly deleted because it invokes deleted function 'void A::operator=(const A&)'

    4. Die Enumeration ENUM_SYMBOL_INFO_STRING wurde um folgende Werte erweitert:

      • SYMBOL_CATEGORY — Symbolkategorie. Sie wird zur zusätzlichen Kennzeichnung von Finanzinstrumenten verwendet. Dies kann beispielsweise die Marktsparte sein, zu der das Symbol gehört: Landwirtschaft, Öl & Gas und andere.
      • SYMBOL_EXCHANGE — der Name der Börse, an der das Symbol gehandelt wird.

    5. Unterstützung für die Positionsschließung nach der FIFO-Regel hinzugefügt.

      • Der Wert ACCOUNT_FIFO_CLOSE wurde zu ENUM_ACCOUNT_INFO_INTEGER hinzugefügt. Er führt dazu, dass Positionen nur nach der FIFO-Regel geschlossen werden können. Wenn der Wert der Eigenschaft wahr ist, können die Positionen für jedes Instrument nur in der gleichen Reihenfolge geschlossen werden, in der sie geöffnet wurden: das älteste sollte zuerst geschlossen werden, dann das nächste usw. Bei einem Versuch, Positionen in einer anderen Reihenfolge zu schließen, wird ein Fehler zurückgegeben. Bei Konten ohne Hedging-Positionsverwaltung (ACCOUNT_MARGIN_MODE!=ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) ist der Wert dieser Eigenschaft immer "falsch".
      • Neuer Rückgabewert: MT_RET_REQUEST_CLOSE_ONLY — der Auftrag wird abgelehnt, da für das Symbol die Regel "Nur das Schließen vorhandener Positionen nach FIFO-Regel erlaubt" gesetzt ist.

      Es gibt im Wesentlichen drei Methoden, um eine Position zu schließen:

      • Schließen vom Client-Terminal aus: Der Händler schließt die Position manuell, mit einem Handelsroboter, basierend auf dem Signals Service Abonnement, etc. Im Falle eines Versuchs, eine Position zu schließen, die nicht der FIFO-Regel entspricht, erhält der Händler einen entsprechenden Fehler.
      • Schließen bei Stop Loss oder Take Profit-Aktivierung: Diese Orders werden serverseitig verarbeitet, so dass die Positionsschließung nicht auf der Händler-(Terminal-)Seite angefordert wird, sondern vom Server initiiert wird. Wenn Stop-Loss oder Take-Profit für eine Position auslöst und diese Position nicht der FIFO-Regel entspricht (es gibt eine ältere Position für das gleiche Symbol), wird die Position nicht geschlossen.
      • Schließen beim Auslösen von Stop-Out: Solche Operationen werden auch serverseitig verarbeitet. In einem normalen Modus, in dem das FIFO-basierte Schließen deaktiviert ist, werden im Falle von Stop-Out Positionen geschlossen, beginnend mit derjenigen mit dem größten Verlust. Wenn diese Option aktiviert ist, wird zusätzlich die Eröffnungszeit der Verlustpositionen überprüft. Der Server ermittelt die Verlustpositionen für jedes Symbol, findet die älteste Position für jedes Symbol und schließt dann diejenige, die den größten Verlust unter den gefundenen Positionen aufweist.

    6. Optionen zur Parametergruppierung über "input group" hinzugefügt. Dies ermöglicht eine visuelle Trennung der Parameter basierend auf der zugrunde liegenden Logik.

      Im folgenden Expert Advisor Code sind die Eingabeparameter nach ihrem Zweck gruppiert:
      input group           "Signal"
      input int             ExtBBPeriod    =20;         // Bollinger Bands period
      input double          ExtBBDeviation =2.0;        // deviation
      input ENUM_TIMEFRAMES ExtSignalTF    =PERIOD_M15; // BB timeframe
      
      input group           "Trend"
      input int             ExtMAPeriod    =13;         // Moving Average period
      input ENUM_TIMEFRAMES ExtTrendTF     =PERIOD_M15; // MA timeframe
      
      input group           "ExitRules"
      input bool            ExtUseSL       =true;       // use StopLoss
      input int             Ext_SL_Points  =50;         // StopLoss in points
      input bool            ExtUseTP       =false;      // use TakeProfit
      input int             Ext_TP_Points  =100;        // TakeProfit in points
      input bool            ExtUseTS       =true;       // use Trailing Stop
      input int             Ext_TS_Points  =30;         // Trailing Stop in points
      
      input group           "MoneyManagement"
      sinput double         ExtInitialLot  =0.1;        // initial lot value
      input bool            ExtUseAutoLot  =true;       // automatic lot calculation
      
      input group           "Auxiliary"
      sinput int            ExtMagicNumber =123456;     // EA Magic Number
      sinput bool           ExtDebugMessage=true;       // print debug messages
      Wenn ein solcher Expert Advisor im Strategietester gestartet wird, können Eingabeparameterblöcke durch Doppelklick auf den Gruppennamen ein- oder ausgeblendet werden, und alle Parameter innerhalb einer Gruppe können mit einem einzigen Kontrollkästchen zur Optimierung ausgewählt werden.




    7. Der Import von DLL-Funktionen mit Namen, die mit den Namen der MQL5-Funktionen übereinstimmen, wurde korrigiert. Beispiel:
      #import "lib.dll"
      int func();
      #import
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
      int func()
        {
         return(0);
        }
      //+------------------------------------------------------------------+
      //| Script program start function                                    |
      //+------------------------------------------------------------------+
      void OnStart()
        {
         Print( func() );
        }
      In früheren Versionen wurde der folgende Fehler während der Kompilierung zurückgegeben:
      'func' - ambiguous call to overloaded function with the same parameters
      could be one of 2 function(s)
         int func()
         int func()
      Anstelle des Fehlers wird nun standardmäßig die integrierte MQL5-Funktion mit höherer Priorität verwendet. Die importierte Funktion kann durch explizite Angabe des Namensraumes aufgerufen werden:
      void OnStart()
        {
         Print( lib::func() );
        }
    8. Die Angabe der Zeit in den Nachrichten des Wirtschaftskalenders wurde korrigiert. Jetzt werden Ereignisse unter Berücksichtigung der Zeitzone des Handelsservers, mit dem das Terminal verbunden ist, anstelle der lokalen Computerzeitzone ausgegeben.
    9. Korrigiert wurde ein übermäßiger Speicherbedarf in den Funktionen CopyTicks und CopyTicksRange.

    Signale

    1. Die Darstellung von Signalcharts bei der Arbeit auf Wine (Mac OS und Linux) wurde korrigiert.

    Tester

    1. Großes Update des Strategietesters. Neue Startseite, neu gestaltete Einstellungsseite, verbesserte Nutzerfreundlichkeit.

      Startseite
      Jetzt, nach dem Start des Testers, sieht der Benutzer anstelle mehrerer Einstellungen eine Liste von Standardaufgaben, indem er auswählt, welche er schnell testen kann. Das neue Design ist in erster Linie für unerfahrene Anwender gedacht.

      Wir haben die häufigsten Strategietest- und Optimierungsaufgaben ausgewählt und der Startseite hinzugefügt. Darüber hinaus kann eine der zuvor ausgeführten Aufgaben von der Startseite aus neu gestartet werden. Wenn Sie viele Aufgaben ausgeführt haben und sie nicht in die Startseite passen, verwenden Sie die Suchleiste. Sie können einen Test anhand eines beliebigen Parameters finden: Programmname, Symbol, Zeitrahmen, Modellierungsmodus, etc.




      Ausblenden irrelevanter Parameter
      Nach der Auswahl einer Aufgabe fährt der Benutzer mit weiteren Testparametern fort: Auswahl eines Expert Advisors, Symbol, Testzeitraum, etc. Alle irrelevanten Parameter, die für die ausgewählten Aufgaben nicht benötigt werden, sind auf der Setup-Seite ausgeblendet. Wenn beispielsweise mathematische Berechnungen ausgewählt werden, sollten nur zwei Parameter angegeben werden: das zu testende Programm und der Optimierungsmodus. Die Einstellungen für Testzeitraum, Verzögerung und Tick-Erzeugung werden ausgeblendet.




      Komfortabler Testaufbau
      Aus Gründen der Übersichtlichkeit wurden einige der Parameter auf der Setup-Seite neu angeordnet. Für die Verzögerungs- und Visualisierungsparameter wurden erweiterte Erläuterungen hinzugefügt. Darüber hinaus können Testeinstellungen nun gespeichert und manuell hochgeladen werden, so dass ein Händler schnell zu früheren Einstellungen zurückkehren kann.




      Über die gleiche Registerkarte können Sie das Programm zur Bearbeitung im MetaEditor ohne Umwege öffnen.

      Profitberechnung in Pips
      Mit den Einstellungen können Sie die Gewinnermittlung in Pips aktivieren. Dieser Modus beschleunigt das Testen, da es nicht notwendig ist, den Gewinn neu zu berechnen, um die Währung mit Hilfe von Umrechnungskursen zu verwenden (und somit ist es nicht notwendig, die entsprechende Preisentwicklung herunterzuladen). Swap- und Provisionsberechnungen werden in diesem Modus nicht durchgeführt.




      Bitte beachten Sie, dass bei der Berechnung des Gewinns in Pips das Positionsvolumen keine Rolle spielt. Für jede Position wird nur die Anzahl der gewonnenen/verlorenen Pips berechnet. Auch die Margenkontrolle wird in diesem Modus nicht durchgeführt. Verwenden Sie es nur für eine schnelle und grobe Strategieabschätzung und überprüfen Sie dann die erzielten Ergebnisse mit genaueren Modi.

      Allgemeine Verbesserungen
      Die Start-/Stopptaste für das Testen und die Fortschrittsanzeige wurden in die Registerkartenleiste verschoben. So kann der Benutzer den Prozess von jedem Abschnitt des Strategietesters aus steuern. Das Testen von Start-/Stoppbefehlen wurde auch in die Kontextmenüs der Einstellungs- und Eingabebereiche aufgenommen.




    2. Die Optimierungsgrafik kann nun im Hauptarbeitsbereich des Terminals angezeigt werden, statt sie in einem eigenen Bereich des Testers zu zeigen. Auf diese Weise steht viel mehr Platz für die Datenanalyse zur Verfügung. Auch das 3D-Visualisierungssystem wurde aktualisiert.




    3. Speichern des Optimierungs-Cache für den Modus "Alle Symbole in der Marktübersicht" hinzugefügt.
    4. Speichern des Testcaches hinzugefügt.

      In früheren Versionen wurden ausgeführte Aufgabenergebnisse nur bei der Optimierung von Expert Advisors in Dateien gespeichert. Jetzt werden Cache-Dateien auch während einzelner Tests gespeichert, so dass der Nutzer jederzeit zu früheren Berechnungen zurückkehren und Statistiken, Saldo-, Aktien- und Drawdowngrafiken einsehen kann. In zukünftigen Versionen wird diese Option den Vergleich der Testergebnisse ermöglichen.

      Um frühere Testergebnisse zu laden, verwenden Sie die neue Tester-Startseite: Klicken Sie auf "Vorherige Ergebnisse" und wählen Sie den gewünschten Standort aus:




    5. Deutlich beschleunigtes Testen und Optimieren, einschließlich Operationen, die mit dem MQL5 Cloud Network durchgeführt werden.
    6. Korrigierte und optimierte Arbeit mit Frames.

    MetaEditor

    1. Es wurde die Möglichkeit zugefügt, den Code Styler zu konfigurieren.

      Der MetaEditor enthält einen integrierten Code Styler, der eine automatische Formatierung des Programmtextes gemäß dem angenommenen Standard ermöglicht. Jetzt können Sie neben dem allgemeinen Stil auch andere gängige Standards verwenden. Öffnen Sie dazu die MetaEditor-Einstellungen und wählen Sie den gewünschten Stil aus:




      Folgende Parameter können für den Styler zusätzlich eingestellt werden:

      Leerzeichen je Einzug
      Legt die Anzahl der Leerzeichen fest, die beim Ausrichten von verschachtelten Konstruktionen verwendet werden:
      if(condition)
        {
         //---
        }

      Ersetzen der Tabulatoren durch Leerzeichen
      Wenn diese Option aktiviert ist, ersetzt der Styler alle Registerkarten im Code durch Leerzeichen. Die Anzahl der Zeichen pro Tabulator wird im Abschnitt Allgemein eingestellt.

      Löschen von Leerzeilen
      Wenn diese Option aktiviert ist, löscht der Styler alle Zeilen, die nur ein Zeilenumbruch enthalten.

      Eine Leerstelle nach einem Komma und Semikolon einfügen
      Wenn diese Option aktiviert ist, trennt der Styler Konstruktionen mit Elementaufzählungen optisch. Beispiel:
      // vorher
      ParameterGetRange("InpX",enable,x_cur,x_start,x_step,x_stop);
      // nachher
      ParameterGetRange("InpX", enable, x_cur, x_start, x_step, x_stop);

      Leerstellen um Deklarationsoperatoren herum einfügen
      Wenn diese Option aktiviert ist, fügt der Styler Leerzeichen um die Zuweisung, Gleichheit, den Vergleich und andere Operatoren ein. Beispiel:
      // vorher
      if(x==1&y!=2)
        {
         int a=0;
        }
      // nachher
      if(x == 1 & y != 2)
       {
        int a = 0;
       }

    2. Der Befehl "Im Navigator anzeigen" wurde dem Kontextmenü der Datei-Lesezeichen hinzugefügt. So kann der Benutzer eine zur Bearbeitung geöffnete Datei leicht in der Ordnerstruktur des Editors finden.




    3. Die Anzeige des Schlüsselwortes "union" in den Tooltips wurde korrigiert.

    Die Benutzeroberfläche wurde zusätzlich in 18 weitere Sprachen übersetzt.

    • Europäische Region — Schwedisch, Litauisch, Dänisch, Lettisch, Estnisch, Serbisch, Slowenisch, Slowakisch, Finnisch, Georgisch
    • Asiatische Region — Javanisch, Marathi, Bengali, Punjabi, Tamilisch, Telugu
    • Afrikanische Region — Suaheli, Hausa

    Die Plattformoberfläche ist nun in 50 Sprachen verfügbar, die von mehr als 4 Milliarden Menschen gesprochen werden.

    Um Ihre Sprache für die Benutzeroberfläche einzustellen, navigieren Sie zum Menü "Ansicht \ Sprache" oben im Terminal.

    Die Dokumentation wurde aktualisiert.

    Fehlerbehebungen auf Basis von Absturzberichten.

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

    12 Juni 2019
    MetaTrader 5 Plattform build 2085: Integration mit Python und Verbesserungen des Strategietesters

    Terminal

    1. Hinzugefügt wurde ein neues API, das das Abrufen MetaTrader 5 Terminaldaten durch Anwendungen ermöglicht, die die Sprache Python verwenden.

      Python ist eine moderne High-Level-Programmiersprache zur Entwicklung von Skripten und Anwendungen. Es enthält mehrere Bibliotheken für maschinelles Lernen, Prozessautomatisierung sowie Datenanalyse und Visualisierung.

      Das MetaTrader-Paket für Python wurde für das effiziente und schnelle Abrufen von Austauschdaten über das Interprozessorkommunikation direkt vom MetaTrader 5 Terminal aus entwickelt. Die so erhaltenen Daten können für statistische Berechnungen und maschinelles Lernen weiterverwendet werden.



      Verbindung

      1. Laden Sie die letzte Pythonversion von https://www.python.org/downloads/windows
      2. Beim Installieren von Python prüfen Sie "Add Python X.X to PATH%", damit Sie die Python-Skripts aus der Kommandozeile heraus starten können.
      3. Installieren des MetaTrader 5 Moduls aus der Kommandozeile
        pip install MetaTrader5
      4. Fügen Sie die Pakete matplotlib und pytz hinzu
        pip install matplotlib
        pip install pytz

      Funktionen

      • MT5Initialize stellt eine Verbindung mit dem MetaTrader 5 Terminal her
      • MT5Shutdown schließt die vorher hergestellte Verbindung zu MetaTrader 5 Terminal wieder
      • MT5TerminalInfo ruft den Status und die Parameter des verbundenen MetaTrader 5 Terminals ab
      • MT5Version gibt die Version des MetaTrader 5 Terminals zurück
      • MT5WaitForTerminal wartet, bis sich MetaTrader 5 Terminal mit dem Handelsserver verbindet
      • MT5CopyRatesFrom ruft die Bars vom MetaTrader 5 Terminal, beginnend mit dem angegebenen Datum ab
      • MT5CopyRatesFromPos ruft die Bars vom MetaTrader 5 Terminal, beginnend mit dem angegebenen Index ab
      • MT5CopyRatesRange ruft die Bars der angegebenen Zeitspanne vom MetaTrader 5 Terminal ab
      • MT5CopyTicksFrom ruft die Ticks vom MetaTrader 5 Terminal, beginnend mit dem angegebenen Datum ab
      • MT5CopyTicksRange ruft die Ticks der angegebenen Zeitspanne vom MetaTrader 5 Terminal ab


    2. Die Bereiche Market und Signal wurden optimiert. Jetzt läuft das Angebot von Produkten und Signalen bis zu siebenmal schneller und bietet daher eine verbesserte Sucherfahrung.




    3. Hinzugefügt wurde die Unterstützung von "Markt", "Signale" und "Suche" auf Wine. Nutzer von Linux und Mac OS können jetzt auf den größten Markt von Handelsprogrammen und dem Kopieren des Handels zugreifen.




    4. Das integrierte Lernprogramm wurde in mehr als 30 Sprachen übersetzt, einschließlich Spanisch, Chinesisch, Portugiesisch und Deutsch und vielen anderen. Um die interaktiven Hinweise in der gewünschten Sprache zu erhalten, wechseln Sie sie in die Sprachschnittstelle über das Menü Ansicht.




    5. Neue Optionen ermöglichen die Überprüfung von Telefonnummern und E-Mails, die Händler beim Eröffnen von Demo- und Vorkonten angeben.

      Die verwendete Art der Verifikation wird vom Broker festgelegt. Wenn die Option aktiviert ist, werden bei der Kontoanfrage automatisch Bestätigungscodes an den Händler gesendet und es erscheinen spezielle Codefelder im Dialogfenster:




      Der Bestätigungscode ist gültig für mehrere Minuten. Wenn der Code nicht innerhalb dieser Zeit in das Feld eingegeben wird, muss der Händler den Vorgang wiederholen.
      Vor dem Senden des Codes prüft das System, ob die angegebene Telefonnummer/E-Mail zuvor bestätigt wurde. Wenn der Händler die Überprüfung von seinem Computer aus bereits bestanden hat, wird das Konto ohne zusätzliche Bestätigung eröffnet. Somit gibt es keine zusätzlichen Schwierigkeiten für Händler bei der Kontoanfrage.

    6. Die Zahlungsmöglichkeiten der MQL5.community über das System PayPal wurden erweitert. Mit diesem System können Käufe nun mit einem Klick durchgeführt werden.

      Wie es funktioniert
      Nachdem Sie sich für einen Kauf über Ihr PayPal-Konto eingeloggt haben, werden Sie aufgefordert, weitere Zahlungen an unser Unternehmen zu erlauben:





      Mit der Bestätigung dieser Option, können Sie danach mit einem Klick auf die Schaltfläche des vorher gesicherten Kontos einkaufen:




      Wenn Sie auf "Abbrechen und zu MetaQuotes Software Corp. zurückkehren" klicken, tätigen Sie Zahlungen auf normale Weise, indem Sie die PayPal-Kontoinformationen für jeden Kauf manuell eingeben.
      Die Website MQL5.com und die Plattform MetaTrader 5 speichern Ihre Zahlungsdaten nicht. Wenn Sie Geld einzahlen, einen Kauf auf dem Market tätigen oder ein Signal abonnieren, werden die Daten auf Seiten des Zahlungssystems überprüft. Sie können jederzeit den Link zu Ihrem PayPal-Konto entfernen.

    7. Verbesserungen und Optimierungen des Strategietesters.

      Wir haben eine Vielzahl von versteckten Verbesserungen und Fehlerbehebungen durchgeführt, um den Betrieb des Strategietesters zu optimieren. Das Update ermöglicht ein viel schnelleres Testen einiger der Aufgabentypen und eine höhere Betriebsstabilität. Zu den wichtigsten Verbesserungen gehören:

      Operationen mit Frames
      Der Betrieb mit Frames auf lokalen, Netzwerk- und Cloud-Agenten wurde optimiert. Solche Operationen werden nun schneller verarbeitet und nie übersprungen.

      Verteilung von Aufgaben an Agenten
      Der Tester kann nun während des Optimierungsprozesses Aufgaben an Agenten weitergeben. Wenn ein neuer Agent verfügbar ist (oder einer der zuvor verwendeten freigegeben wurde), erstellt der Tester automatisch ein neues Aufgabenpaket mit denjenigen, die zuvor auf andere Agenten verteilt worden war. Aufgaben können auch neu verteilt werden, wenn langsame Agenten erkannt werden. Aufgaben solcher Agenten werden an andere Agenten weitergeleitet, um die Optimierung schneller zu beenden.

      Die Aufgabenverteilung im mathematischen Berechnungsmodus ist schneller geworden.

      Optimierungsstatistik im Journal
      Das Optimierungsprotokoll wurde erweitert: Es enthält neben anderem detaillierte Statistiken über die Nutzung des MQL5 Cloud Netzwerks, über die Aktivierung und Deaktivierung von Cloud-Agenten.

      Betrieb im Log-Modus der kompletten Optimierung
      Für einen optimalen Ressourcenverbrauch werden nicht alle Meldungen der Agenten in das Protokoll des Testers geschrieben. Um an alle Protokolleinträge zu gelangen, können Sie über das Kontextmenü des Testerprotokolls die Option "Full optimization logs" aktivieren. Bisher hat dieser Modus den Optimierungsprozess deutlich verlangsamt. Die Berechnungszeit wird nun nicht mehr beeinflusst.

      MQL5 Cloud Netzwerk
      Optimierter Betrieb der Testagenten der Cloud. Jetzt werden Berechnungsaufgaben effizienter verteilt.

    8. Der integrierte Kalender enthält Veröffentlichungen von mehr als 900 Indikatoren der 18 größten Volkswirtschaften der Welt, darunter den USA, der Europäische Union, Japan, Großbritannien und anderen. Die relevanten Daten werden aus offenen Quellen in Echtzeit erhoben. Durch die regelmäßige Überprüfung dieser Nachrichten bleiben Händler über die neuesten globalen Nachrichten informiert und können fundierte Handelsentscheidungen treffen.

      Der Wirtschaftskalender ist für Desktop-Terminals und Websites sowie für mobilen Geräten verfügbar. Die Anwendung kann über das Kontextmenü Kalender im Terminal geöffnet werden:




      Wählen Sie Ihre Plattform aus und laden Sie die Tradays-Apps herunter:


      Neben den für die Desktop-Plattform verfügbaren Kalenderfunktionen bietet die mobile Version Ereignis-Erinnerungen und den Zugriff auf eine vollständige Historie der Indikatoren in Form von Charts und Tabellen.

    9. Beim Import der Tick-Historie wurde eine automatische Generierung der benutzerdefinierten Symbolleistenhistorie hinzugefügt. Wenn sich nun die Tickdaten eines benutzerdefinierten Symbols ändern, werden die entsprechenden Balken automatisch neu berechnet:

      • So bleiben einheitliche Daten auf der Plattform erhalten.
      • Nach dem Import von Tick-Daten (sofern genügend Daten vorhanden sind) entfällt der Import von Balken, da diese vom Terminal automatisch berechnet werden.

      Die Änderungen betreffen den Import von Ticks, die über die Terminalschnittstelle durchgeführt werden, sowie das Update von Ticks, die aus MQL5-Anwendungen mit der Funktion CustomTicks* durchgeführt werden. Jede Änderung der Tickdaten führt zur Neuberechnung der entsprechenden 1-Minuten-Balken des benutzerdefinierten Symbols.

    10. Die Datenaktualisierung im Datenfenster wurde korrigiert, wenn ein Fadenkreuz auf einem losgelösten Diagramm verwendet wurde.
    11. Das Speichern des Verlaufs der Tick-Historie wurde korrigiert. In früheren Versionen konnten mehrere Ticks innerhalb einer Millisekunde in einer falschen Reihenfolge gespeichert werden.
    12. Die Generierung von Charts basierend auf einer zu kurzen Kurshistorie (weniger als einen Tag), die auf dem Server verfügbar ist, wurde korrigiert.

    MQL5

    1. Es wurde die Debuggingoption MQL5 service hinzugefügt. Diese Anwendungen können nun ähnlich wie Expert Advisor und Indikatoren getestet werden.
    2. Neue Berechnungsmethoden für Gewinn und Marge wurden zur Enumeration ENUM_SYMBOL_CALC_MODE hinzugefügt:

      • SYMBOL_CALC_MODE_EXCH_BONDS — Berechnung börsengehandelter Anleihen.
      • SYMBOL_CALC_MODE_EXCH_STOCKS_MOEX — Berechnung für Aktien der Moskauer Börse.
      • SYMBOL_CALC_MODE_EXCH_BONDS_MOEX — Berechnung für Anleihen der Moskauer Börse.

    3. Die neue Funktion TesterDeposit emuliert Kontotransaktionen während des Testens. Diese Funktion kann beim Testen von Strategien des Geldmanagements hilfreich sein.
      bool  TesterDeposit(
         double money      // Höhe der Kontogutschrift
         );
    4. Während der Ausführung der Methode OnDeinit empfängt die Anwendung MQL5 keine Ereignisse vom Terminal. Bisher konnten Anwendungen aufgrund des Empfangens anderer Ereignisse gelegentlich die Deinitialisierung nicht abschließen (z.B. alle angelegten Objekte löschen).
    5. Es wurden gelegentlich auftretende Fehler behoben, die nach einer Änderung in der Tick-Historie des benutzerdefinierten Symbols für den aktuellen Tag auftreten konnten.
    6. Es wurde eine gelegentlich auftretende Verlangsamung der Anwendung bei der Verwendung einer großen Anzahl (Zehntausende) von grafischen Objekten behoben.
    7. Behoben wurde das Einfrieren des Terminals bei häufigen Aufrufen des Trading-Verlaufs aus MQL5-Programmen.
    8. Behoben wurde ein Fehler der Funktion iBarShift. Mit dem Flag "exact=false" und der Anforderung außerhalb der Daten gab die Funktion die älteste Barnummer statt der neuesten zurück.

    Tester

    1. Die Bestimmung der Kernnummer wurde auf Computern mit Prozessoren mit mehreren NUMA-Knoten korrigiert.
    2. Hinzugefügt wurde die Möglichkeit einen Testdurchlauf und Optimierung mit einem Anfangskapital von Null durchzuführen, da jetzt Kontotransaktionen mit der neuen Funktion TesterDeposit während des Tests emuliert werden können.

    MetaEditor

    1. Der Befehl code styler kann nun der Symbolleiste für den schnellen Zugriff hinzugefügt werden.
    2. Die Umschaltung auf die Parameterdefinition und die Anzeige der zugehörigen Daten bei Verwendung von Nicht-Unicode-Zeichen in Funktions- und Variablennamen wurde korrigiert.

    Die Dokumentation wurde aktualisiert.

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

    21 Februar 2019
    MetaTrader 5 Plattform Build 2005: Wirtschaftskalender, MQL5-Programme als Dienste und eine API für die Sprache R

    Terminal

    1. Komplett überarbeiteter, integrierter Wirtschaftskalender.

      Der Wirtschaftskalender ist unsere eigene Lösung. Er bietet Ihnen über 600 Finanznachrichten und Indikatoren der 13 größten Volkswirtschaften der Welt: USA, Europäische Union, Japan, Großbritannien, Kanada, Australien, China unter andere. Die relevanten Daten werden aus offenen Quellen in Echtzeit erhoben.

      Die neue Version bietet aktualisierte Inhalte und erweiterte Ereignisfilter: nach Zeit, Priorität, Währungen und Ländern.

      Die Daten des Kalenders können jetzt aus MQL5 Programmen abgerufen werden. Bitte sehen Sie weiter unten die Details.




    2. Es gibt eine neue Art von MQL5-Anwendungen — Dienste. Dieser neue Typ ermöglicht die Erstellung von benutzerdefinierten Preisfeeds für das Terminal, d.h. die Integration von Preisen aus externen Systemen in Echtzeit, genau so wie sie auf den Handelsservern der Makler implementiert sind.

      Im Gegensatz zu Expert Advisors, Indikatoren und Skripten sind Dienste nicht an ein bestimmten Chart gebunden. Solche Anwendungen laufen im Hintergrund und werden beim Start des Terminals automatisch gestartet (es sei denn, eine solche Anwendung wurde erzwungenermaßen gestoppt).

      Dienste können von einem neuen Abschnitt im Navigatorfenster aus verwaltet werden:





      So erstellen Sie die Dienste
      Um die Vorlage eines Dienstes zu erstellen, verwenden Sie die entsprechende Option des MQL5 Assistenten. Die Dienste haben einen Einstiegspunkt Onstart, ähnlich wie Skripte. Hier können Sie eine endlose Datenempfangs- und -bearbeitungsschleife mit Netzwerkfunktionen implementieren.

      So starten Sie die Dienste
      Um mehrere Kopien von Expert Advisors oder Indikatoren mit unterschiedlichen Parametern auszuführen, müssen diese auf verschiedenen Charts gestartet werden. In diesem Fall werden verschiedene Programminstanzen erstellt, die dann unabhängig voneinander arbeiten. Die Dienste sind nicht an einen Chart gebunden, daher wurde ein spezieller Mechanismus für das Erstellen einer Instanz eines Dienstes implementiert.

      Wählen Sie einen Dienst im Navigator aus und klicken Sie in dessen Kontextmenü auf "Dienst hinzufügen". Dies öffnet einen standardmäßigen MQL5-Programmdialog, in dem Sie den Handel und den Zugriff auf Signale aktivieren/deaktivieren sowie die Parameter einstellen können.




      Die Instanz eines Dienstes kann über ein entsprechendes Menü gestartet und gestoppt werden. Um alle Instanzen zu verwalten, verwenden Sie das Menü der Dienste.

    3. Ein Lernprogramm wurde implementiert.

      Die neuen Merkmale helfen Anfängern dabei zu lernen, was man mit der Plattform alles machen kann. Wir haben über 100 interaktive Tipps zu den wichtigsten Funktionen der Plattform hinzugefügt.

      • Tipps werden nahtlos als Fortschrittsbalken auf der Symbolleiste angezeigt und lenken den Benutzer nicht ab.
      • Tipps erscheinen nur für die Aktionen, die Sie noch nie auf der Plattform durchgeführt haben.
      • Alle Tipps enthalten interaktive Links, über die Sie zu den relevanten Elementen der Schnittstelle navigieren können. So kann beispielsweise ein Handelsdialog oder ein Menü mit dem gewünschten Programm direkt vom Tipp aus gestartet werden.

      Der ausgefüllte Bereich des Fortschrittsbalkens erhöht sich, wenn Sie geeignete Aktionen durchführen und das Training fortsetzen.




    4. Die Handelskontenhistorie kann als Positionen dargestellt werden. Die Plattform sammelt Daten über die Transaktionen (Deals), die sich auf die Position beziehen (Eröffnung, Volumenzunahme, teilweises oder vollständiges Schließen) und gruppiert die Informationen in einem einzigen Datensatz. So können Sie auf Positionsdetails zugreifen: Zeit der Eröffnung und des Schließens, Volumen, Preis und Ergebnis. Diese effiziente Präsentationsform steht nun in Berichten der Historie zur Verfügung, die in Dateien exportiert werden.




    5. Hinzugefügt wurde ein neues API, das das Abrufen MetaTrader 5 Terminaldaten durch Anwendungen ermöglicht, die die Sprache R verwenden.

      Wir haben ein spezielles Paket für MetaTrader vorbereitet. Es enthält eine DLL, für die Interaktion zwischen R und dem MetaTrader 5 Terminal, inkl. Dokumentation und Hilfsdateien. Wir schließen die Paketregistrierung im CRAN Repository ab, danach wird es zum Download und zur Installation zur Verfügung stehen.




      Das Paket kann mit einem speziellen Befehl installiert werden:
      R CMD INSTALL --build MetaTrader

      Die folgenden Befehle zur Datenanforderung sind verfügbar:

      • MT5Initialize initialisiert und stellt die Verbindung mit dem MetaTrader 5 Terminal her. Bei Bedarf wird das Terminal während der Befehlsausführung gestartet.
      • MT5Shutdown deinstalliert und trennt die Verbindung vom MetaTrader 5.
      • MT5Version ruft die Terminalversion MetaTrader 5 ab.
      • MT5TerminalInfo ruft den Status und die Parameter der Terminalverbindung zum Server eines Brokers ab (Kontonummer und Serveradresse).
      • MT5WaitTerminal wartet auf das MetaTrader 5 Terminal, um sich mit dem Server eines Brokers zu verbinden.
      • MT5CopyTicksFrom(symbol, from, count, flags) kopiert die angegebene Anzahl von Ticks ab dem angegebenen Datum. Der Zeitpunkt wird in Millisekunden seit 01.01.1970 angegeben.
      • MT5CopyTicksRange(Symbol, from, to, flags) kopiert Ticks aus dem angegebenen Zeitraum. Die Zeitpunkte werden seit 01.01.1970 in Millisekunden angegeben.
      • MT5CopyRatesFrom(Symbol, timeframe, from, count) kopiert die angegebene Anzahl von Ein-Minuten-Balken ab dem angegebenen Datum. Der Zeitpunkt wird in Sekunden seit dem 01.01.1970 angegeben.
      • MT5CopyRatesFromPos(symbol, timeframe, start_pos, count) kopiert Ein-Minuten-Balken von der angegebenen Position relativ zum letzten Balken.
      • MT5CopyRatesFromRange(Symbol, timeframe, date_from, date_to) kopiert die entsprechenden Balken des angegebenen Zeitraums. Der Zeitpunkt wird in Sekunden seit dem 01.01.1970 angegeben.

      Die Liste der unterstützten Befehle wird weiter ergänzt.

    6. Optimierter Dialog Close By zum Schließen einer Position durch eine entgegengesetzte Position. Nun wird der Dialog auch bei einer großen Anzahl von offenen Positionen nicht verlangsamt.
    7. Behoben wurde ein Berechnungsfehler bei synthetischen Symbolen, aufgrund dessen Daten gelegentlich übersprungen werden konnten.
    8. Wenn ein nutzerdefiniertes Symbol gelöscht wird, werden nun auch Dateien mit der Historie der Ticks und Balken gelöscht. Dadurch wird das Aufhäufen ungenutzter Daten auf der Festplatte vermieden.
    9. Korrigiert wurde die Darstellung der Suchergebnisse auf Bildschirmen mit hoher DPI-Auflösung.

    MQL5

    1. Integrierter Zugriff auf die Daten des Wirtschaftskalenders aus MQL5-Programmen.

      Neue Funktionen

      CalendarCountryById — Anrufen der Länderbeschreibung auf Grund des Identifikators.
      bool CalendarCountryById(
         const long           country_id,    // Länder-ID
         MqlCalendarCountry&  country        // Länderbeschreibung
         );
      
      CalendarEventById — Abrufen der Ereignisbeschreibung auf Grund des Identifikators.
      bool CalendarEventById(
         const long           event_id,      // Ereignis-ID
         MqlCalendarEvent&    event          // Ereignisbeschreibung
         );
      
      CalendarValueById — Abrufen der Wertbeschreibung des Ereignisses auf Grund des Identifikators.
      bool CalendarValueById(
         const long           value_id,      // Werte-ID
         MqlCalendarValue&    value          // Wertbeschreibung
         );
      
      CalendarEventByCountry — Abrufen eines Arrays der verfügbaren Ereignisse eines Landes.
      bool CalendarEventByCountry(
         string               country_code,  // Länder-Code
         MqlCalendarEvent&    events[]       // Array der Ereignisse
         );
      
      CalendarEventByCurrency — Abrufen eines Arrays der verfügbaren Ereignisse, die eine Währung beeinflussen.
      bool CalendarEventByCurrency(
         string               currency,      // Währung
         MqlCalendarEvent&    events[]       // Array der Ereignisse
         );
      
      CalendarValueHistoryByEvent — Abrufen eines Arrays mit den Werten einer angegebenen Zeitspanne, nach dem Ereignis-Identifikator.
      bool CalendarValueHistoryByEvent(
         ulong                event_id,      // Ereignis-ID
         MqlCalendarValue&    values[],      // Array der Werte
         datetime             datetime_from, // Anfangszeitpunkt der Zeitspanne
         datetime             datetime_to=0  // Endzeitpunkt der Zeitspanne
         );
      
      CalendarValueHistory — Abrufen eines Arrays von Werten der angegebenen Zeitspanne mit allen Ereignissen, gefiltert nach Land und/oder Währung.
      bool CalendarValueHistory(
         MqlCalendarValue&    values[],          // Array der Werte
         datetime             datetime_from,     // Anfangszeitpunkt der Zeitspanne
         datetime             datetime_to=0,     // Endzeitpunkt der Zeitspanne
         string               country_code=NULL, // Länder-Code
         string               currency=NULL      // Währung
         );
      
      CalendarValueLastByEvent — Abrufen eines Array der letzten Ereigniswerte nach Identifikator. Diese Funktion ermöglicht das Abrufen der Werte, die seit der letzten Anforderung erschienen sind. Für diesen Vorgang wird zusätzlich der In/Out-Parameter "change_id" verwendet.

      Bei jeder Änderung der Kalenderdatenbank wird die Eigenschaft "change_id" (die letzte Änderungskennung) aktualisiert. Bei der Datenanfrage geben Sie "change_id" an und das Terminal gibt Ereignisse zurück, die nach dieser Zeit aufgetreten sind, sowie den aktuellen Wert "change_id", der für die nächste Anfrage verwendet werden kann. Geben Sie beim ersten Funktionsaufruf für "change_id" Null an: Die Funktion gibt keine Ereignisse zurück, sondern die aktuelle "change_id" für weitere Anfragen.
      bool CalendarValueHistory(
         ulong                event_id,          // Ereignis-ID
         ulong&               change_id,         // letzte Änderungs-ID des Kalenders
         MqlCalendarValue&    values[]           // Array der Werte
         );
      
      CalendarValueLast — Abrufen eines Arrays der letzten Werte aller Ereignisse, gefiltert nach Land und/oder Währung. Diese Funktion ermöglicht das Abrufen der Werte, die seit der letzten Anforderung erschienen sind. Ähnlich wie bei CalendarValueLastByEvent wird die Eigenschaft "change_id" für die Anforderung verwendet.
      bool CalendarValueHistory(
         ulong                event_id,          // Ereignis-ID
         ulong&               change_id,         // letzte Änderungs-ID des Kalenders
         MqlCalendarValue&    values[],          // Array der Werte
         string               country_code=NULL, // Länder-Code
         string currency=NULL                    // Währung
         );
      

      Neue Strukturen

      MqlCalendarCountry — Beschreibung der Länder.
      struct MqlCalendarCountry
        {
         ulong             id;                        // Länder-ID in ISO 3166-1
         string            name;                      // Text-Name des Landes
         string            code;                      // Code-Name des Landes in ISO 3166-1 alpha-2
         string            currency;                  // Währungscode des Landes
         string            currency_symbol;           // Symbol/Zeichen der Landeswährung
         string            url_name;                  // Ländername, der in der URL von mql5.com verwendet wird
        };
      
      MqlCalendarEvent — Ereignisbeschreibung
      struct MqlCalendarEvent
        {
         ulong                          id;           // Ereignis-ID
         ENUM_CALENDAR_EVENT_TYPE       type;         // Ereignis-Typ
         ENUM_CALENDAR_EVENT_SECTOR     sector;       // Sektor, zu dem das Ereignis gehört
         ENUM_CALENDAR_EVENT_FREQUENCY  frequency;    // Häufigkeit der Ereignisveröffentlichung
         ENUM_CALENDAR_EVENT_TIMEMODE   time_mode;    // Zeitmodus der Ereignisveröffentlichung
         ulong                          country_id;   // Länder-ID
         ENUM_CALENDAR_EVENT_UNIT       unit;         // Einheit der Ereigniswerte
         ENUM_CALENDAR_EVENT_IMPORTANCE importance;   // Wichtigkeit des Ereignisses
         ENUM_CALENDAR_EVENT_MULTIPLIER multiplier;   // Multiplikator der Wichtigkeit des Ereignisses
         uint                           digits;       // Dezimalstellen des Ereigniswertes
         string                         source_url;   // URL der Quelle
         string                         event_code;   // Ereignis-Code
         string                         name;         // Text-Name des Ereignisses in der Sprache des Terminals
        };
      
      MqlCalendarValue — Wertbeschreibung des Ereignisses.
      struct MqlCalendarValue
        {
         ulong             id;                        // Werte-ID
         ulong             event_id;                  // Ereignis-ID
         datetime          time;                      // Datum und Zeit des Ereignisses
         datetime          period;                    // Zeitperiode, für den das Ereignis veröffentlicht wird
         int               revision;                  // Revision des veröffentlichten Indikators in Relation zur Berichtsperiode
         long              actual_value;              // aktueller Ereigniswert
         long              prev_value;                // vorheriger Ereigniswert
         long              revised_prev_value;        // revidierter, vorheriger Ereigniswert
         long              forecast_value;            // prognostizierter Ereigniswert
         ENUM_CALENDAR_EVENT_IMPACRT impact_type;     // mögliche Auswirkung auf den Währungskurs
        };
      

      Neue Enumerationen

      enum ENUM_CALENDAR_EVENT_FREQUENCY
        {
         CALENDAR_FREQUENCY_NONE            =0,   // nicht bekannt
         CALENDAR_FREQUENCY_WEEK            =1,   // wöchentlich
         CALENDAR_FREQUENCY_MONTH           =2,   // monatlich
         CALENDAR_FREQUENCY_QUARTER         =3,   // vierteljährlich
         CALENDAR_FREQUENCY_YEAR            =4,   // jährlich
         CALENDAR_FREQUENCY_DAY             =5,   // täglich
        };
      
      enum ENUM_CALENDAR_EVENT_TYPE
        {
         CALENDAR_TYPE_EVENT                =0,   // Ereignis (Sitzung, Rede etc.)
         CALENDAR_TYPE_INDICATOR            =1,   // Indikator
         CALENDAR_TYPE_HOLIDAY              =2,   // Feiertag
        };
      
      enum ENUM_CALENDAR_EVENT_SECTOR
        {
         CALENDAR_SECTOR_NONE               =0,   // kein Sektor bestimmt
         CALENDAR_SECTOR_MARKET             =1,   // Markt
         CALENDAR_SECTOR_GDP                =2,   // BIP
         CALENDAR_SECTOR_JOBS               =3,   // Arbeitsstellen
         CALENDAR_SECTOR_PRICES             =4,   // Preise
         CALENDAR_SECTOR_MONEY              =5,   // Geld
         CALENDAR_SECTOR_TRADE              =6,   // Handel
         CALENDAR_SECTOR_GOVERNMENT         =7,   // Regierung
         CALENDAR_SECTOR_BUSINESS           =8,   // Geschäft
         CALENDAR_SECTOR_CONSUMER           =9,   // Verbraucher
         CALENDAR_SECTOR_HOUSING            =10,  // Wohnen
         CALENDAR_SECTOR_TAXES              =11,  // Steuern
         CALENDAR_SECTOR_HOLIDAYS           =12,  // Feiertage
        };
        
      enum ENUM_CALENDAR_EVENT_IMPORTANCE
        {
         CALENDAR_IMPORTANCE_NONE           =0,   // nicht bestimmt
         CALENDAR_IMPORTANCE_LOW            =1,   // niedrig
         CALENDAR_IMPORTANCE_MODERATE       =2,   // mittel
         CALENDAR_IMPORTANCE_HIGH           =3,   // hoch
        };
      
      enum ENUM_CALENDAR_EVENT_UNIT
        {
         CALENDAR_UNIT_NONE                 =0,   // ohne Einheit
         CALENDAR_UNIT_PERCENT              =1,   // Prozent
         CALENDAR_UNIT_CURRENCY             =2,   // Landeswährung
         CALENDAR_UNIT_HOUR                 =3,   // Anzahl der Stunden
         CALENDAR_UNIT_JOB                  =4,   // Anzahl der Arbeitsstellen
         CALENDAR_UNIT_RIG                  =5,   // Anzahl der Förderanlagen
         CALENDAR_UNIT_USD                  =6,   // US-Dollar
         CALENDAR_UNIT_PEOPLE               =7,   // Anzahl der Leute
         CALENDAR_UNIT_MORTGAGE             =8,   // Anzahl der Hypotheken
         CALENDAR_UNIT_VOTE                 =9,   // Anzahl der Stimmen
         CALENDAR_UNIT_BARREL               =10,  // Anzahl der Barrels
         CALENDAR_UNIT_CUBICFEET            =11,  // Volumen in Kubikfuß
         CALENDAR_UNIT_POSITION             =12,  // Anzahl der Arbeitsstellen
         CALENDAR_UNIT_BUILDING             =13   // Anzahl der Gebäude
        };
        
      enum ENUM_CALENDAR_EVENT_MULTIPLIER
        {
         CALENDAR_MULTIPLIER_NONE           =0,   // kein Multiplikator
         CALENDAR_MULTIPLIER_THOUSANDS      =1,   // Tausend
         CALENDAR_MULTIPLIER_MILLIONS       =2,   // Million
         CALENDAR_MULTIPLIER_BILLIONS       =3,   // Milliarde
         CALENDAR_MULTIPLIER_TRILLIONS      =4,   // Billion
        };
        
      enum ENUM_CALENDAR_EVENT_IMPACRT
        {
         CALENDAR_IMPACT_NA                 =0,   // nicht vorhanden
         CALENDAR_IMPACT_POSITIVE           =1,   // positive
         CALENDAR_IMPACT_NEGATIVE           =2,   // negative
        };
      
      enum ENUM_CALENDAR_EVENT_TIMEMODE
        {
         CALENDAR_TIMEMODE_DATETIME         =0,   // die exakte Veröffentlichungszeit der Quelle
         CALENDAR_TIMEMODE_DATE             =1,   // Das Ereignis dauert den ganzen Tag
         CALENDAR_TIMEMODE_NOTIME           =2,   // die Quelle veröffentlicht keinen Ereigniszeitpunkt
         CALENDAR_TIMEMODE_TENTATIVE        =3,   // die Quelle veröffentlicht nur das Datum und keinen genauen Zeitpunkt der Veröffentlichung
        };
      

      Neue Fehlernummern

      ERR_CALENDAR_MORE_DATA             =5400,   // das Array ist für alle Ergebnisse zu klein (Werte, die hineinpassen, werden zurückgegeben)
      ERR_CALENDAR_TIMEOUT               =5401,   // Timeout für das Warten auf die Antwort der Kalenderdaten
      ERR_CALENDAR_NO_DATA               =5402,   // Daten nicht gefunden
      

    2. Korrekturen und Verbesserungen der Betriebsgeschwindigkeit in Bezug auf die Historie von Ticks und Balken.
    3. Korrekturen und signifikante Verbesserungen der Betriebsgeschwindigkeit im Zusammenhang mit Funktionen zur Änderung der Historie von Ticks und Balken von nutzerdefinierten Handelssymbolen, CustomTicks* und CustomRates*.
    4. Neue Funktionen zur Datenkonvertierung.

      CharArrayToStruct weist einen Array vom Typ uchar einer POD-Struktur zu.
      bool  CharArrayToStruct(
         void&         struct_object,    // Struktur
         const uchar&  char_array[],     // Array
         uint          start_pos=0       // Startposition im Array
         );
      
      StructToCharArray weist einer POD-Struktur einem Array vom Typ uchar zu.
      bool  StructToCharArray(
         const void&  struct_object,     // Struktur
         uchar&       char_array[],      // Array
         uint         start_pos=0        // Startposition im Array
         );
      

    5. Hinzugefügt wurde die Funktion MathSwap, mit der Reihung der Bytes von ushort, uint und ulong zu ändern.
      ushort MathSwap(ushort value);
      uint   MathSwap(uint   value);
      ulong  MathSwap(ulong  value);
      

    6. Hinzugefügt wurden Netzwerkfunktionen, um TCP-Verbindungen zu entfernten Hosts über System-Sockets herzustellen:

      • SocketCreate erstellt einen Socket mit angegebenen Flags und gibt dessen Handle zurück.
      • SocketClose schließt den Socket.
      • SocketConnect verbindet sich mit dem Server, inkl. einer Timeout-Steuerung.
      • SocketIsConnected prüft, ob der Socket aktuell verbunden ist.
      • SocketIsReadable ermittelt die Anzahl der Bytes, die aus dem Socket gelesen werden können.
      • SocketIsWritable prüft, ob das Schreiben von Daten auf diesen Socket zum aktuellen Zeitpunkt möglich ist.
      • SocketTimeouts setzt die Zeit eines Timeouts für den Empfang und das Senden von Daten für das Objekt eines System-Sockets.
      • SocketRead liest Daten von einem Socket.
      • SocketSend schreibt Daten in einen Socket.
      • SocketTlsHandshake initiiert eine sichere TLS (SSL) Verbindung mit dem angegebenen Host über das TLS-Handshake Protokoll.
      • SocketTlsCertificate erhält Informationen über das Zertifikat, das für die sichere Netzwerkverbindung verwendet wird.
      • SocketTlsRead liest Daten von einer sicheren TLS-Verbindung.
      • SocketTlsReadAvailable liest alle verfügbaren Daten von einer sicheren TLS-Verbindung.
      • SocketTlsSend sendet Daten über eine sichere TLS-Verbindung.

      Die Adresse des Hosts, zu dem die Verbindung über Netzwerkfunktionen hergestellt wird, muss in den Terminaleinstellungen explizit zur Liste der zulässigen Adressen hinzugefügt werden.

      Neue Fehlernummern wurden für die Arbeit mit den Netzwerkfunktionen hinzugefügt:

      • ERR_NETSOCKET_INVALIDHANDLE (5270): Ungültiges Socket-Handle an die Funktion übergeben.
      • ERR_NETSOCKET_TOO_MANY_OPENED (5271): Zu viele Sockets sind offen (maximal 128)
      • ERR_NETSOCKET_CANNOT_CONNECT (5272): Fehler bei der Verbindung zum entfernten Host
      • ERR_NETSOCKET_IO_ERROR (5273): Fehler beim Senden/Empfangen der Daten vom Socket
      • ERR_NETSOCKET_HANDSHAKE_FAILED (5274): Fehler beim sicheren Verbindungsaufbau (TLS-Handshake)
      • ERR_NETSOCKET_NO_CERTIFICATE (5275) — keine Daten über das Zertifikat für die sichere Verbindung

    7. Hinzugefügt wurden neue Funktionen für Zeichenkettenoperationen:

      StringReserve kehrt den Speicherpuffer der angegebenen Größe einer Zeichenkette um.
      bool  StringReserve(
         string&        string_var,          // Zeichenkette
         uint           new_capacity         // Puffergröße für die Zeichenkette
         );
      
      StringSetLength legt die Anzahl der Buchstaben einer Zeichenkette fest.
      bool  StringSetLength(
         string&        string_var,          // Zeichenkette
         uint           new_length           // neue Länge der Zeichenkette
         );
      

    8. Hinzugefügt wurden neue Funktionen für Arrays:

      ArrayRemove entfernt die angegebene Anzahl der Elemente aus dem Array ab dem angegebenen Index.
      bool  ArrayRemove(
         void&         array[],              // Array irgendeines Typs
         uint          start,                // Startindex für das Entfernen
         uint          count=WHOLE_ARRAY     // Anzahl der Elemente
         );
      
      ArrayInsert fügt in das Empfängerarray ab dem angegebenen Index eine bestimmte Anzahl von Elementen aus einem Quellarray ein.
      bool  ArrayInsert(
         void&         dst_array[],          // Zielarray
         const void&   src_array[],          // Quellarray
         uint          dst_start,            // Index des Zielarrays, ab dem eingefügt werden soll
         uint          src_start=0,          // Index im Quellarray, ab dem aus dem Quellarray kopiert werden soll
         uint          count=WHOLE_ARRAY     // Anzahl der einzufügenden Elemente
         );
      
      ArrayReverse kehrt in einem Array eine angegebene Anzahl von Elemente ab dem angegebenen Index um.
      bool  ArrayReverse(
         void&         array[],              // Array irgendeines Typs
         uint          start=0,              // Startindex der Umkehrung
         uint          count=WHOLE_ARRAY     // Anzahl der Elemente
         );
      

    9. Den Funktionen CustomRatesUpdate, CustomRatesReplace, CustomTicksAdd und CustomTicksReplace wurde der neue Parameter "uint count" hinzugefügt. Er ermöglicht die Angabe der Anzahl der Elemente des übergebenen Arrays, die von der Funktion verwendet werden sollen. Der Wert WHOLE_ARRAY wird standardmäßig für den Parameter verwendet. Das bedeutet, dass das gesamte Array verwendet wird.
    10. Hinzugefügt wurde die Funktion CustomBookAdd, um den Status der Markttiefe für ein benutzerdefiniertes Symbol zu übergeben. Die Funktion erlaubt die Übertragung der Markttiefe als ob die Preise vom Server des Brokers kommen.
      int  CustomBookAdd(
         const string        symbol,            // Symbolname
         const MqlBookInfo&  books[]            // Array der Beschreibungen der Elemente der Markttiefe (DOM)
         uint                count=WHOLE_ARRAY  // Anzahl der zu verwendenden Elemente
         );
      
    11. Hinzugefügt wurde Überladungen der Funktion CustomSymbolCreate. Dies ermöglicht das Erstellen eines benutzerdefinierten Handelssymbols, das auf einem bestehenden Symbol basiert. Nach dem Erstellen kann jede Symboleigenschaft mit entsprechenden Funktionen bearbeitet werden.
      bool  CustomSymbolCreate(
         const string        symbol_name,       // Name des nutzerdefiniertes Symbol
         const string        symbol_path="",    // Name der Gruppe, in der das Symbol erzeugt wird
         const string        symbol_origin=NULL // Symbolname, auf dessen Basis das nutzerdefinierte Symbole erstellt wird
         );
      
      Der Name des Symbols, dessen Eigenschaften für das nutzerdefinierte Symbol kopiert werden sollen, wird im Parameter "symbol_origin" angegeben.

    12. Die Funktion StringToTime, die die Zeichenkette mit Datum/Uhrzeit in einen Datumszeitwert umwandelt, wurde aktualisiert. Jetzt unterstützt sie folgenden Datumsformate:

      • yyyy.mm.dd [hh:mi]
      • yyyy.mm.dd [hh:mi:ss]
      • yyyymmdd [hh:mi:ss]
      • yyyymmdd [hhmiss]
      • yyyy/mm/dd [hh:mi:ss]
      • yyyy-mm-dd [hh:mi:ss]

    13. Neue Eigenschaften der TERMINAL_VPS in der Enumeration ENUM_TERMINAL_INFO_INTEGER; sie zeigt, dass das Terminal auf dem Server MetaTrader Virtual Hosting (MetaTrader VPS) läuft. Wenn eine Anwendung auf einem Hosting-Server läuft, können Sie alle ihre visuellen Funktionen deaktivieren, da der virtuelle Server keine grafische Benutzeroberfläche hat.
    14. Die neuen Eigenschafte SYMBOL_EXIST in der Enumeration ENUM_SYMBOL_INFO_INTEGER bedeutet, dass das Symbol mit diesem Namen gibt.
    15. Die Typisierung bei der Verwendung von vorab-deklarierten Template-Funktionen wurde korrigiert.
    16. Hinzugefügt wurde einer Neu-Initialisierung der Indikatoren beim Wechsel des Handelskontos.
    17. Optimierte StringSplit.
    18. Fehler in der Standardbibliothek behoben.

    Tester

    1. Hinzugefügt wurde die Funktion TesterStop — routinemäßige frühzeitiges Beenden eines Expert Advisors auf einen Testagenten. Jetzt können Sie ein Testende erzwingen, nachdem eine angegebene Anzahl von Verlustpositionen, ein vorgegebener Drawdownwert oder anderes Kriterien erreicht wurde.

      Die mit dieser Funktion beendete Tests gelten als erfolgreich. Nach dem Funktionsaufruf wird die während des Tests erhaltene Handelshistorie und alle Handelsstatistiken an das Terminal übergeben.

    2. Deaktivierte wurde die Möglichkeit, Expert Advisors in der MQL5 Cloud Network im Modus anhand realer Ticks zu testen und zu optimieren. Dieser Modus kann nur von lokalen Agenten und lokalen Netzwerkfarmen verwendet werden.
    3. Verbesserte Arbeit mit Indikatoren bei der visuellen Prüfung. Jetzt werden Preisdiagramm und Indikatorlinien synchron gezeichnet, auch bei maximaler Visualisierungsgeschwindigkeit.
    4. Optimiertes und deutlich beschleunigtes Testen und Optimieren.
    5. Das Debugging von Indikatoren mit historischen Daten wurde korrigiert. Nun können die Funktionen OnInit und OnDeinit eines Indikators korrekt debuggt werden.
    6. Schnellerer Zugriff auf historische Daten beim Testen von Expert Advisors mit verschiedenen Währungen.
    7. Behoben wurde ein gelegentliches Einfrieren des visuellen Testers während des Debuggens mit historischen Daten.
    8. Schnellerer Start der Optimierungsläufe bei der Bearbeitung eines Aufgabenpakets durch einen Agenten.
    9. Die Richtlinie zur Verteilung von Aufgabenpaketen an die Testagenten wurde geändert. Die Paketgröße wurde erhöht und damit die Belastung des Netzwerkes deutlich reduziert.
    10. Das Verhalten der Optionen, die die Verwendung von lokalen, Netzwerk- und Cloud-Agenten ermöglichen, wurde geändert. Wenn Sie nun die Optionen ausschalten, wird die Bearbeitung der erhaltenen Aufgaben normal beendet, aber neuen Aufgaben werden nicht mehr erteilt. In früheren Versionen war das Verhalten ähnlich dem Befehl "Disable", der den Agentenbetrieb sofort beendete.




    MetaEditor

    1. Hinzugefügt wurde die Unterstützung von Nicht-ANSI-Zeichen im Debugger. Jetzt werden die Ausdrücke korrekt angezeigt, auch wenn der Variablenname in Kyrillisch angegeben ist.
    2. Korrigiert wurde die Anzeige der Suchergebnisse auf Bildschirmen mit hoher DPI-Auflösung.

    Die Übersetzung der Benutzeroberfläche ins Kroatische wurde hinzugefügt.

    Die Dokumentation wurde aktualisiert.

    26 Oktober 2018
    Neue MetaTrader 5 Plattform build 1930: Schwebende Chartfenster und .Net Bibliotheken in MQL5

    Terminal

    1. Jetzt können Sie die Charts der Finanzsymbole vom Fenster des Handelsterminals ablösen.

      Diese Funktion ist praktisch, wenn Sie mehrere Monitore verwenden. Jetzt können Sie das Hauptfenster der Plattform auf einem Monitor einstellen, um Ihren Kontostand zu kontrollieren, und Ihre Charts auf den zweiten Bildschirm verschieben, um die Marktsituation zu beobachten. Um ein Diagramm vom Terminal zu lösen, deaktivieren Sie die Option Docked in dessen Kontextmenü. Verschieben Sie anschließend das Diagramm auf den gewünschten Monitor.





      Eine separate Symbolleiste auf abgelösten Charts ermöglicht die Anwendung von analytischen Objekten und Indikatoren, ohne zwischen den Monitoren wechseln zu müssen. Verwenden Sie das Kontextmenü der Symbolleiste, um den Satz der verfügbaren Befehle zu managen oder auszublenden.

    2. Aktualisiert vollständig die integrierte Chats. Jetzt werden Gruppendialoge und Kanäle unterstützt. Führen Sie private Gespräche mit einer Gruppe von Personen in einer einheitlichen Umgebung, ohne zwischen verschiedenen Dialogen zu wechseln, und erstellen Sie Kanäle nach Ihren Interessen und Sprachen. Kommunizieren Sie mit Kollegen und Freunden der MQL5.community, ohne die Website zu besuchen.

      Gruppen-Chats und Kanäle können öffentlich oder privat sein. Derjenige, der sie erstellt entscheidet, ob es möglich ist, sich ihnen frei oder nur auf Einladung anzuschließen. Sie können Moderatoren auch Kanälen und Chats für zusätzliche Kommunikationskontrolle zuordnen.




    3. Ergänzt wurde die Unterstützung einer erhöhten Volumengenauigkeit beim Handel mit Kryptowährungen. Nun ist das Mindestvolumen der Handelsgeschäfte 0,000000000001 Lots. Die Markttiefe, die Zeit und der Umsatz sowie andere Oberflächenelemente bieten nun die Möglichkeit, Volumina mit einer Genauigkeit von 8 Dezimalstellen darzustellen.

      Das Mindestvolumen und dessen Änderungsstufen hängen von den Einstellungen des Finanzinstrumentes ab, die vom Broker festgelegt werden.




    4. Hinzugefügt wurde eine Registerkarte der veröffentlichten Artikel der MQL5.community zum Fenster Werkzeuge. Über 600 detailliertes Materialien über die Entwicklung von Handelsstrategien in MQL5 sind nun erreichbar ohne das Terminal verlassen zu müssen. Neue Artikel werden jede Woche veröffentlicht.




    5. Hinzugefügt wurde die Unterstützung einer erweiterten Authentifizierung mittels Zertifikat bei einem Betrieb auf Linux/Wine.
    6. Korrigiert wurde die Darstellung der Markttiefe, wenn sie auf eine Ebene begrenzt ist.
    7. Hinzugefügt wurde der Befehl "Sichern als Bild" zur Standard-Symbolleiste. Jetzt ist es viel einfacher, Charts zu fotografieren und in der Community zu teilen.




    8. Korrigiert wurde die Zeitverschiebung beim Importieren von Bars und Ticks. Bisher wurde die Verschiebung in einigen Fällen nicht angewendet.




    9. Korrigiert wurde das Einfrieren des Terminals im Falle einer großen Anzahl an Nachrichten im Wirtschaftskalender.

    MQL5

    1. Hinzugefügt wurde die direkte Unterstützung für .NET-Bibliotheken mit "Smart"-Funktionen-Import. Jetzt können .NET-Bibliotheken verwendet werden, ohne spezielle Wrapper zu schreiben - der MetaEditor macht es jetzt selbst.

      Um mit .NET-Bibliotheksfunktionen zu arbeiten, importieren Sie einfach die DLL selbst, ohne bestimmte Funktionen zu definieren. MetaEditor importiert automatisch alle Funktionen, mit denen man arbeiten kann:
      • Einfache Strukturen (einfache, alte Daten oder POD, plain old data) — Strukturen, die nur einfache Datentypen beinhalten.
      • 'Public static' Funktionen mit Parametern, bei denen nur einfache Typen und POD-Strukturen oder deren Arrays verwendet werden.

      Um Funktionen aus der Bibliothek aufzurufen, importieren Sie sie einfach:
      #import "TestLib.dll"
      
      //+------------------------------------------------------------------+
      //| Startfunktion eines Skripts                                      |
      //+------------------------------------------------------------------+
      void OnStart()
        {
         int x=41;
         TestClass::Inc(x);
         Print(x);
        }
      Der C#-Code der Funktion Inc() aus TestClass schaut wie folgt aus:
      public class TestClass
      {
         public static void Inc(ref int x)
         {
          x++;
         }
      }
      Als Ergebnis der Ausführung gibt das Skript den Wert 42 zurück.

      Die Arbeit an der Unterstützung der .NET Bibliotheken wird fortgesetzt. Deren Möglichkeiten werden in der Zukunft erweitert werden.

    2. Ergänzt wurde die Unterstützung der Funktionen der Standardbibliothek WinAPI. Jetzt muss nicht die Bibliothek nicht mehr manuell importiert werden und, für eine Verwendung der Funktionen des Betriebssystems, die Funktionssignatur im MQL5-Programm angeführt werden. Man muss einfach nur die Headerdatei aus dem Verzeichnis MQL5\Include\WinAPI einbinden.

      Die Funktionen sind in einzelnen Dateien entsprechend ihrer Verwendung gruppiert:

      • libloaderapi.mqh — Arbeit mit Ressourcen
      • memoryapi.mqh — Arbeit mit Speicher
      • processenv.mqh — Arbeit mit dem Arbeitsumfeld
      • processthreadsapi.mqh — Arbeit mit Prozessen
      • securitybaseapi.mqh — Arbeit mit dem Sicherheitssystem
      • sysinfoapi.mqh — Abfrage von Systeminformationen
      • winbase.mqh — Allgemeine Funktionen
      • windef.mqh — Konstante, Strukturen und Enumerationen
      • wingdi.mqh — Arbeit mit Grafikobjekten
      • winnt.mqh — Arbeit mit Sonderfällen (exceptions)
      • winreg.mqh — Arbeit mit der Registry
      • winuser.mqh — Arbeit mit Windows und der Schnittstelle
      • errhandlingapi.mqh — Fehlerbehandlung
      • fileapi.mqh — Arbeit mit Dateien
      • handleapi.mqh — Arbeit mit Handles
      • winapi.mqh — Einbinden aller Funktionen (WinAPI Headerdatei)

      Das Einbinden funktioniert nur auf einer 64-Bit-Architektur.

    3. Hinzugefügt wurde die Unterstützung der Spezifizierer inline, __inline und __forceinline beim Parsen von Code. Die Anwesenheit der Spezifizierer im Code verursacht keine Fehler und hat keinen Einfluss auf die Kompilierung. Im Moment vereinfacht diese Funktion die Übertragung von С++ Code nach MQL5.
      Weitere Informationen über Spezifizierer finden Sie unter MSDN.

    4. Deutlich optimierte Ausführung von MQL5-Programmen. In einigen Fällen kann die Leistungssteigerung 10% erreichen. Kompilieren Sie Ihre Programme mit der neuen MetaEditor-Version erneut, damit laufen sie schneller.
      Leider werden neue Programme aufgrund dieser zusätzlichen Optimierung nicht mit früheren Terminalversionen kompatibel sein. Programme, die in MetaEditor Version 1910 und später kompiliert wurden, können in Terminalversionen unter 1880 nicht gestartet werden. Programme, die in früheren MetaEditor-Versionen kompiliert wurden, können auf neuen Terminals ausgeführt werden.

    5. Signifikant optimierte multiple MQL5-Funktionen.
    6. Hinzugefügt wurden neue Eigenschaften zum Anheften/Ablösen der Charts vom Hauptfenster des Terminals und der Kontrolle von deren Position.

      Hinzugefügt wurden folgende Eigenschaften der Enumeration ENUM_CHART_PROPERTY_INTEGER:

      • CHART_IS_DOCKED - das Chartfenster ist angeheftet. Ist dessen Wert 'false', dann kann der Chart aus dem Terminalbereich abgelöst werden.
      • CHART_FLOAT_LEFT — die linke Koordinate des abgelösten Chartfensters, relativ zum virtuellen Bildschirm.
      • CHART_FLOAT_TOP — die obere Koordinate des abgelösten Chartfensters, relativ zum virtuellen Bildschirm.
      • CHART_FLOAT_RIGHT — die rechte Koordinate des abgelösten Chartfensters, relativ zum virtuellen Bildschirm.
      • CHART_FLOAT_BOTTOM — die untere Koordinate des abgelösten Chartfensters, relativ zum virtuellen Bildschirm.

      Hinzugefügt wurden folgende Funktionen zur Enumeration ENUM_TERMINAL_INFO_INTEGER:

      • TERMINAL_SCREEN_LEFT — die linke Koordinate des virtuellen Bildschirms. Ein virtueller Bildschirm ist ein Rechteck, der alle Monitore umfasst. Wenn ein System zwei Monitore hat, aufgereiht von rechts nach links, befindet sich die linke Koordinate des virtuellen Bildschirms möglicherweise an der Grenze der beiden Monitore.
      • TERMINAL_SCREEN_TOP — die obere Koordinate des virtuellen Bildschirms.
      • TERMINAL_SCREEN_WIDTH — Breite des Terminals.
      • TERMINAL_SCREEN_HEIGHT — Höhe des Terminals.
      • TERMINAL_LEFT — die linke Koordinate des Terminals relativ zum virtuellen Bildschirm.
      • TERMINAL_TOP — die obere Koordinate des Terminals relativ zum virtuellen Bildschirm.
      • TERMINAL_RIGHT — die rechte Koordinate des Terminals relativ zum virtuellen Bildschirm.
      • TERMINAL_BOTTOM — die untere Koordinate des Terminals relativ zum virtuellen Bildschirm.

    7. Hinzugefügt wurde das Feld 'volume_real' zu den Strukturen MqlTick und MqlBookInfo. Damit kann man jetzt mit einer erhöhten Genauigkeit des Volumens arbeiten. Der Wert von 'volume_real' hat eine höhere Priorität als 'volume'. Der Server wird diesen Wert verwenden, wenn angegeben.

      struct MqlTick
        {
         datetime         time;          // Aktualisierungszeit des letzten Preises
         double           bid;           // Aktueller Bid-Preis
         double           ask;           // Aktueller Ask-Preis
         double           last;          // Aktueller Preis der letzten Transaktion (Last)
         ulong            volume;        // Volumen des letzten aktuellen Preises
         long             time_msc;      // Letzte Preisaktualisierung in Millisekunden
         uint             flags;         // Tick-Flags
         double           volume_real;   // Volumen des aktuelle Preises (Last) mit höherer Genauigkeit
        };

      struct MqlBookInfo
        {
         ENUM_BOOK_TYPE   type;            // Order-Typ der Enumeration ENUM_BOOK_TYPE
         double           price;           // Preis
         long             volume;          // Volumen
         double           volume_real;     // Volumen mit höherer Genauigkeit
        };

    8. Hinzugefügt wurden neue Eigenschaften zur Enumeration ENUM_SYMBOL_INFO_DOUBLE:

      • SYMBOL_VOLUME_REAL — Volumen der letzten abgeschlossenen Transaktion;
      • SYMBOL_VOLUMEHIGH_REAL — der maximale Wert des Transaktionsvolumens des aktuellen Tags;
      • SYMBOL_VOLUMELOW_REAL — der minimale Wert des Transaktionsvolumens des aktuellen Tags.

      Verwenden Sie die Funktion SymbolInfoDouble zur Abfrage dieser Eigenschaften.

    9. Hinzugefügt wurde die Eigenschaft MQL_FORWARD zur Enumeration ENUM_MQL_INFO_INTEGER — Flag für das Programm im Vorwärtstest.
    10. Hinzugefügt wurde die Eigenschaft pack( integer_value ) für Strukturen. Das ermöglicht die Angleichung der Felder innerhalb einer Struktur einzurichten, was bei der Arbeit mit einer DLL erforderlich sein kann. Die Werte 1, 2 ,4 ,8 und 16 sind für integer_value
      möglich. Wenn die Eigenschaft nicht definiert ist, wird die Standardausrichtung von 1 Byte verwendet - pack(1).
      .
      Verwendungsbeispiel:
      //+------------------------------------------------------------------+
      //| Standard-Packing                                                 |
      //+------------------------------------------------------------------+
      struct A
        {
         char              a;
         int               b;
        };
      //+------------------------------------------------------------------+
      //| besonderes Packing                                               |
      //+------------------------------------------------------------------+
      struct B pack(4)
        {
         char              a;
         int               b;
        };
      //+------------------------------------------------------------------+
      //| Startfunktion eines Skripts                                      |
      //+------------------------------------------------------------------+
      void OnStart()
        {
         Print("sizeof(A)=",sizeof(A));
         Print("sizeof(B)=",sizeof(B));
        }
      //+------------------------------------------------------------------+
      Ergebnis:
      sizeof(A)=5
      sizeof(B)=8
      Weiter Informationen über die Angleichung innerhalb von Strukturen in MSDN.

    11. Entspanntere Bedingungen für die Auswertung von Enumerationen. Bei einer impliziten Umwandlung ersetzt der Compiler automatisch den Wert der korrekten Enumeration und zeigt eine Warnung an.

      Für folgenden Code:
      enum Main
        {
         PRICE_CLOSE_,
         PRICE_OPEN_
        };
      
      input Main Inp=PRICE_CLOSE;
      //+------------------------------------------------------------------+
      //| Start function                                                   |
      //+------------------------------------------------------------------+
      void OnStart()
        {
        }
      zeigt der Compiler eine Warnung:
      implicit conversion from 'enum ENUM_APPLIED_PRICE' to 'enum Main'
      'Main::PRICE_OPEN_' instead of 'ENUM_APPLIED_PRICE::PRICE_CLOSE' will be used
      Zuvor wurde in diesem Fall der folgende Fehler erzeugt:
      'PRICE_CLOSE' - cannot convert enum
      Der Compiler zeigt den Fehler nur noch an, wenn Enumerationen in den Funktionsparametern falsch verwendet werden.

    12. Die Kompilierung von Template-Funktionen wurde korrigiert. Bei der Verwendung überladener Template-Funktionen wird nun nur noch die notwendige Überladung und nicht mehr alle vorhandenen instanziiert.
      class X {  };
      
      void f(int)  {  }
        
      template<typename T>
      void a(T*) { new T(2); }  // vorher hat der Compiler hier einen Fehler ausgeworfen
        
      template<typename T>
      void a()  { f(0); }
        
        
      void OnInit()  { a<X>(); }  

    13. Optimiert wurde in einigen Fällen der Zugriff auf die Tick-Historie mit den Funktionen CopyTicks*.
    14. Hinzugefügt wurde die neue Funktion TesterStop, die eine vorzeitige Beendigung der Durchläufe von Tests/Optimierungen erlaubt. Wird sie aufgerufen, wird die gesamte Handelsstatistik und die Ergebnisse von OnTester an das Handelsterminal übergeben, genau so, als wenn der Test/Optimierung ganz normal beendet worden wäre.
    15. Hinzugefügt wurde die neue Eigenschaft für nutzerdefinierte Indikatoren #property tester_everytick_calculate. Sie wird im Strategietester verwendet und erlaubt es, die Indikatorberechnung mit jedem Tick zu erzwingen.

    Tester

    1. Jetzt, im Falle von nicht-visuellen Tests/Optimierungen, werden alle verwendeten Indikatoren (standardmäßige und nutzerdefinierte) nur während der Datenabfrage berechnet. Ausgenommen sind Indikatoren, die die Funktionsaufrufe EventChartCustom verwendet und eine Ereignisbehandlung durch OnTimer beinhaltet. Zuvor wurden alle Indikatoren bedingungslos im Strategietester bei jedem neuen Tick berechnet (auch von einigen anderen Instrumenten). Die neuen Eigenschaften beschleunigen deutlich die Tests und die Optimierungen.

      Um die mit jedem Tick erzwungene Indikatorberechnung zu aktivieren, fügen Sie Ihrem Programm #property tester_everytick_calculate hinzu.
      Indikatoren, die mit früheren Compilers kompiliert wurden werden wie bisher berechnet — bei jedem Tick.

    2. Korrigiert wurde die Berechnung der Genauigkeit der Kontowährung beim Testen/Optimieren und Erstellen relevanter Berichte.
    3. Optimiert und Beschleunigt wurde der Arbeitsweise des Strategietesters.
    4. Korrigiert wurden einige Fehler beim Testen und Optimieren.

    MetaEditor

    1. Korrigiert wurde die Suche nach ganzen Wörtern. Bei der Suche wird nun der Unterstrich als normales Zeichen und nicht mehr als Worttrennzeichen gezählt.

    Aktualisierte Dokumentation.

    6 Juli 2018
    MetaTrader 5 Build 1880: Berechnung der kompletten Historie synthetischer Finanzinstrumente

    Terminal

    1. Es wurde die Berechnung der Preis-Historie synthetischer Finanzinstrumente für die ganze verfügbare Datentiefe hinzugefügt.

      Für synthetische Finanzinstrumente berechnet die Plattform die Historie von Minutenbalken basierend auf Minutenbalken der Symbole in der Formel. Früher wurde die Historie nur für die letzten zwei Monate berechnet. Eine tiefere Historie konnte nur auf eine explizite Anfrage erstellt werden (Chart nach links scrollen oder Copy-Funktionen aufrufen). Jetzt wird die Historie basierend auf allen verfügbaren Daten bedingungslos berechnet.




      Die Preis-Historie jedes Finanzinstruments in der Formel kann unterschiedlich tief sein. Aus diesem Grund wird für den kürzesten verfügbaren Zeitraum berechnet. In der Formel werden zum Beispiel drei Finanzinstrumente verwendet:

      • EURUSD mit der Historie bis zum 01.01.2009
      • USDJPY mit der Historie bis zum 01.06.2012
      • EURJPY mit der Historie bis zum 01.06.2014

      In diesem Fall wird die Historie des synthetischen Finanzinstruments für einen Zeitraum vom 01.06.2014 bis heute berechnet. Von diesem Datum werden zusätzlich 100 Minuten abgezogen, um die Vollständigkeit der Berechnung zu sichern (wenn es einen Minutenbalken in der Historie nicht gibt, wird bei der Berechnung der Balken der vorherigen Minute verwendet).

      Wenn eine tiefe Historie vorhanden ist, kann die Berechnung des synthetischen Finanzinstruments lange Zeit in Anspruch nehmen. Damit Sie sich seinen Chart sofort anschauen könnten, wird zuerst die Historie für die letzten zwei Monate berechnet (genauso wie in früheren Versionen). Erst danach wird die frühere Historie berechnet.

    MQL5

    1. Es wurde die Eigenschaft ACCOUNT_CURRENCY_DIGITS hinzugefügt — die Anzahl der Nachkommastellen in der Kontowährung. Um den Wert der Eigenschaft zu erhalten, verwenden Sie die Funktion AccountInfoInteger. Die Eigenschaft kann bei der Berechnung des Gewinns für die Normalisierung der erhaltenen Werten verwendet werden.
    2. Die Verzögerung der Ausführung von Copy-Funktionen und i-Funktionen bei der Arbeit mit einem Wochenzeitrahmen wurde korrigiert.
    3. Fehler in der Funktion WebRequest wurden behoben.

    Tester

    1. Es wurde die Möglichkeit hinzugefügt, einen Einzeltest für einen Expert Advisor nach dem Herunterladen von Optimierungsergebnissen aus einer Cache-Datei durchzuführen.
    2. Das anfängliche Herunterladen der Preis-Historie durch lokale Testagenten wurde beschleunigt.

    Die Dokumentation wurde aktualisiert.

    26 Juni 2018
    MetaTrader 5 build 1870: neue Symbole im Market Watch von ISIN

    Terminal

    1. Suche nach Handelssymbolen mit ISIN (International Securities Identification Number), die neu im Fenster des Market Watch angezeigt werden. Jetzt können Sie Symbole durch drei Methoden hinzufügen: Über den Namen, die Beschreibung und über ISIN.



    2. Die Verzögerung der Benutzeroberfläche beim Ändern des Passworts eines Handelskontos wurde korrigiert.
    3. Eine gelegentliche Erhöhung der CPU-Last durch das Terminal des Klienten wurde korrigiert.

    MQL5

    1. Die Übergabe einen eigenen HTTP-Headers an die Funktion WebRequest wurde korrigiert.
    2. Das Verhalten der Funktion Bars im Falle, dass Anfangs und Enddatum einer Zeitspanne gleich sind, wurde korrigiert. Jetzt, wenn eine Bar existiert, gibt die Funktion 1 zurück. In früheren Versionen war dieser Wert in dem Fall immer 0.

    Tester

    1. Der Beginn eines einzelnen Tests im visuellen Modus nach einer Vorwärtsoptimierung wurde korrigiert.
    2. Die Sortierung der Ergebnisse der Optimierung wurde korrigiert. Jetzt berücksichtigt die Sortierung auch Durchläufe mit inkorrekten Eingabeparametern (INIT_INCORRECT_PARAMETERS) und die, die keinen Profit-Faktor aufweisen.
    3. Die Neuberechnung der Grafik einer genetischen Optimierung nach dem Ändern des Optimierungskriterium wurde korrigiert.

    Die Dokumentation wurde aktualisiert.

    15 Juni 2018
    MetaTrader 5 Build 1860: Funktionen für die Arbeit mit Balken in MQL5 und Verbesserungen im Strategietester

    Terminal

    1. Der Dialog der Kontoeröffnung wurde komplett überarbeitet. Nun wählen Sie zuerst den gewünschten Broker aus, und danach den Kontotyp, den Sie eröffnen wollen. Dank dieser Änderung ist die Liste der Broker kompakter geworden, denn nun werden Unternehmensnamen angezeigt und nicht alle verfügbaren Server.

      Um die Suche zu erleichtern, wurden der Liste die Logos der Unternehmen hinzugefügt. Wenn der gewünschte Broker nicht in der Liste vorhanden ist, geben Sie den Namen des Unternehmens oder die Adresse des Servers in der Suche ein und klicken Sie auf "Find your broker".




      Um angehenden Händlern zu helfen, wurden dem Dialog Beschreibungen für Kontotypen hinzugefügt. Aufgrund der Aktualisierung der Allgemeinen Datenschutzrichtlinie (DSGVO) kann der aktualisierte Dialog der Kontoeröffnung Links zu verschiedenen Vereinbarungen und Richtlinien von Brokerunternehmen enthalten:




      Die Möglichkeiten für die Eröffnung von Real-Konten wurden wesentlich erweitert. Die Funktion zum Hochladen von Dokumenten für den Identitätsnachweis und die Bestätigung der Adresse, die früher in mobilen Terminals eingeführt wurde, ist nun auch in der Desktopversion verfügbar. Die von MiFID-regulierten Broker können nun alle benötigten Informationen für die Identifizierung des Kunden, einschließlich der Daten über Beschäftigung, Einkommen, Handelserfahrung usw. abfragen. Dies erlaubt es, reale Konten einfacher und schneller zu eröffnen, ohne unnötige Bürokratie.




    2. Nun werden die Werte von Stop Loss und Take Profit in der Historie der Abschlüsse angezeigt. Bei der Eröffnung und Umkehrung werden sie entsprechend den Werten von Stop Loss und Take Profit der Orders gesetzt, die diese Abschlüsse initiiert haben. Beim Ausstieg werden die Werte von Stop Loss und Take Profit der entsprechenden Positionen zum Zeitpunkt der Schließung verwendet. Letzteres erlaubt es, die Informationen über den Wert von Stop Loss und Take Profit einer Position zum Zeitpunkt ihrer Schließung zu speichern und anzuzeigen. In früheren Versionen wurden solche Informationen nicht gespeichert, denn Positionen verschwinden nach dem Schließen, und die Historie der Positionen wird basierend auf Abschlüssen gebildet.




    3. Nun werden die Werte von Stop Loss und Take Profit in der Historie der Positionen angezeigt. Für solche Positionen werden die Werte von Stop Loss und Take Profit der Abschlüsse angegeben, die die entsprechenden Positionen eröffnen und schließen.




    4. Nun wird das aktuelle Volumen von Pending Orders statt des ursprünglich abgefragten auf dem Chart angezeigt.




    5. Die Anzeige der Markttiefe im erweiterten Modus mit der aktivierten Anzeige des Spreads wurde optimiert und wesentlich beschleunigt.
    6. Die Verarbeitung der Ergebnisse der Ausführung von Handelsanfragen wurde optimiert. In einigen Fällen kann dies die Verarbeitung wesentlich beschleunigen.
    7. Es wurde ein Fehler des Trailing Stops behoben, der in einigen Fällen zum Senden mehrerer Anfragen hinsichtlich der Änderung des Stop Loss Levels einer und derselben Position führte.
    8. Es wurde das Setzen des minimalen und maximalen Volumens sowie des Schritts des Volumens in den Eigenschaften benutzerdefinierter Symbole korrigiert.
    9. Es wurde ein Fehler behoben, wegen dessen die Option "Fix Scale" bei der Anwendung eines Templates an den Chart des Handelsinstruments ignoriert wurde.
    10. Es wurde ein Fehler behoben, der in einigen Fällen dazu führte, dass die Tick-Historie falsch gespeichert wurde.

    MQL5

    1. Die Geschwindigkeit der MQL5-Programme wurde durch eine zusätzliche Optimierung des Quellcodes bei der Kompilierung erhöht. Um von der erhöhten Geschwindigkeit zu profitieren, kompilieren Sie Ihre Programme in der neuen Version des MetaEditor.
      Leider führte die zusätzliche Optimierung dazu, dass neue Programme mit den älteren Versionen des Terminals nicht kompatibel sind. Alle Programme, die in MetaEditor Version 1860 und höher kompiliert wurden, können nicht in den Versionen des Terminals älter als 1860 gestartet werden. Dabei werden die Programme, die in den älteren MetaEditor Versionen kompiliert wurden, in neuen Terminals laufen.

    2. Es wurden die Funktionen iTime, iOpen, iHigh, iLow, iClose, iVolume, iBars, iBarShift, iLowest, iHighest, iRealVolume, iTickVolume und iSpread hinzugefügt. Diese Funktionen sind gleich den in MQL4 verwendeten Funktionen. Auf diese Weise ist es einfacher für Nutzer, den Code von Handelsprogrammen auf die Plattform der fünften Generation zu übertragen.

      Früher konnten die meisten Aufgaben dieser Funktionen mithilfe der Funktion Copy* erfüllt werden. Aber für die Suche nach maximalen/minimalen Werten auf dem Chart und für die Suche nach Balken nach Zeit, mussten Nutzer eigene Funktionen implementieren. Nun kann man das ganz einfach mithilfe der Funktionen iHighest, iLowest und iBarShift ausführen.

      iTime
      Gibt den Zeitpunkt der Eröffnung eines Balkens (der mithilfe des Parameters shift vorgegeben wurde) des entsprechenden Charts zurück.
      datetime  iTime(
         string           symbol,          // Symbol
         ENUM_TIMEFRAMES  timeframe,       // Zeitrahmen
         int              shift            // Verschiebung
         );

      iOpen
      Gibt den Open-Preis des Balkens (der durch den Parameter shift vorgegeben wurde) des entsprechenden Charts zurück.
      double  iOpen(
         string           symbol,          // Symbol
         ENUM_TIMEFRAMES  timeframe,       // Zeitrahmen
         int              shift            // Verschiebung
         );

      iHigh
      Gibt den High-Preis des Balkens (der durch den Parameter shift vorgegeben wurde) des entsprechenden Charts zurück.
      double  iHigh(
         string           symbol,          // Symbol
         ENUM_TIMEFRAMES  timeframe,       // Zeitrahmen
         int              shift            // Verschiebung
         );

      iLow
      Gibt den Low-Preis des Balkens (der durch den Parameter shift vorgegeben wurde) des entsprechenden Charts zurück.
      double  iLow(
         string           symbol,          // Symbol
         ENUM_TIMEFRAMES  timeframe,       // Zeitrahmen
         int              shift            // Verschiebung
         );

      iClose
      Gibt den Close-Preis des Balkens (der durch den Parameter shift vorgegeben wurde) des entsprechenden Charts zurück.
      double  iClose(
         string           symbol,          // Symbol
         ENUM_TIMEFRAMES  timeframe,       // Zeitrahmen
         int              shift            // Verschiebung
         );

      iVolume
      Gibt den Wert des Tick-Volumens des Balkens (der durch den Parameter shift vorgegeben wurde) des entsprechenden Charts zurück.
      long  iVolume(
         string           symbol,          // Symbol
         ENUM_TIMEFRAMES  timeframe,       // Zeitrahmen
         int              shift            // Verschiebung
         );

      iBars
      Gibt die Anzahl der Balken in der Historie nach dem entsprechenden Symbol und Zeitrahmen zurück.
      int  iBars(
         string           symbol,          // Symbol
         ENUM_TIMEFRAMES  timeframe        // Zeitrahmen
         );

      iBarShift
      Suche nach Balken nach Zeit. Die Funktion gibt den Index des Balkens zurück, der der angegebenen Zeit entspricht.
      int  iBarShift(
         string           symbol,          // Symbol
         ENUM_TIMEFRAMES  timeframe,       // Zeitrahmen
         datetime         time,            // Zeit
         bool             exact=false      // Modus
         );

      iLowest
      Gibt den Index des kleinsten gefundenen Wertes (Verschiebung hinsichtlich des aktuellen Balkens) des entsprechenden Charts zurück.
      int  iLowest(
         string           symbol,          // Symbol
         ENUM_TIMEFRAMES  timeframe,       // Zeitrahmen
         int              type,            // Identifikator der Zeitreihe
         int              count,           // Anzahl der Elemente
         int              start            // Index
        );

      iHighest
      Gibt den Index des größten gefundenen Wertes (Verschiebung hinsichtlich des aktuellen Balkens) des entsprechenden Charts zurück.
      int  iHighest(
         string           symbol,          // Symbol
         ENUM_TIMEFRAMES  timeframe,       // Zietrahmen
         int              type,            // Indentifikator der Zeitreihe
         int              count,           // Anzahl der Elemente
         int              start            // Index
        );

      iRealVolume
      Gibt den Wert des echten Volumens des Balkens (der durch den Parameter shift vorgegeben wurde) des entsprechenden Charts zurück.
      long  iRealVolume(
         string           symbol,          // Symbol
         ENUM_TIMEFRAMES  timeframe,       // Zeitrahmen
         int              shift            // Verschiebung
         );

      iTickVolume
      Gibt den Wert des Tick-Volumens des Balkens (der durch den Parameter shift vorgegeben wurde) des entsprechenden Charts zurück.
      long  iTickVolume(
         string           symbol,          // Symbol
         ENUM_TIMEFRAMES  timeframe,       // Zeitrahmen
         int              shift            // Verschiebung
         );

      iSpread
      Gibt den Wert des Spreads des Balkens (der durch den Parameter shift vorgegeben wurde) des entsprechenden Charts zurück.
      long  iSpread(
         string           symbol,          // Symbol
         ENUM_TIMEFRAMES  timeframe,       // Zeitrahmen
         int              shift            // Verschiebung
         );
    3. Es wurde die Funktion TesterHideIndicators hinzugefügt. Sie setzt das Anzeigen/Ausblenden von Indikatoren, die im Expert Advisor verwendet werden. Die Funktion dient zur Verwaltung der Sichtbarkeit der verwendeten Indikatoren nur beim Testen. Geben Sie das Flag true an, wenn die erstellten Indikatoren ausgeblendet werden müssen, andernfalls false.
      void  TesterHideIndicators(
         bool      hide     // Flag
         );
    4. Es wurde die Erzeugung des Ereignisses CHARTEVENT_CLICK beim Klicken mit der Maus auf Handelslevels des Charts hinzugefügt.
    5. Es wurde die Arbeit der Funktionen CopyTicks korrigiert und optimiert.
    6. Es wurde der Wert korrigiert, den die Funktion SymbolInfoDouble für die Eigenschaft SYMBOL_TRADE_LIQUIDITY_RATE zurückgab.
    7. Es wurde der Fehler des Kopierens von String-Arrays mit einem sich überschneidenden Speicherbereich behoben.
    8. Es wurde der Fehler der Zuweisung eines String-Arrays in der Funktion FileReadArray behoben.
    9. Es wurde eine Reihe von Fehlern in der Standardbibliothek MQL5 behoben.

    Tester

    1. Das System für die Arbeit mit dem Cache der Optimierung wurde aktualisiert. Cache speichert Daten über die früher berechneten Durchläufe einer Optimierung. Der Strategietester speichert sie, um die Optimierung nach einer Pause fortzusetzen und um die bereits berechneten Durchläufe des Testens nicht neu zu berechnen.

      Änderungen im Speicherformat des Cache der Optimierung
      Früher wurde der Cache der Optimierung als eine XML-Datei gespeichert. Dieser Datei wurden alle Durchläufe der Optimierung eines Expert Advisors mit den vorgegebenen Einstellungen des Testens hinzugefügt. In einer und derselben Datei wurden die Ergebnisse der Optimierung mit verschiedenen Eingabeparametern gespeichert.
      Nun wird der Cache der Optimierung als binäre Dateien separat für jeden Set der zu optimierenden Parameter gespeichert. Durch die Änderung des Formats und Reduzierung der Dateigröße wurde die Arbeit des Testers mit dem Cache der Optimierung wesentlich beschleunigt. Diese Beschleunigung wird besonders deutlich, wenn man eine früher gestoppte Optimierung fortsetzt.

      Anzeige der Ergebnisse früher durchgeführter Optimierungen
      Nun können Sie sich die Ergebnisse der früher durchgeführten Optimierungen anschauen, ohne sich mit riesigen XML-Dateien in Drittprogrammen beschäftigen zu müssen. Öffnen Sie den Reiter "Optimierungsergebnisse", wählen Sie einen Expert Advisor und eine Datei mit dem Cache der Optimierung aus:



      In der Liste werden alle Dateien des Cache der Optimierung angezeigt, die für den ausgewählten Expert Advisor vorhanden sind. Für jede Datei werden Optimierungsdatum, Testeinstellungen (Symbol, Zeitrahmen, Datum) sowie Informationen über die Eingabeparameter angezeigt. Darüber hinaus können Sie die Optimierungsergebnisse nach Handelsserver filtern, auf welchem sie abgefragt wurden.

      Neuberechnung des Optimierungskriteriums während des Testens
      Ein Optimierungskriterium ist eine Kennzahl, deren Wert die Qualität des zu testenden Sets der Eingabeparameter definiert. Je größer der Wert des Optimierungskriteriums ist, desto besser wird das Ergebnis des Testens mit diesem Parameterset eingestuft.

      Früher wurde bei der Optimierung nur ein Kriterium berechnet, das vor dem Beginn der Optimierung ausgewählt wurde. Nun können Sie das Optimierungskriterium während des Testens ändern, der Strategietester wird alle Werte neu berechnen.




      Wie der Cache der Optimierung manuell verwendet wird
      Früher wurde der Cache der Optimierung in einer XML-Datei gespeichert, die man auch in Drittsoftware öffnen und analysieren konnte. Nun wird er in geschlossenen Binärdateien gespeichert. Um Daten im XML-Format zu erhalten, exportieren Sie sie über das Kontextmenü des Reiters "Optimierungsergebnisse".

    2. Es wurde die Option hinzugefügt, die Kontowährung und den Hebel für das Testen und für die Optimierung manuell zu setzen. Früher wurde die Kontowährung in Übereinstimmung mit dem aktuell verbundenen Konto gesetzt. Dementsprechend musste man zu den anderen Konten wechseln, um die Parameter zu ändern. Der Hebel konnte auch nur aus einer vordefinierten Liste ausgewählt werden, nun können Sie beliebige Werte angeben.

      Bitte beachten Sie, dass für korrekte Tests Kreuzkurse für die Umwandlung des Profits und der Margin in die angegebene Kontowährung verfügbar sein müssen.




    3. Es wurde das Verbot für die Verwendung von OpenCL in Testagenten aufgehoben. Früher konnten OpenCL-Devices nur beim Testen auf lokalen Agenten verwendet werden. Nun dürfen Agenten alle verfügbaren OpenCL-Devices (Prozessor, Grafikkarte) bei der Arbeit im lokalen Netz und in MQL5 Cloud Network verwenden.

    MetaEditor

    1. Das Arbeiten mit dem MQL5 Storage wurde optimiert und beschleunigt.
    2. Ausführung des Debuggings nach einer Pause in der MQH-Datei korrigiert.
    3. Es wurden die Fehler des Hervorhebens des Quellcodes im Editor behoben.
    4. Die Navigation durch Testergebnisse wurde korrigiert.
    5. Massenweise Textersetzung korrigiert. In einigen Fällen wurde nur das erste Vorkommen einer Folge statt allen ersetzt.

    Die Dokumentation wurde aktualisiert.

    12 Januar 2018
    MetaTrader 5 Build 1745 ist die letzte Version der Handelsplattform, die Microsoft Windows XP/2003/Vista unterstützt.

    Vor einigen Monaten haben wir bereits die Einstellung der Unterstützung für alte Versionen von Betriebssystemen angekündigt. Windows 2003, Windows Vista und besonders Microsoft Windows XP sind veraltete Betriebssysteme. Microsoft stellte die Unterstützung für Windows XP vor drei Jahren ein, denn wegen technischer Einschränkungen lies dieses System die Möglichkeiten der Hardware nicht voll ausschöpfen.

    MetaTrader 5 Build 1745 und ältere Versionen der Plattform werden auch weiterhin auf den genannten Betriebssystemen laufen, aber keine Updates erhalten. Darüber hinaus können Installers in den genannten Systemen nicht gestartet werden.

    Die minimale Anforderung an das Betriebssystem für MetaTrader 5 ist Windows 7, wir empfehlen aber dringend, 64-Bit-Versionen von Windows 10 zu nutzen.

    Terminal

    1. Zum Installer wurde der Schlüssel /auto hinzugefügt, der es erlaubt, Programme im automatischen Modus ohne zusätzliche Aktionen des Nutzers zu installieren. Beim Starten des Installers mit diesem Schlüssel werden Installationseinstellungen nicht angezeigt, das Terminal wird mit Standardeinstellungen und einem Standardnamen des Programmordners im Startmenü installiert. Ein Beispiel für das Starten:
      C:\mt5setup.exe /auto
    2. Die Arbeit des Installers wurde in den Fällen korrigiert, in denen der Nutzer eines Betriebssystems nicht über die entsprechenden Rechte verfügte.
    3. Ein hoher CPU-Verbrauch wurde korrigiert, wenn keine Aktionen im Terminal durchgeführt werden (keine offenen Charts vorhanden, keine Aktionen vom Nutzer).
    4. Nun werden *.log Dateien auf der Ebene des Dateisystems automatisch komprimiert. Dies erlaubt es, den Speicherplatz für Log-Dateien zu reduzieren.

    Tester

    1. Das Cache-Volumen wurde bei einzelnen Testdurchläufen erhöht, was das Testen in 64-Bit-Betriebssystemen etwas beschleunigt.
    2. Die Optimierung von Handelsrobotern unter Verwendung von MQL5 Cloud Network wurde korrigiert. Probleme konnten bei den im MetaTrader Market erworbenen Produkten auftreten.
    3. Die Berechnung von Spreads für die im Testmodus "Jeder Tick" erzeugten Balken wurde korrigiert.
    4. Die Auswahl eines OpenCL-Device im Strategietester wurde korrigiert. Der visuelle Tester kann nun auf alle vorhandenen OpenCL-Devices zugreifen.
    5. Nun werden *.log Dateien auf der Ebene des Dateisystems automatisch komprimiert. Dies erlaubt es, den Speicherplatz für Log-Dateien zu reduzieren.

    MQL5

    1. Das Löschen von Balken eines benutzerdefinierten Symbols mithilfe der Methode CustomRatesDelete wurde korrigiert.
    Verbesserungen anhand Crash-Logs.
    Die Dokumentation wurde aktualisiert.
    20 Dezember 2017
    MetaTrader 5 Build 1730: Projekte in MetaEditor und synthetische Finanzinstrumente

    Unterstützung für alte Versionen der Terminals eingestellt

    In der neuen Version der Plattform wird die Unterstützung für Desktop-Terminals und mobile Terminals älterer Versionen eingestellt:

    • Kundenterminal: Versionen älter als 730 vom 23. November 2012
    • Mobiles Terminal für iPhone: Versionen älter als 1171 vom 11. November 2015
    • Mobiles Terminal für Android: Versionen älter als 1334 vom 5. August 2016

    Solche Terminals können sich nicht mit Servern der neuen Versionen verbinden. Wir empfehlen Ihnen ausdrücklich, Ihre Terminals vorab zu aktualisieren.

    Protokolldatei des MQL5 Storage geändert

    Für die Unterstützung von Gruppenprojekten wurde die Protokolldatei des MQL5 Storage geändert. Aus diesem Grund müssen Sie nach dem Update der Plattform alle Daten aus dem Storage erneut laden (Checkout). Die Daten, die im MQL5 Storage gespeichert sind, werden während der Aktualisierung nicht betroffen und gehen nicht verloren.

    Vor dem Update auf die neue Version der Plattform empfehlen wir alle lokalen Änderungen im Storage zu speichern (Commit ausführen).

    Terminal

    1. Nun kann man synthetische Finanzinstrumente auf der Plattform erstellen. Das sind Finanzinstrumente, die auf einem oder mehreren der vorhandenen basieren. Man muss eine Formel für die Berechnung der Kurse angeben, und die Plattform wird Ticks des synthetischen Symbols in Echtzeit erzeugen sowie eine Minuten-Historie für es erstellen.

      Wie es funktioniert

      • Sie erstellen ein synthetisches Finanzinstrument und geben eine Formel für seine Berechnung an.
      • Die Plattform berechnet seine Ticks mit einer Frequenz von 10 Mal pro Sekunde, vorausgesetzt, dass sich der Preis mindestens eines Symbols in der Formel geändert hat.
      • Die Plattform berechnet die Historie von Minutenbalken (für zwei letzte Monate) auf Basis von Minutenbalken der Symbole in seiner Formel. Alle neuen Balken (der aktuelle und der nächste) werden in Echtzeit basierend auf erzeugten Ticks des synthetischen Symbols gezeichnet.

      Sie können zum Beispiel ein Finanzinstrument erstellen, welches den Dollarindex (USDX) zeigt. Seine Formel sieht wie folgt aus:

      50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)

      Hinweis: in der ursprünglichen Formel des Dollarindex werden die Währungspaare USDEUR und USDGBP verwendet. Das es nur gegenläufige Währungspaare auf der Plattform gibt, wird für diese eine negative Potenz und der Ask-Preis statt Bid-Preis verwendet.

      Die Plattform berechnet den Preis des neuen Symbols in Echtzeit basierend auf den Kursen der sechs anderen Symbole, die von Ihrem Broker bereitgestellt werden. In der Marktübersicht und auf dem Chart sehen Sie, wie sich sein Preis ändert:




      Erstellen Sie ein neues benutzerdefiniertes Symbol, öffnen Sie dessen Spezifikation und geben Sie seine Formel an:




      Einfachheitshalber zeigt der Formel-Editor die Liste möglicher Varianten an, während man Namen von Symbolen und Funktionen eingibt.

      Die Berechnung von Ticks und Minutenbalken eines synthetischen Symbols beginnt, sobald es zur Marktübersicht hinzugefügt wird. Gleichzeitig werden der Marktübersicht alle Symbole hinzugefügt, die für die Berechnung des synthetischen Symbols benötigt werden. Dem Journal der Plattform wird eine Eintragung über den Beginn der Berechnung hinzugefügt: Synthetic Symbol USDX: processing started.
      • Die Berechnung des synthetischen Symbols wird beendet, wenn es in der Marktübersicht ausgeblendet wird.
      • Symbole, die momentan für die Berechnung synthetischer Symbole verwendet werden, können in der Marktübersicht nicht ausgeblendet werden.

      Berechnung von Kursen in Echtzeit
      Jede 100 Ms (zehn mal pro Sekunde) wird überprüft, ob sich der Preis der Symbole in der Formel geändert hat. Wenn sich der Preis mindestens eines Symbols geändert hat, wird der Preis des synthetischen Symbols berechnet und ein Tick wird generiert. Die Berechnung wird parallel in drei Threads für Bid, Ask und Last-Preise durchgeführt. Zum Beispiel, wenn die Formel EURUSD*GBPUSD ist, werden die Preise des synthetischen Symbols wie folgt berechnet:

      • Bid — bid(EURUSD)*bid(GBPUSD)
      • Ask — ask(EURUSD)*ask(GBPUSD)
      • Last — last(EURUSD)*last(GBPUSD)

      Das Vorhandensein der Veränderungen wird für jeden Preis separat geprüft. Wenn sich bei einer Berechnung nur der Bid-Preis des ursprünglichen Symbols verändert hat, wird für den Tick des synthetischen Symbols nur der entsprechende Preis berechnet.

      Zeichnen der Historie von Munitenbalken
      Neben dem Sammeln von Ticks in Echtzeit, erstellt die Plattform eine Minuten-Historie des synthetischen Symbols. Auf diese Weise kann sich der Trader seine Charts wie die Charts einfacher Symbole ansehen und mithilfe von Objekten und Indikatoren technische Analyse durchführen.

      Sobald der Trader ein synthetisches Symbol zur Marktübersicht hinzufügt, prüft die Plattform, ob es für ihn eine berechnete Minutenhistorie gibt. Wenn nicht, wird die Historie für die letzten 60 Tage erstellt. Das macht ungefähr 50 000 Balken aus. Wenn ein kleinerer Wert im Parameter "Max. Balken im Chart" in den Einstellungen der Plattform angegeben wurde, wird diese Beschränkung angewandt.

      Wenn einige Balken für diese Perioden bereits gezeichnet wurden, erzeugt die Plattform zusätzlich neue Balken. Eine tiefere Historie wird erst beim Versuch erstellt, sich einen älteren Zeitraum auf dem Chart anzusehen (wenn man zurück scrollt oder die Historie aus einem MQL5-Programm abruft).

      Die Historie von Minutenbalken eines synthetischen Symbols wird basierend auf Minutenbalken (nicht Ticks) der Symbole in seiner Formal berechnet. Um den Open-Kurs eines Minutenbalkens eines synthetischen Symbols zu berechnen, verwendet die Plattform Open-Kurse der Symbole in der Formel. Die High-, Low- und Close- Kurse werden gleich berechnet.

      Wenn der benötigte Minutenbalken für ein Symbol aus der Formel fehlt, verwendet die Plattform den Close-Kurs des vorherigen Balkens für die Berechnung. Es werden zum Beispiel drei Symbole verwendet: EURUSD, USDJPY und GBPUSD. Fehlt bei der Berechnung eines Balkens, der der Minute 12:00 entspricht, der Minutenbalken von USDJPY, werden folgende Preise verwendet:

      • Für Open — EURUSD Open 12:00, USDJPY Close 11:59, GBPUSD Open 12:00
      • Für High — EURUSD High 12:00, USDJPY Close 11:59, GBPUSD High 12:00
      • Für Low — EURUSD Low 12:00, USDJPY Close 11:59, GBPUSD Low 12:00
      • Für Close — EURUSD Close 12:00, USDJPY Close 11:59, GBPUSD Close 12:00

      Wenn der Minutenbalken bei allen Symbolen in der Formel fehlt, wird der entsprechende Minutenbalken des synthetischen Symbols nicht berechnet.

      Zeichnen neuer Minutenbalken
      Alle neuen Balken (der aktuelle und die darauffolgenden) des synthetischen Symbols werden basierend auf erzeugten Ticks erstellt. Der Preis, nach welchem die Balken gezeichnet werden, hängt vom Parameter "Zeichnen von Charts" in der Spezifikation ab:





      Welche Operationen in der Formel des Symbols verwendet werden dürfen
      In der Formel können Preisdaten sowie einige Eigenschaften existierender Symbole (bereitgestellt vom Broker) verwendet werden. Dafür sind folgende Informationen anzugeben:

      • Symbolname — je nach dem, welcher Preis des synthetischen Symbols berechnet wird, wird in der Formel der Bid-, Ask- oder Last-Preis des angegebenen Finanzinstruments verwendet. Zum Beispiel wenn man EURUSD*GBPUSD angibt, wird Bid als bid(EURUSD)*bid(GBPUSD) und Ask — als ask(EURUSD)*ask(GBPUSD) berechnet.
      • bid(Symbolname) — bei der Berechnung des Bid-Preises des synthetischen Symbols wird die Verwendung des Bid-Preises des angegebenen Symbols erzwungen. Diese Variante ist ähnlich der vorherigen (ohne Angabe des Preistyps).
      • ask(Symbolname) — bei der Berechnung des Bid-Preises des synthetischen Symbols wird die Verwendung des Ask-Preises des angegebenen Symbols erzwungen. Bei der Berechnung des Ask-Preises wird umgekehrt der Bid-Preis des angegebenen Symbols verwendet. Bei der Berechnung des Last-Preises wird der Last-Preis des angegebenen Symbols verwendet. Zum Beispiel wenn man ask(EURUSD)*GBPUSD angibt, wird wie folgt berechnet:
        • Bid = ask(EURUSD)*bid(GBPUSD)
        • Ask = bid(EURUSD)*ask(GBPUSD)
        • Last = last(EURUSD)*last(GBPUSD)
      • last(Symbolname) — der Last-Preis des angegebenen Symbols wird bei der Berechnung aller Preise des synthetischen Symbols (Bid, Ask und Last) verwendet. Wenn man zum Beispiel last(EURUSD)*GBPUSD angibt, wird wie folgt berechnet:
        • Bid = last(EURUSD)*bid(GBPUSD)
        • Ask = last(EURUSD)*ask(GBPUSD)
        • Last = last(EURUSD)*last(GBPUSD)
      • volume(Symbolname) — in der Formel wird das Tickvolumen des angegebenen Symbols verwendet. Stellen Sie sicher, dass die Volumen-Daten für das angegebene Symbol vom Broker geliefert werden.
      • point(Symbolname) — in die Formel wird der Wert der minimalen Preisveräderung des angegebenen Symbols eingefügt.
      • digits(Symbolname) — in die Formel wird die Anzahl der Nachkommastellen im Preis des angegebenen Symbols eingefügt.

      Wenn der Symbol einen komplizierten Namen hat (Bindestrich, Punkte usw. beinhaltet), muss er in Anführungszeichen gesetzt werden. Zum Beispiel, "RTS-6.17".
      Folgende Rechenoperationen können in der Formel verwendet werden: Addition (+), Subtraktion (-), Multiplikation (*), Division (/) und Division mit Rest (%). EURUSD+GBPUSD bedeutet, zum Beispiel, dass der Preis als Summe der Preise von EURUSD und GBPUSD berechnet wird. In der Formel kann auch das unäre Minus für die Änderung des Vorzeichens verwendet werden: -10*EURUSD.

      Die Rechenoperationen werden nach Vorrangregeln ausgeführt:

      • Zunächst werden Multiplikation, Division und Division mit Rest ausgeführt, danach werden Addition und Subtraktion ausgeführt.
      • Die Rechenoperationen werden von links nach rechts ausgeführt. Wenn mehrere Operationen in der Formel (zum Beispiel, Addition und Subtraktion) verwendet werden, wird zunächst die Rechenoperation ganz links ausgeführt.
      • Um die Reihenfolge der Ausführung zu ändern, kann man runde Klammern ( und ) verwenden. Die Ausdrücke in Klammern haben bei der Berechnung den höchsten Vorrang. Für diese Ausdrücke gilt auch das Prinzip von links nach rechts: zuerst wird der Ausdruck in Klammern berechnet, der in der Formel ganz links steht.

      Darüber hinaus können Konstanten in der Formel verwendet werden:

      • Nummerische (ganzzahlige und mit Gleitkomma). Zum Beispiel, EURUSD*2+GBPUSD*0.7.
      • Die Symbol-Eigenschaften _Digits und _Point. _Digits — Anzahl der Nachkommastellen im Preis des Symbols, _Point — minimale Preisveränderung des Symbols.

      Darüber hinaus kann man in der Formel alle mathematischen Funktionen, die in MQL5 unterstützt werden, außer MathSrand, MathRand und MathIsValidNuber, verwenden. Für alle Funktionen werden kurze Namen verwendet: fabs(), acos(), asin() usw.

    2. Es wurde eine Option hinzugefügt, die es erlaubt, Kurse für benutzerdefinierte Finanzinstrumente in Eichtzeit hinzuzufügen. Nun ist es möglich, einen Expert Advisor in MQL5 zu schreiben, der Kurse für das angegebene Finanzinstrument liefern wird. Dafür wird die neue Funktion CustomTicksAdd verwendet.
      int  CustomTicksAdd(
         const string           symbol,       // Symbolname
         const MqlTick&         ticks[]       // Array mit Tickdaten, die auf das benutzerdefinierte Finanzinstrument angewandt werden müssen
         );
      Die Funktion CustomTicksAdd erlaubt es, die Tick so zu übertragen, als ob sie vom Server des Brokers eintreffen würden. Die Daten werden nicht direkt in die Datenbank von Ticks geschrieben, sondern in die Marktübersicht gesendet. Das Terminal speichert dann die Ticks aus der Marktübersicht in seiner Datenbank. Wenn eine große Datenmenge bei einem Aufruf übertragen wird, ändert die Funktion ihr Verhalten, um Ressourcen zu sparen. Wenn über 256 Ticks übergeben werden, werden die Daten in zwei Teile geteilt. Der erste Teil (der größere) wird direkt in die Datenbank von Ticks geschrieben (wie dies CustomTicksReplace tut). Der zweite Teil, der aus den letzten 128 Ticks besteht, wird in die Marktübersicht übertragen und danach vom Terminal in der Datenbank gespeichert.
    3. In der Marktübersicht werden jetzt auch High und Low Kurse angezeigt. Standardmäßig sind diese Spalten deaktiviert. Sie können die Anzeige im Kontextmenü aktivieren:




      Für Symbole, deren Charts nach Bid-Preisen (in der Spezifikation angegeben) gezeichnet werden, werden Bid High und Bid Low Preise angezeigt. Für Finanzinstrumente, deren Charts nach Last-Preisen gezeichnet werden, werden Last High und Last Low angezeigt.

      Mit den Spalten High/Low wird die Last-Spalte automatisch aktiviert, wenn es mindestens ein Symbol in der Marktübersicht gibt, dessen Charts nach Last-Preisen gezeichnet werden.

    4. Es wurde die Option hinzugefügt, Tick-Historie benutzerdefinierter Finanzinstrumente zu bearbeiten. Klicken Sie auf "Symbole" im Kontextmenü der Marktübersicht, wählen Sie ein benutzerdefiniertes Symbol aus und rufen Sie den gewünschten Zeitraum im Ticks-Reiter ab.

      • Die Werte können durch einen Doppelklick geändert werden.
      • Für das Hinzufügen oder Löschen von Einträgen, verwenden Sie das Kontextmenü.
      • Um mehrere Balken/Ticks zu löschen, wählen Sie diese mit der Maus aus, während Sie Shift oder Strg+Shift drücken und halten.




      Die geänderten Einträge werden wie folgt hervorgehoben:

      • grüner Hintergrund — geänderte Eintrag
      • grauer Hintergrund — gelöschter Eintrag
      • gelber Hintergrund — hinzugefügter Eintrag

      Um die Änderungen zu speichern, klicken Sie auf "Änderungen übernehmen" im unteren Teil des Fensters.

    5. Im Verzeichnis des Navigators werden nun vorläufige Konten angezeigt.

      Händler können Anfragen an den Broker direkt aus Desktop-Terminals senden, um ein Realkonto zu eröffnen. Dafür reicht es, eine einfache Form mit Kontaktdaten wie beim Eröffnen eines Demo-Kontos auszufüllen. Danach wird ein vorläufiges Konto für den Händler erstellt. Weiter setzt sich der Broker mit dem Händler in Verbindung, um einen Vertrag zu schließen, und erstellt aus dem vorläufigen Konto ein Realkonto.




    6. Anzeige der Zeit in Millisekunden im Kurse-Fenster hinzugefügt:




    7. Das Scanning verfügbarer Server wurde im Dialog der Eröffnung eines neuen Kontos beschleunigt.
    8. Die Anzeige des grafischen Objekts "Trendlinie" mit den aktivierten Optionen "Strahl nach links" und "Strahl nach rechts" wurde korrigiert.
    9. Die Arbeit mit einer großen Anzahl interner E-Mails (hundert tausende) wurde optimiert.
    10. Die Arbeit des Terminals mit einer großen Anzahl von Finanzinstrumenten (50 Tausend und mehr) wurde optimiert.
    11. Es wurde die Optimierung der Tick-Historie benutzerdefinierter Symbole hinzugefügt, die nach dem Bearbeiten der Historie ausgeführt wird.

    MetaEditor

    1. Nun sind vollständige Projekte im MetaEditor verfügbar. Es ist viel einfacher geworden, Programme zu entwickeln.

      Die Hauptdatei eines MQL5-Programms erscheint jetzt nicht mehr als Projekt. Ein Projekt ist eine separate Datei "MQPROJ", in welcher die Einstellungen eines Programms, Parameter der Kompilierung und Informationen über alle verwendeten Dateien gespeichert werden. Der Zugriff auf die wichtigsten Einstellungen des Projekts erfolgt über ein separates Dialog-Fenster. Man braucht nicht mehr diese im Queelcode über #property anzugeben.

      Für eine bequeme Arbeit mit Projekten gibt es ein separates Tab im Navigator-Fenster. Hier werden alle verwendeten Dateien nach Kategorien angezeigt: include, resource, header usw. Dabei werden die Dateien zum Navigator des Projekts automatisch hinzugefügt. Zum Beispiel, wenn Sie eine neue MQH-Datei in den Code miteinbeziehen, wird diese im Bereich "Dependencies" im Navigator-Fenster automatisch angezeigt.

      Es wurde die Möglichkeit implementiert, mit neuen Projekten im MQL5 Online-Storage zu arbeiten. Nun kann man große Projekte gemeinsam mit anderen Mitgliedern der MQL5.community entwickeln.

      Für das Arbeiten mit Gruppenprojekten wurde der neue Bereich Shared Projects hinzugefügt. Ein Projekt, das in diesem Bereich erstellt wurde, wird direkt in den Storage geschickt. Sie können anderen Nutzern Zugriffsrechte schnell erteilen und mit einer gemeinsamen Entwicklung beginnen.




      Bei der Kompilierung des Projekts in Shared Project wird die EX5-Datei je nach dem Typ des Programms in das lokale Verzeichnis Experts, Indicators oder Scripts automatisch kopiert. Sie können das Programm direkt auf dem Chart starten, ohne Dateien jedes Mal manuell kopieren zu müssen.


      Neue Funktionen bei der Arbeit mit dem MQL5 Storage

      Für die Implementierung einer vollständigen Arbeit mit Gruppenprojekten wurde das Protokoll der Arbeit mit dem MQL5 Storage komplett geändert. Aus diesem Grund müssen Sie nach dem Update der Plattform alle Daten aus dem Storage erneut laden (Checkout). Die Daten, die im MQL5 Storage gespeichert sind, werden während der Aktualisierung nicht betroffen und gehen nicht verloren.

      Vor dem Update auf die neue Version der Plattform empfehlen wir alle lokalen Änderungen im Storage zu speichern (Commit ausführen).

      Der Befehl "Checkout from Storage" ist nicht mehr verfügbar. Für das Extrahieren von Daten werden die Befehle "MQL5 Storage aktivieren" und "Dateien aus dem Storage erhalten" verwendet:

      • Wenn Sie den Storage in der aktuellen Kopie des MetaEditors noch nicht verwendet haben, klicken Sie auf "MQL5 Storage aktivieren" im Kontextmenü des Navigator-Fensters. Alle vorhandenen Verzeichnisse und Dateien werden auf Ihren lokalen PC übertragen.
      • Wenn Sie mit dem Storage bereits gearbeitet haben, klicken Sie auf "Dateien aus dem Storage erhalten" im Kontextmenü eines konkreten Projekts oder des MQL5 Wurzelelements im Navigator-Fenster, um Dateien zu extrahieren.

      Neue Projekte: ein Beispiel für die Erstellung und Details der Arbeit

      Dem MetaEditor wurde eine neue Einheit hinzugefügt. Es geht um Projekte. Das ist eine Datei mit der Erweiterung mqproj, in welcher allgemeine Eigenschaften eines Programms sowie Informationen über alle verwendeten Dateien gespeichert werden. Nun kann man die Eigenschaften des Programms in einem separaten Dialogfensters des MetaEditors verwalten statt diese manuell im Quellcode zu ändern (Anweisungen #property).

      Wenn Sie einen Code haben, können Sie neue Projekte ganz einfach testen, indem Sie den Befehl "Neues Projekt aus der Quelldatei" ausführen.




      Im Verzeichnis, in welchem sich die ausgewählte Quelldatei befindet, wird eine gleichnamige Datei des Projekts mit der Erweiterung mqproj erstellt. Dem Projekt werden die Haupteigenschaften des Programms automatisch hinzugefügt, die als #property in der Quelldatei angegeben sind. Dazu gehören Name, Copyright, Version, Link zum Autor und Beschreibung.

      Die Eigenschaften des Programms in der Projektdatei haben Vorrang vor den Eigenschaften, die im Quellcode angegeben sind. Wenn Sie Eigenschaften sowohl im Projekt als auch im Quellcode angeben, werden die im Projekt angegebenen Eigenschaften verwendet.




      Es wurden zwei neue Optionen für die Kompilierung von MQL5-Programmen den Projekteigenschaften hinzugefügt:

      • Zusätzliche Optimierung aktivieren — Anwendungen mit deaktivierter Optimierung werden zwar schneller kompiliert, laufen aber langsamer.
      • Divisoren mit Gleitkomma prüfen — Anwendungen mit deaktivierter Überprüfung arbeiten etwas schneller, weil die Division-durch-Null-Fehler bei der Ausführung des Codes nicht überprüft werden.

      Für die Arbeit mit dem Projekt nutzen Sie das separate Tab "Projekt" im Navigator-Fenster. In diesem Reiter werden alle im Projekt verwendeten Dateien angezeigt. Bei der Erzeugung eines Projekts aus der Quelldatei werden zum Bereich "Dependencies" alle Include-Dateien (die mittels der Anweisung #include in der MQ5-Hauptdatei und in allen miteinbezogenen Dateien angegeben wurden) automatisch hinzugefügt.

      Beim Hinzufügen neuer Include-Dateien zum Quellcode erscheinen diese auch im Navigator des Projekts. Zum Bereich Headers werden die verwendeten Header-Dateien hinzugefügt, zum Bereich Resources — Abbildungen, Töne und andere MQL5-Programme, die als Ressourcen ins Projekt miteinbezogen werden. Im Bereich Sources werden MQ5-Datein mit dem Quellcode angezeigt. Zum Bereich "Einstellungen und Dateien" kann man andere Dateien hinzufügen, zum Beispiel Testeinstellungen und Vorlagen für Charts.

      Um bereits existierende Dateien zum Projekt hinzuzufügen oder Dateien aus dem Projekt zu löschen, nutzen Sie Befehle des Kontextmenüs. Seien Sie aufmerksam beim Löschen: Sie können eine Datei aus dem Projekt entfernen (Bindung entfernen) oder diese von der Festplatte komplett löschen:




      Ein neues Projekt zu erstellen ist genauso einfach, wie ein MQL5-Programm. Klicken Sie auf "Neues Projekt" und wählen Sie den Typ des Programms aus sowie geben Sie seine Eigenschaften im MQL5 Wizard an (Name, Event-Handler usw.).

      Um eine ausführbare EX5-Datei zu erhalten, können Sie das Projekt öffnen und die Kompilierung ausführen (F7) oder wie früher, die MQL5-Hauptdatei öffnen und diese kompilieren.


      Gruppenprojekte im MQL5 Storage: Details der Arbeit

      Gruppenprojekte werden im Bereich Shared Projects verwaltet. Wenn Sie den Storage noch nicht aktiviert haben, führen Sie den Befehl Activate MQL5 Storage im Kontextmenü des Ordners aus. MetaEditor überprüft, ob Ihr Storage gespeicherte Daten enthält und ob Gruppenprojekte für Sie verfügbar sind. Die vorhandenen Daten werden aus dem Storage extrahiert und auf den PC geladen (Checkout). Verfügbare Gruppenprojekte werden im Bereich Shared Project angezeigt. Um ein Gruppenprojekt zu erhalten, klicken Sie auf "Dateien aus dem Storage extrahieren" im Kontextmenü.

      Um ein neues Gruppenprojekt zu erstellen, wählen Sie den Ordner Shared Projects aus und klicken Sie auf "Neues Projekt":




      Durchlaufen Sie die Standardschritte des MQL5 Wizards: Geben Sie den Typ, den Namen und die Eigenschaften des künftigen Programms ein. Wählen Sie klare und verständliche Namen für Gruppenprojekte aus, damit andere Teilnehmer diese leicht finden könnten. Der Name darf nur lateinische Buchstaben enthalten, Leerzeichen sind nicht erlaubt.

      Sobald das Projekt erstellt ist, wird es zum MQL5 Storage automatisch hinzugefügt. Die verwendeten Dateien der Standardbibliothek werden zum Storage nicht hinzugefügt, sie können diese manuell hinzufügen wenn nötig.

      Um anderen Teilnehmern die Arbeit an dem Projekt zu erlauben, öffnen Sie seine Eigenschaften. Hier kann man konkreten Nutzern Zugriffsrechte erteilen, indem man ihre Benutzernamen bei der MQL5.community angibt, sowie gemeinsame Parameter der Gruppenarbeit setzen:

      • Privates Projekt
      • Jeder darf am Projekt teilnehmen
      • Teilnahme am Projekt auf Anfrage




      Einfachheitshalber wird die finale ausführbare Datei (EX5) bei der Kompilierung je nach dem Typ des Programms in den Ordner Experts, Indicators oder Scripts automatisch kopiert. Auf diese Weise können Sie das Programm direkt im Terminal starten, ohne es manuell in das benötigte Verzeichnis kopieren zu müssen.


      Öffentliche Projekte im MQL5 Storage: Details der Arbeit

      Wie bereits oben erwähnt, kann man für jedes Gruppenprojekt im MQL5 Storage einstellen, wer auf das Projekt zugreifen kann: das Projekt kann privat sein oder offen für die Teilnahme anderer Nutzer. Nun werden alle Projekte, an denen jeder teilnehmen darf, im separaten Reiter "Öffentliche Projekte" angezeigt.

      Jeder kann ein interessantes Projekt für sich finden und sich an der Entwicklung beteiligen. Klicken Sie auf "Teilnehmen" und erhalten Sie das Projekt aus dem Storage.





      Jeder Teilnehmer erhält nur Leserechte. Um die Rechte zu erhalten, eigene Änderungen im Storage vorzunehmen, wenden Sie sich an den Autor des Projekts. Um seinen bzw. ihren Benutzernamen zu erfahren, öffnen Sie die Eigenschaften des Projekts über das Kontextmenü.

    2. Es wurde die Möglichkeit hinzugefügt, verschiedene Eigenschaften und Ressourcen in den Code des Programms ganz einfach einzufügen. Sie können zum Beispiel eine Include-Datei ganz schnell in den Code einfügen. Wählen Sie "Einfügen — MQH als #incude" und danach die gewünschte Include-Datei im erschienenen Fenster aus. Danach wird die Anweisung #include mit dem richtig angegebenen Pfad zur ausgewählten Datei in den Code des Programms eingefügt.




      Über dieses Menü können Sie auch Dateien als ein binäres Array oder ein Text-Array in den Code eines Programms einfügen. Sie können zum Beispiel Vorlagen von Charts samt Expert Advisors/Indikatoren übertragen: fügen Sie ihre Vorlage in den Code des Programms als Array ein und speichern Sie ihn mithilfe der FileSave Funktion auf der Festplatte. Danach kann man die Vorlage direkt aus dem Expert Advisor mithilfe der Funktion ChartApplyTemplate auf den Chart anwenden.
      //+------------------------------------------------------------------+
      //| Script program start function                                    |
      //+------------------------------------------------------------------+
      void OnStart()
        {
      //--- Template-Datei als binäres Array
         unsigned char my_template[]=
           {
            0xFF,0xFE,0x3C, ... ,0x00 // das Array im Beispiel wurde gekürzt
           };
      //--- Speichern und Anwenden des Templates
         if(FileSave("my_template.tpl",my_template))
           {
            Print("Custom template saved in \\MQL5\\Files");
            if(ChartApplyTemplate(0,"\\Files\\my_template.tpl"))
               Print("Custom template applied to the current chart");
            else
               Print("Failed to apply custom template");
           }
         else
            Print("Failed to save custom template");
        }

    3. Es wurde die Option hinzugefügt, Strings in die Formate ASCII, HEX und Base64 umzuwandeln. Wählen Sie einen String im Quellcode aus und klicken Sie auf den gewünschten Befehl im Menü "Bearbeiten — Umwandeln":




    4. Die Suche nach Dateien ohne Berücksichtigung der Groß- bzw. Kleinschreibung wurde korrigiert.
    5. Es wurde ein Fehler bei der Berechnung des Wertes eines Ausdrucks vom Typ x.y[0][1].z behoben.
    6. Die Navigation im Code mithilfe der Buttons "Weiter" und "Zurück" wurde korrigiert.

    MQL5

    1. Es wurde ein neuer Online-Service für einen zusätzlichen Schutz von MQL5-Programmen hinzugefügt — MQL5 Cloud Protector. Dieser Schutz ist gleich dem Schutz, der im MetaTrader Market, dem größten Marktplatz von Handelsanwendungen, verwendet wird, wo die von Verkäufern eingereichten Produktdateien (EX5) in nativen Code kompiliert werden.

      Nun ist dieser Schutz für jeden Nutzers verfügbar. Man muss nur den Befehl Service — MQL5 Cloud Protector im MetaEditor ausführen. Der einzige Unterschied zum Schutz im Market besteht darin, dass die Datei nicht an den PC des Nutzers gebunden wird. Die durch den MQL5 Cloud Protector geschützten Dateien können auf allen Rechnern wie EX5-Dateien gestartet werden.
      MQL5 Cloud Protector ist ein sicherer Service. Ein zusätzlicher Schutz wird nur auf eine kompilierte Datei angewandt. Der Quellcode wird nicht an den Service weitergeleitet. Zuerst wird ein Programm in eine EX5-Datei auf dem PC des Nutzers kompiliert, danach wird die kompilierte Datei über einen verschlüsselten Kanal an den Service übertragen, geschützt und an den Nutzer zurückgeschickt.



    2. Es wurden Funktionen für das Arbeiten mit benutzerdefinierten Finanzinstrumenten hinzugefügt.

      Funktion Aktion
      CustomSymbolCreate Erstellt ein benutzerdefiniertes Symbol mit dem angegebenen Namen in der angegebenen Gruppe
      CustomSymbolDelete Löscht ein benutzerdefiniertes Symbol mit dem angegebenen Namen
      CustomSymbolSetInteger Setzt den Wert einer Eigenschaft vom ganzzahligen Typ für ein benutzerdefiniertes Symbol
      CustomSymbolSetDouble Setzt den Wert einer Eigenschaft vom reellen Typ für ein benutzerdefiniertes Symbol
      CustomSymbolSetString Setzt den Wert einer Eigenschaft vom String-Typ für ein benutzerdefiniertes Symbol
      CustomSymbolSetMarginRate Setzt den Koeffizienten der Margin je nach Typ und Richtung einer Order für ein benutzerdefiniertes Symbol
      CustomSymbolSetSessionQuote Setzt den Anfang und das Ende der angegebenen Notierungssitzung für das angegebene Symbol und Wochentag
      CustomSymbolSetSessionTrade Setzt den Anfang und das Ende der angegebenen Notierungssitzung für das angegebene Symbol und Wochentag
      CustomRatesDelete Löscht alle Balken im angegebenen Zeitintervall aus der Preishistorie des benutzerdefinierten Symbols
      CustomRatesReplace Ersetzt die komplette Preishistorie des benutzerdefinierten Symbols im angegebenen Zeitraum durch die Daten aus einem Array vom Typ MqlRates
      CustomRatesUpdate Fügt der Historie des benutzerdefinierten Symbols fehlende Balken hinzu und ersetzt die vorhandenen Balken durch die Daten aus dem Array vom Typ MqlRates
      CustomTicksAdd Fügt Daten aus einem Array vom Typ MqlTick zur Preis-Historie eines benutzerdefinierten Symbols hinzu. Das benutzerdefinierte Symbol muss in der Marktübersicht ausgewählt werden
      CustomTicksDelete Löscht alle Balken im angegebenen Zeitintervall aus der Preishistorie des benutzerdefinierten Symbols
      CustomTicksReplace Ersetzt die komplette Preishistorie des benutzerdefinierten Symbols im angegebenen Zeitraum durch die Daten aus einem Array vom Typ MqlTick

    3. Der Standardbibliothek wurden Template-Sammlungen von Daten hinzugefügt, die Klassen und Benutzeroberflächen für das Definieren von Sammlungen auf Basis von Templates beinhalten. Die neuen stark typisierten Sammlungen sind bequem für die Entwicklung von Programmen und zeigen eine hohe Leistung bei der Arbeit mit Daten.

      Die Bibliothek befindet sich im Verzeichnis des Terminals im Ordner Include\Generic.

    4. Es wurde die Unterstützung für Vorlagen für Daten vom Typ union hinzugefügt.
    5. Es wurde die Eigenschaft SYMBOL_VISIBLE hinzugefügt. Der Aufruf von SymbolInfoInteger(symbol, SYMBOL_VISIBLE) gibt false zurück, wenn das angegebene Symbol in der Marktübersicht nicht sichtbar ist.
    6. Es wurde das Ereignis CHARTEVENT_MOUSE_WHEEL hinzugefügt. Das Ereignis wird beim Scrollen oder beim Drücken auf das Mausrad auf dem Chart aufgerufen (wenn CHART_EVENT_MOUSE_WHEEL für ihn auf true gesetzt wurde).
    7. Es wurden neue Chart-Eigenschaften hinzugefügt:

      • CHART_EVENT_MOUSE_WHEEL — das Ereignis des Scrollens und Drückens auf das Mausrad auf dem Chart CHART_EVENT_MOUSE_WHEEL aktivieren/deaktivieren. Möglichen Werte: 0 und 1.
      • CHART_CROSSHAIR_TOOL — die Option der Umschaltung des Cursors in den Fadenkreuz-Modus durch das Drücken auf die mittlere Maustaste aktivieren/deaktivieren. Möglichen Werte: 0 und 1.
      • CHART_CONTEXT_MENU — die Anzeige des Kontextmenüs durch einen Klick auf die rechte Maustaste im Chart aktivieren/deaktivieren. Möglichen Werte: 0 und 1.

    8. Puffer mit dem Stil DRAW_NONE werden nun bei der Berechnung des Maßstabs des Indikatorsfensters nicht berechnet.
    9. Es wurde die Erzeugung des Ereignisses CHARTEVENT_CHART_CHANGE beim Setzen von CHART_SCALEFIX (fester Maßstab) für den Chart hinzugefügt.
    10. Es wurde die Funktion ArraySwap hinzugefügt, die es erlaubt, den Inhalt dynamischer Arrays schnell zu verschieben.
      bool  ArraySwap(
         void&  array1[],      // erstes Array
         void&  array2[]       // zweites Array
         );
      Die Funktion akzeptiert dynamische Arrays von einem Typ und einer Dimension. Für mehrdimensionale Arrays muss die Anzahl der Elemente in allen Dimensionen außer der ersten gleich sein.

    11. Es wurde die neue Eigenschaft TERMINAL_RETRANSMISSION hinzugefügt. Sie zeigt den Anteil von erneut gesendeten Netzwerkpaketen (Retransmits) im TCP/IP Protokoll für alle laufenden Anwendungen und Services auf dem PC. Auch in einem schnellen und richtig konfigurierten Netzwerk kann es zu Paketverlusten kommen, als Ergebnis gibt es keine Bestätigungen über die Zustellung von Paketen zwischen dem Empfänger und dem Sender. In solchen Fällen werden die "verloren gegangenen" Pakete erneut gesendet.

      Das Terminal berechnet diesen Wert nicht, er wird einmal pro Minute aus dem Betriebssystem abgerufen. Das ist kein Indikator der Verbindungsqualität zwischen einem konkreten Terminal und eines konkreten Handelsservers, denn er wird für die ganze Netzwerkaktivität berechnet, einschließlich Systemaktivität und Hintergrundsaktivität.

      Die Eigenschaft TERMINAL_RETRANSMISSION wurde zur Aufzählung ENUM_TERMINAL_INFO_DOUBLE hinzugefügt. Die Eigenschaft wird über die Funktion TerminalInfoDouble abgefragt.
    12. Das Arbeiten mit der Handelshistorie wurde verbessert.

    Signale

    1. Die Angabe des Typs der Orderausführung (filling) bei erzwungenem Schließen von den nach einem Signal eröffneten Positionen wurde korrigiert. In den Einstellungen des Kopierens von Signalen gibt es die Option "Stop, wenn Kontostand unter XXX USD": wenn das Geld auf dem Konto unterhalb des angegebenen Levels liegt, wird das Kopieren von Handelssignalen automatisch beendet, alle Positionen werden zwingend geschlossen. Früher wurde in einigen Fällen beim erzwungenen Schließen von Positionen der Ausführungstyp für Orders falsch angegeben. Nun überprüft das Terminal die erlaubten Ausführungstypen in den Einstellungen des Symbols und gibt eine zulässige Variante an.

    Tester

    1. Das Verhalten der Funktion HistoryOrderSelect im Strategietester entspricht nun dem Verhalten der gleichen Funktion im Kundenterminal.
    2. Das Verhalten der Funktionen CopyTicks und CopyTicksRange im Strategietester entspricht nun den gleichen Funktionen im Kundenterminal.
    3. Die Anzeige grafischer Objekte beim Testen im visuellen Modus wurde optimiert.
    4. Die Anzeige grafischer Objekte beim Testen im visuellen Modus wurde optimiert (mit dem börslichen Risikomanagementsystem). Nun wird nur Kapital (Equity) auf dem Chart angezeigt, Kontostand und Deposit Load werden nicht angezeigt. Der Handelsstatus solcher Konten wird nach Equity bewertet. Der Kontostand zeigt nur die Menge der Eigenmittel auf dem Konto und berücksichtigt nicht Vermögenswerte und finanzielle Verbindlichkeiten des Händlers. Deposit Load (margin/equity) wird nicht angezeigt, weil die Margin bei der Berechnung an der Börse den aktuellen Preis eines Vermögenswertes/einer Verbindlichkeit darstellt, und er verändert sich mit Equity.

    • Es wurde eine Übersetzung der Benutzeroberfläche ins Holländische hinzugefügt.
    • Die Dokumentation wurde aktualisiert.


    123456