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.
Terminal: 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.
Terminal: 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.
Terminal: 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.
Terminal: 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.
Terminal: Behoben wurde ein Berechnungsfehler bei synthetischen Symbolen, aufgrund dessen Daten gelegentlich übersprungen werden konnten.
Terminal: 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.
Terminal: Korrigiert wurde die Darstellung der Suchergebnisse auf Bildschirmen mit hoher DPI-Auflösung.
MQL5: Integrierter Zugriff auf die Daten des Wirtschaftskalenders aus MQL5-Programmen.
Neue Funktionen
CalendarCountryById — Anrufen der Länderbeschreibung auf Grund des Identifikators.
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 Wertedatetime datetime_from, // Anfangszeitpunkt der Zeitspannedatetime 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 Wertedatetime datetime_from, // Anfangszeitpunkt der Zeitspannedatetime datetime_to=0, // Endzeitpunkt der Zeitspannestring country_code=NULL, // Länder-Codestring 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-IDulong& 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-IDulong& change_id, // letzte Änderungs-ID des Kalenders
MqlCalendarValue& values[], // Array der Wertestring country_code=NULL, // Länder-Codestring currency=NULL // Währung
);
Neue Strukturen
MqlCalendarCountry — Beschreibung der Länder.
struct MqlCalendarCountry
{
ulong id; // Länder-ID in ISO 3166-1string name; // Text-Name des Landesstring code; // Code-Name des Landes in ISO 3166-1 alpha-2string currency; // Währungscode des Landesstring currency_symbol; // Symbol/Zeichen der Landeswährungstring 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öffentlichungulong 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 Ereignissesuint digits; // Dezimalstellen des Ereigniswertesstring source_url; // URL der Quellestring event_code; // Ereignis-Codestring name; // Text-Name des Ereignisses in der Sprache des Terminals
};
MqlCalendarValue — Wertbeschreibung des Ereignisses.
struct MqlCalendarValue
{
ulong id; // Werte-IDulong event_id; // Ereignis-IDdatetime time; // Datum und Zeit des Ereignissesdatetime period; // Zeitperiode, für den das Ereignis veröffentlicht wirdint revision; // Revision des veröffentlichten Indikators in Relation zur Berichtsperiodelong actual_value; // aktueller Ereigniswertlong prev_value; // vorheriger Ereigniswertlong revised_prev_value; // revidierter, vorheriger Ereigniswertlong 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
MQL5: Korrekturen und Verbesserungen der Betriebsgeschwindigkeit in Bezug auf die Historie von Ticks und Balken.
MQL5: Korrekturen und signifikante Verbesserungen der Betriebsgeschwindigkeit im Zusammenhang mit Funktionen zur Änderung der Historie von Ticks und Balken von nutzerdefinierten Handelssymbolen, CustomTicks* und CustomRates*.
MQL5: Neue Funktionen zur Datenkonvertierung. > CharArrayToStruct weist einen Array vom Typ uchar einer POD-Struktur zu.
MQL5: 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
ArrayRemove entfernt die angegebene Anzahl der Elemente aus dem Array ab dem angegebenen Index.
bool ArrayRemove(
void& array[], // Array irgendeines Typsuint start, // Startindex für das Entfernenuint 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[], // Zielarrayconstvoid& src_array[], // Quellarrayuint dst_start, // Index des Zielarrays, ab dem eingefügt werden solluint src_start=0, // Index im Quellarray, ab dem aus dem Quellarray kopiert werden solluint 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 Typsuint start=0, // Startindex der Umkehrunguint count=WHOLE_ARRAY // Anzahl der Elemente
);
MQL5: 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.
MQL5: 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(
conststring symbol, // Symbolnameconst MqlBookInfo& books[] // Array der Beschreibungen der Elemente der Markttiefe (DOM)uint count=WHOLE_ARRAY // Anzahl der zu verwendenden Elemente
);
MQL5: 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.
boolCustomSymbolCreate(
conststring symbol_name, // Name des nutzerdefiniertes Symbolconststring symbol_path="", // Name der Gruppe, in der das Symbol erzeugt wirdconststring 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.
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]
MQL5: 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.
MQL5: Die neuen Eigenschafte SYMBOL_EXIST in der Enumeration ENUM_SYMBOL_INFO_INTEGER bedeutet, dass das Symbol mit diesem Namen gibt.
MQL5: Die Typisierung bei der Verwendung von vorab-deklarierten Template-Funktionen wurde korrigiert.
MQL5: Hinzugefügt wurde einer Neu-Initialisierung der Indikatoren beim Wechsel des Handelskontos.
Tester: 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.
Tester: 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.
Tester: Verbesserte Arbeit mit Indikatoren bei der visuellen Prüfung. Jetzt werden Preisdiagramm und Indikatorlinien synchron gezeichnet, auch bei maximaler Visualisierungsgeschwindigkeit.
Tester: Optimiertes und deutlich beschleunigtes Testen und Optimieren.
Tester: Das Debugging von Indikatoren mit historischen Daten wurde korrigiert. Nun können die Funktionen OnInit und OnDeinit eines Indikators korrekt debuggt werden.
Tester: Schnellerer Zugriff auf historische Daten beim Testen von Expert Advisors mit verschiedenen Währungen.
Tester: Behoben wurde ein gelegentliches Einfrieren des visuellen Testers während des Debuggens mit historischen Daten.
Tester: Schnellerer Start der Optimierungsläufe bei der Bearbeitung eines Aufgabenpakets durch einen Agenten.
Tester: 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.
Tester: 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: 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.
MetaEditor: 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.
Die Aktualisierung wird über das Live-Update-System verfügbar sein.
Das Update des MetaTrader 5 wird am 21. Februar 2019 veröffentlicht. Die neue Version realisiert folgende Änderungen:
- Terminal: Komplett überarbeiteter, integrierter Wirtschaftskalender.

- Terminal: 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.

- Terminal: Ein Lernprogramm wurde implementiert.

- Terminal: 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.

- Terminal: 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.
- Terminal: Behoben wurde ein Berechnungsfehler bei synthetischen Symbolen, aufgrund dessen Daten gelegentlich übersprungen werden konnten.
- Terminal: 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.
- Terminal: Korrigiert wurde die Darstellung der Suchergebnisse auf Bildschirmen mit hoher DPI-Auflösung.
- MQL5: Integrierter Zugriff auf die Daten des Wirtschaftskalenders aus MQL5-Programmen.
- MQL5: Korrekturen und Verbesserungen der Betriebsgeschwindigkeit in Bezug auf die Historie von Ticks und Balken.
- MQL5: Korrekturen und signifikante Verbesserungen der Betriebsgeschwindigkeit im Zusammenhang mit Funktionen zur Änderung der Historie von Ticks und Balken von nutzerdefinierten Handelssymbolen, CustomTicks* und CustomRates*.
- MQL5: Neue Funktionen zur Datenkonvertierung.
- Hinzugefügt wurde die Funktion MathSwap, mit der Reihung der Bytes von ushort, uint und ulong zu ändern.
- MQL5: 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.
- 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
- MQL5: Hinzugefügt wurden neue Funktionen für Zeichenkettenoperationen:
- MQL5: Hinzugefügt wurden neue Funktionen für Arrays:
- MQL5: 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.
- MQL5: 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.
- MQL5: 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.
- 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]
- MQL5: 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.
- MQL5: Die neuen Eigenschafte SYMBOL_EXIST in der Enumeration ENUM_SYMBOL_INFO_INTEGER bedeutet, dass das Symbol mit diesem Namen gibt.
- MQL5: Die Typisierung bei der Verwendung von vorab-deklarierten Template-Funktionen wurde korrigiert.
- MQL5: Hinzugefügt wurde einer Neu-Initialisierung der Indikatoren beim Wechsel des Handelskontos.
- MQL5: Optimierte StringSplit.
- MQL5: Fehler in der Standardbibliothek behoben.
- Tester: 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.
- Tester: 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.
- Tester: Verbesserte Arbeit mit Indikatoren bei der visuellen Prüfung. Jetzt werden Preisdiagramm und Indikatorlinien synchron gezeichnet, auch bei maximaler Visualisierungsgeschwindigkeit.
- Tester: Optimiertes und deutlich beschleunigtes Testen und Optimieren.
- Tester: Das Debugging von Indikatoren mit historischen Daten wurde korrigiert. Nun können die Funktionen OnInit und OnDeinit eines Indikators korrekt debuggt werden.
- Tester: Schnellerer Zugriff auf historische Daten beim Testen von Expert Advisors mit verschiedenen Währungen.
- Tester: Behoben wurde ein gelegentliches Einfrieren des visuellen Testers während des Debuggens mit historischen Daten.
- Tester: Schnellerer Start der Optimierungsläufe bei der Bearbeitung eines Aufgabenpakets durch einen Agenten.
- Tester: 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.
- Tester: 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: 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.
- MetaEditor: 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.
Die Aktualisierung wird über das Live-Update-System verfügbar sein.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.
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.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.Neue Funktionen
CalendarCountryById — Anrufen der Länderbeschreibung auf Grund des Identifikators.
CalendarEventById — Abrufen der Ereignisbeschreibung auf Grund des Identifikators.
CalendarValueById — Abrufen der Wertbeschreibung des Ereignisses auf Grund des Identifikators.
CalendarEventByCountry — Abrufen eines Arrays der verfügbaren Ereignisse eines Landes.
CalendarEventByCurrency — Abrufen eines Arrays der verfügbaren Ereignisse, die eine Währung beeinflussen.
CalendarValueHistoryByEvent — Abrufen eines Arrays mit den Werten einer angegebenen Zeitspanne, nach dem Ereignis-Identifikator.
CalendarValueHistory — Abrufen eines Arrays von Werten der angegebenen Zeitspanne mit allen Ereignissen, gefiltert nach Land und/oder 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.
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.
Neue Strukturen
MqlCalendarCountry — Beschreibung der Länder.
MqlCalendarEvent — Ereignisbeschreibung
MqlCalendarValue — Wertbeschreibung des Ereignisses.
Neue Enumerationen
Neue Fehlernummern
>
CharArrayToStruct weist einen Array vom Typ uchar einer POD-Struktur zu.
StructToCharArray weist einer POD-Struktur einem Array vom Typ uchar zu.
Neue Fehlernummern wurden für die Arbeit mit den Netzwerkfunktionen hinzugefügt:
StringReserve kehrt den Speicherpuffer der angegebenen Größe einer Zeichenkette um.
StringSetLength legt die Anzahl der Buchstaben einer Zeichenkette fest.
ArrayRemove entfernt die angegebene Anzahl der Elemente aus dem Array ab dem angegebenen Index.
ArrayInsert fügt in das Empfängerarray ab dem angegebenen Index eine bestimmte Anzahl von Elementen aus einem Quellarray ein.
ArrayReverse kehrt in einem Array eine angegebene Anzahl von Elemente ab dem angegebenen Index um.
Der Name des Symbols, dessen Eigenschaften für das nutzerdefinierte Symbol kopiert werden sollen, wird im Parameter "symbol_origin" angegeben.
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.