
MQL5 Trading Toolkit (Teil 5): Die Bibliothek History Management EX5 um Positionsfunktionen erweitern
Einführung
Im letzten Artikel haben wir mit der Entwicklung der Hauptfunktionen der Bibliothek HistoryManager EX5 begonnen, die den Kern der Engine bildet, die für das Abrufen, Sortieren und Kategorisieren historischer Daten in verschiedene Typen verantwortlich ist, darunter Aufträge, Deals, schwebende Aufträge und Positionen. Die meisten dieser Funktionen sollten im Hintergrund arbeiten, unbemerkt von den Nutzern der Bibliothek, und waren nicht direkt zugänglich. Die einzigen exportierbaren Funktionen waren die Druckfunktionen, die es den Nutzern ermöglichten, einfache beschreibende Listen von Aufträgen, Deals, schwebenden Aufträgen oder Positionen in das MetaTrader 5-Protokoll auszugeben.
In diesem Artikel werden wir den Quellcode von HistoryManager.mq5 erweitern, indem wir zusätzliche, für den Nutzer zugängliche Funktionen einführen, die auf den grundlegenden Funktionen aufbauen, die wir im vorherigen Artikel erstellt haben. Diese neuen Funktionen ermöglichen den Bibliotheksnutzern eine mühelose Abfrage von Handelsdaten. Die Nutzer werden in der Lage sein, wichtige Details abzurufen, wie z. B. die Handelsdauer in Sekunden, die Eröffnungs- und Schließtickets der letzten geschlossenen Position, ob die Position durch einen schwebenden Auftrag oder einen direkten Markteintritt initiiert wurde, Pip-basierte Kennzahlen wie Gewinn, Stop-Loss und Take-Profit sowie den Nettogewinn nach Berücksichtigung von Kosten wie Provisionen und Swaps. All dies ermöglicht es Ihnen, die EX5-Bibliothek in Ihre MQL5-Projekte zu importieren und die Historie verschiedener Positionen mit minimalem Aufwand durch einfache Funktionsaufrufe abfragen zu können.
Um zu beginnen, öffnen wir die Datei HistoryManager.mq5 aus dem vorherigen Artikel und beginnen mit der Erstellung der Funktion GetTotalDataInfoSize(). Die ursprüngliche Quelldatei HistoryManager.mq5 ist am Ende des vorherigen Artikels angehängt oder kann auch am Ende dieses Artikels gefunden werden (HistoryManager_Teil1.mq5). Wir werden weiterhin neuen Code unterhalb der Funktion PrintPendingOrdersHistory() hinzufügen, wo wir zuvor aufgehört haben.
Funktion zum Abrufen der Gesamtgröße von Dateninformationen
Die Funktion GetTotalDataInfoSize() dient zum Abrufen und Zurückgeben der Größe eines angegebenen historischen Datenarrays. Diese Funktion arbeitet mit der Funktion FetchHistoryByCriteria() zusammen und stellt sicher, dass die Menge der in einer bestimmten Datenstruktur verfügbaren Daten dynamisch ermittelt werden kann. Seine Hauptaufgabe besteht darin, den Datensatz zu identifizieren, an dem wir interessiert sind - Deals, Aufträge, Positionen oder schwebende Aufträge - und die Gesamtzahl der Elemente in diesem Datensatz zurückzugeben.
Die Funktion GetTotalDataInfoSize() trägt zur Rationalisierung von Vorgängen bei, bei denen ein dynamischer Zugriff auf verschiedene historische Datensätze erforderlich ist. Durch die Übergabe der entsprechenden Kriterien als Argument wird die Größe der betreffenden Datenstruktur effizient abgefragt.
Wir beginnen mit der Definition der Funktionssignatur. Da diese Funktion eine ganze Zahl zurückgibt, die die Größe eines angegebenen Datenarrays darstellt, verwendet sie zur Rückgabe den Typ int. Der Eingabeparameter bzw. das Argument ist eine Ganzzahl ohne Vorzeichen (uint), die es uns ermöglicht, vordefinierte Konstanten zu übergeben, um den Typ der abgefragten Daten anzugeben.
int GetTotalDataInfoSize(uint dataToGet) { //-- Our function's code will go here }
Als Nächstes deklarieren wir eine lokale Variable, totalDataInfo, die die Größe des angeforderten Datensatzes speichert.
int totalDataInfo = 0;
Wir werden eine switch-Anweisung verwenden, um den Wert des Parameters dataToGet zu überprüfen. Abhängig von seinem Wert wird der entsprechende Datensatz identifiziert und die Funktion ArraySize() verwendet, um seine Größe zu bestimmen.
- Historische Daten der Deals: Wenn dataToGet gleich GET_DEALS_HISTORY_DATA ist, berechnen wir die Größe des Arrays dealInfo und weisen das totalDataInfo zu.
- Daten zur Orderhistorie: Wenn dataToGet gleich GET_ORDERS_HISTORY_DATA ist, berechnen wir die Größe des Arrays orderInfo und weisen das totalDataInfo zu.
- Historische Daten der Positionen: Für GET_POSITIONS_HISTORY_DATA berechnen wir die Größe des Arrays positionInfo und weisen das totalDataInfo zu.
- Historische Daten der schwebenden Aufträge: Wenn dataToGet mit GET_PENDING_ORDERS_HISTORY_DATA übereinstimmt, wird die Größe des Arrays pendingOrderInfo bestimmt und totalDataInfo zugewiesen.
- Standardfall: Wenn keine der vordefinierten Konstanten übereinstimmt, wird totalDataInfo als Ersatz auf 0 gesetzt.
Schließlich geben wir den in totalDataInfo gespeicherten Wert zurück, nachdem wir den switch verlassen haben. Dadurch wird sichergestellt, dass die Funktion die richtige Größe für den angegebenen Datentyp ausgibt oder 0, wenn kein gültiger Datentyp angegeben wird.
switch(dataToGet) { case GET_DEALS_HISTORY_DATA: totalDataInfo = ArraySize(dealInfo); break; case GET_ORDERS_HISTORY_DATA: totalDataInfo = ArraySize(orderInfo); break; case GET_POSITIONS_HISTORY_DATA: totalDataInfo = ArraySize(positionInfo); break; case GET_PENDING_ORDERS_HISTORY_DATA: totalDataInfo = ArraySize(pendingOrderInfo); break; default: totalDataInfo = 0; break; } return(totalDataInfo);
Nachstehend finden Sie die vollständige Implementierung der Funktion GetTotalDataInfoSize() mit allen Codesegmenten in der richtigen Reihenfolge.
int GetTotalDataInfoSize(uint dataToGet) { int totalDataInfo = 0; //- Saves the total elements of the specified history found switch(dataToGet) { case GET_DEALS_HISTORY_DATA: //- Check if we have any available deals history data totalDataInfo = ArraySize(dealInfo); //- Save the total deals found break; case GET_ORDERS_HISTORY_DATA: //- Check if we have any available orders history data totalDataInfo = ArraySize(orderInfo); //- Save the total orders found break; case GET_POSITIONS_HISTORY_DATA: //- Check if we have any available positions history data totalDataInfo = ArraySize(positionInfo); //- Save the total positions found break; case GET_PENDING_ORDERS_HISTORY_DATA: //- Check if we have any available pending orders history data totalDataInfo = ArraySize(pendingOrderInfo); //- Save the total pending orders found break; default: //-- Unknown entry totalDataInfo = 0; break; } return(totalDataInfo); }
Historie nach Kriterien abrufen Funktion
Bei der Abfrage der letzten Daten der Historie mit MQL5, wie z. B. der Abfrage der letzten fünf geschlossenen Kaufpositionen für ein bestimmtes Symbol, ist es nicht notwendig, den gesamten Kontohistorie vom Server abzufragen, da dies wertvolle Ressourcen verschwenden würde. Stattdessen sollten Sie einen optimalen Ansatz wählen, indem Sie zunächst die jüngste Handelshistorie abfragen, zum Beispiel innerhalb des aktuellen Tages. Wenn die gesuchten Daten innerhalb dieses Zeitraums nicht verfügbar sind, können Sie den Zeitraum schrittweise erweitern, bis Sie die gewünschten Daten finden. Diese Methode gewährleistet Effizienz und minimiert die Ressourcennutzung und bietet die beste Leistung beim Abrufen der erforderlichen historischen Daten.
Die Funktion FetchHistoryByCriteria() ruft systematisch historische Daten auf der Grundlage bestimmter Kriterien ab, wobei sie mit den letzten 24 Stunden beginnt und den Abrufzeitraum bei Bedarf erweitert. Es beginnt mit der Überprüfung der jüngsten Daten, und wenn keine relevanten Daten gefunden werden, werden nach und nach ältere Daten durchsucht - zunächst wochenweise, dann bis zu einem Jahr. Wenn nach dem Scannen des gesamten Jahres keine Daten gefunden werden, wird versucht, die gesamten verfügbare Kontohistorie abzurufen.
Die Funktion FetchHistoryByCriteria() dient als Kern zum Abrufen von Handelsdaten aus verschiedenen Zeiträumen und ermöglicht es der EX5-Bibliothek, die Historie zu scannen und abzurufen, bis die erforderlichen Daten gefunden sind. Wenn keine relevanten Daten gefunden werden, wird sichergestellt, dass die Bibliothek trotzdem versuchen kann, ältere oder vollständige Kontoverläufe abzurufen.
Beginnen wir mit der Definition der Funktionssignatur. Da diese Funktion intern von den Kernmodulen der Bibliothek verwendet wird, ist sie nicht exportierbar.
bool FetchHistoryByCriteria(uint dataToGet) { //-- Our function's code will go here }
Wir werden die Intervallvariable definieren, die den Zeitraum des Abrufs der Geschichte moduliert. Zu Beginn wird dieser Wert auf 1 gesetzt, um mit einem 24-Stunden-Zeitbereich zu beginnen.
int interval = 1;
Wir berechnen die Zeitspanne von vor 24 Stunden bis zur aktuellen Zeit.
datetime fromDateTime = TimeCurrent() - 1 * (PeriodSeconds(PERIOD_D1) * interval); datetime toDateTime = TimeCurrent();
Als Nächstes werden wir die Funktion GetHistoryData() verwenden, um die Daten innerhalb des definierten Zeitraums abzurufen.
GetHistoryData(fromDateTime, toDateTime, dataToGet);
Wenn in den letzten 24 Stunden keine Daten gefunden werden, wird eine Schleife gestartet, in der das Intervall jeweils um eine Woche erhöht wird. Wir werden diesen Prozess fortsetzen, bis wir ein ganzes Jahr (53 Wochen) gescannt haben. Bei jeder Iteration wird der Zeitbereich aktualisiert, um die zusätzliche Woche zu berücksichtigen.
while(GetTotalDataInfoSize(dataToGet) <= 0) { interval++; fromDateTime = TimeCurrent() - 1 * (PeriodSeconds(PERIOD_W1) * interval); toDateTime = TimeCurrent(); GetHistoryData(fromDateTime, toDateTime, dataToGet); if(interval > 53) { break; } }
Wenn während der Suche über einem Jahr immer noch keine Daten gefunden wurden, setzen wir den Zeitbereich zurück, um die gesamte Kontohistorie abzudecken (von der Epoche bis zur aktuellen Zeit). Auf diese Weise wird sichergestellt, dass die gesamte verfügbare Historie geprüft wird.
fromDateTime = 0; toDateTime = TimeCurrent(); GetHistoryData(fromDateTime, toDateTime, dataToGet);
Abschließend wird geprüft, ob die Historie erfolgreich abgerufen wurde. Wenn nach dem Durchsuchen der gesamten Kontohistorie keine Daten gefunden werden, wird der Fehler protokolliert und false zurückgegeben. Wenn Daten gefunden werden, wird true zurückgegeben, um den Erfolg anzuzeigen.
if(GetTotalDataInfoSize(dataToGet) <= 0) { return(false); } else { return(true); }
Hier ist die vollständige Implementierung der Funktion FetchHistoryByCriteria() mit allen enthaltenen Codesegmenten.
bool FetchHistoryByCriteria(uint dataToGet) { int interval = 1; //- Modulates the history period //- Save the history period for the last 24 hours datetime fromDateTime = TimeCurrent() - 1 * (PeriodSeconds(PERIOD_D1) * interval); datetime toDateTime = TimeCurrent(); //- Get the specified history GetHistoryData(fromDateTime, toDateTime, dataToGet); //- If we have no history in the last 24 hours we need to keep increasing the retrieval //- period by one week untill we scan a full year (53 weeks) while(GetTotalDataInfoSize(dataToGet) <= 0) { interval++; fromDateTime = TimeCurrent() - 1 * (PeriodSeconds(PERIOD_W1) * interval); toDateTime = TimeCurrent(); GetHistoryData(fromDateTime, toDateTime, dataToGet); //- If no history is found after a one year scanning period, we exit the while loop if(interval > 53) { break; } } //- If we have not found any trade history in the last year, we scan and cache the intire account history fromDateTime = 0; //-- 1970 (Epoch) toDateTime = TimeCurrent(); //-- Time now GetHistoryData(fromDateTime, toDateTime, dataToGet); //- If we still havent retrieved any history in the account, we log this info by //- printing it and exit the function by returning false if(GetTotalDataInfoSize(dataToGet) <= 0) { return(false); //- Specified history not found, exit and return false } else { return(true); //- Specified history found, exit and return true } }
Funktion zum Abrufen der Daten der letzten geschlossenen Position
Die Funktion GetLastClosedPositionData() ist für die Abfrage der Eigenschaften der letzten geschlossenen Position und die Speicherung dieser Daten in der angegebenen Referenz lastClosedPositionInfo zuständig. Diese Funktion stützt sich auf die Funktion FetchHistoryByCriteria(), um die relevanten Daten der Handelshistorie abzurufen und so sicherzustellen, dass sie Zugang zu den erforderlichen Positionsinformationen hat. Wenn keine geschlossenen Positionen gefunden werden, gibt die Funktion eine Fehlermeldung aus und gibt false zurück. Bei Erfolg werden die Daten abgerufen und true zurückgegeben.
Beginnen wir mit der Definition der Funktionssignatur. Da diese Funktion für den externen Gebrauch bestimmt ist, wird sie exportiert und kann von anderen MQL5-Quelldateien importiert werden.
bool GetLastClosedPositionData(PositionData &lastClosedPositionInfo) export { //-- Our function's code will go here }
Wir werden zunächst versuchen, die verfügbaren Daten der Positionshistorie durch Aufruf der Funktion FetchHistoryByCriteria() mit dem Argument GET_POSITIONS_HISTORY_DATA abzurufen. Dieser Funktionsaufruf durchsucht den verfügbaren Handelshistorie, um positionsbezogene Daten abzurufen.
if(!FetchHistoryByCriteria(GET_POSITIONS_HISTORY_DATA)) { Print(__FUNCTION__, ": No trading history available. Last closed position can't be retrieved."); return(false); }
Wenn keine Daten der Positionshistorie verfügbar sind (d. h. die Funktion FetchHistoryByCriteria() gibt false zurück), wird mit der Funktion Print() eine Fehlermeldung ausgegeben, die bei der Fehlersuche hilft, indem sie nützliche Informationen über den Fehler liefert. Die Funktion gibt dann false zurück, was bedeutet, dass sie die letzte geschlossene Position nicht abrufen konnte.
Wenn die Daten des Positionshistorie erfolgreich abgerufen werden, speichern wir die Informationen für die letzte geschlossene Position in der Variablen lastClosedPositionInfo. Dies geschieht durch Zuweisung des ersten Elements im Array positionInfo an lastClosedPositionInfo, da dieses Array die Historie aller Positionen enthält, wobei die zuletzt geschlossene Position am Anfang des Arrays steht. Zum Abschluss der Funktion wird true zurückgegeben, um anzuzeigen, dass die Daten der letzten geschlossenen Position erfolgreich abgerufen und in der angegebenen Referenzvariablen gespeichert wurden.
lastClosedPositionInfo = positionInfo[0]; return(true);
Hier ist die vollständige Implementierung der Funktion GetLastClosedPositionData() mit allen enthaltenen Codesegmenten.
bool GetLastClosedPositionData(PositionData &lastClosedPositionInfo) export { if(!FetchHistoryByCriteria(GET_POSITIONS_HISTORY_DATA)) { Print(__FUNCTION__, ": No trading history available. Last closed position can't be retrieved."); return(false); } //-- Save the last closed position data in the referenced lastClosedPositionInfo variable lastClosedPositionInfo = positionInfo[0]; return(true); }
Die Funktion LastClosedPositionType
Die Funktion LastClosedPositionType() ist dafür verantwortlich, den Typ der zuletzt geschlossenen Position im Handelskonto zu ermitteln und in der referenzierten Variablen lastClosedPositionType zu speichern. Diese Funktion ist eine logische Erweiterung der Funktion GetLastClosedPositionData() und nutzt deren Fähigkeit, die letzte geschlossene Position abzurufen und ihren spezifischen Typ zu extrahieren.
Die Funktion LastClosedPositionType() wird für Szenarien benötigt, in denen Sie den Typ des letzten Handels analysieren müssen, z. B. zur Unterscheidung zwischen Kauf- und Verkaufspositionen oder zur Identifizierung komplexerer Strategien auf der Grundlage des Positionstyps.
Beginnen wir mit der Definition der Funktionssignatur. Da diese Funktion für MQL5-Dateien bestimmt ist, die die EX5-Bibliothek importieren , werden wir sie als exportierbar kennzeichnen. Dadurch wird sichergestellt, dass die Funktion von außen zugänglich ist, was sowohl die Modularität als auch die Nutzerfreundlichkeit verbessert.
bool LastClosedPositionType(ENUM_POSITION_TYPE &lastClosedPositionType) export { //-- Our function's code will go here }
Wir beginnen mit der Deklaration einer lokalen Variablen lastClosedPositionInfo vom Typ PositionData. Diese Variable speichert vorübergehend die Details der letzten geschlossenen Position, die wir mit der Funktion GetLastClosedPositionData() extrahieren werden.
PositionData lastClosedPositionInfo;
Wir rufen die Funktion GetLastClosedPositionData() auf und übergeben lastClosedPositionInfo als Argument. Wenn die Funktion true zurückgibt, bedeutet dies, dass die Daten für die letzte geschlossene Position erfolgreich abgerufen wurden.
if(GetLastClosedPositionData(lastClosedPositionInfo)) { //- Process the retrieved data }
Wenn GetLastClosedPositionData() fehlschlägt (es wird false zurückgegeben), wird diese Funktion sofort beendet und gibt false zurück, um anzuzeigen, dass der Vorgang nicht abgeschlossen werden konnte.
Innerhalb des if-Blocks extrahieren wir die Eigenschaft type aus lastClosedPositionInfo und weisen sie der referenzierten Variablen lastClosedPositionType zu. Dadurch wird sichergestellt, dass der aufrufende Code Zugriff auf den Typ der zuletzt geschlossenen Position hat. Nach erfolgreicher Speicherung des Typs geben wir true zurück, um anzuzeigen, dass der Vorgang erfolgreich war, und beenden die Funktion.
lastClosedPositionType = lastClosedPositionInfo.type; return(true);
Wenn die Abfrage der letzten geschlossenen Position fehlschlägt, überspringt die Funktion den if-Block und gibt direkt false zurück. Dies bedeutet, dass die Positionsart nicht ermittelt werden konnte.
return(false);
Hier ist die vollständige Implementierung der Funktion LastClosedPositionType() mit allen Codesegmenten in der richtigen Reihenfolge.
bool LastClosedPositionType(ENUM_POSITION_TYPE &lastClosedPositionType) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionType = lastClosedPositionInfo.type; return(true); } return(false); }
Die Funktion LastClosedPositionVolume
Die Funktion LastClosedPositionVolume() ist für die Abfrage des Volumens der zuletzt geschlossenen Position in der Handelshistorie zuständig. Es speichert dieses Volumen in der referenzierten Variablen lastClosedPositionVolume. Wenn die Funktion LastClosedPositionVolume() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionVolume mit dem Volumenwert und bestätigt den erfolgreichen Vorgang durch Rückgabe von true. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionVolume unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionVolume(double &lastClosedPositionVolume) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionVolume = lastClosedPositionInfo.volume; return(true); } return(false); }
Die Funktion LastClosedPositionSymbol
Die Funktion LastClosedPositionSymbol() ist für die Abfrage des Symbols der zuletzt geschlossenen Position in der Handelshistorie zuständig. Es speichert dieses Symbol in der referenzierten Variablen lastClosedPositionSymbol. Wenn die Funktion LastClosedPositionSymbol() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionSymbol mit dem Symbolwert und bestätigt den erfolgreichen Vorgang durch Rückgabe von true. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionSymbol unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionSymbol(string &lastClosedPositionSymbol) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionSymbol = lastClosedPositionInfo.symbol; return(true); } return(false); }
Die Funktion LastClosedPositionTicket
Die Funktion LastClosedPositionTicket() ist für die Abfrage der Ticketnummer der zuletzt geschlossenen Position in der Handelshistorie zuständig. Sie speichert diese Ticketnummer in der referenzierten Variablen lastClosedPositionTicket. Wenn die Funktion LastClosedPositionTicket() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionTicket mit der Ticketnummer und bestätigt den erfolgreichen Vorgang durch Rückgabe von true. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionTicket unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionTicket(ulong &lastClosedPositionTicket) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionTicket = lastClosedPositionInfo.ticket; return(true); } return(false); }
Die Funktion LastClosedPositionProfit
Die Funktion LastClosedPositionProfit() ist dafür zuständig, den Gewinn der zuletzt geschlossenen Position in der Handelshistorie abzurufen. Sie speichert diesen Gewinn in der referenzierten Variablen lastClosedPositionProfit. Wenn die Funktion LastClosedPositionProfit() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionProfit mit dem Gewinnwert und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionProfit unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionProfit(double &lastClosedPositionProfit) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionProfit = lastClosedPositionInfo.profit; return(true); } return(false); }
Die Funktion LastClosedPositionNetProfit
Die Funktion LastClosedPositionNetProfit() ist für die Abfrage des Nettogewinns der zuletzt geschlossenen Position in der Handelshistorie zuständig. Der Nettogewinn der Position ist der endgültige Wert, nachdem alle Kosten wie Provisionen und Swaps vom Positionsgewinn abgezogen worden sind. Sie speichert diesen Nettogewinn in der referenzierten Variablen lastClosedPositionNetProfit. Wenn die Funktion LastClosedPositionNetProfit() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionNetProfit mit dem Wert des Nettogewinns und bestätigt, dass die Operation erfolgreich war, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionNetProfit unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionNetProfit(double &lastClosedPositionNetProfit) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionNetProfit = lastClosedPositionInfo.netProfit; return(true); } return(false); }
Die Funktion LastClosedPositionPipProfit
Die Funktion LastClosedPositionPipProfit() ist dafür zuständig, den Gewinn in Pips der zuletzt geschlossenen Position in der Handelshistorie abzurufen. Sie speichert diesen Gewinn in Pips in der referenzierten Variablen lastClosedPositionPipProfit. Wenn die Funktion LastClosedPositionPipProfit() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionPipProfit mit dem Wert des Gewinns in Pips und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionPipProfit unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionPipProfit(int &lastClosedPositionPipProfit) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionPipProfit = lastClosedPositionInfo.pipProfit; return(true); } return(false); }
Die Funktion LastClosedPositionClosePrice
Die Funktion LastClosedPositionClosePrice() ist dafür zuständig, den Schlusskurs der zuletzt geschlossenen Position in der Handelshistorie abzurufen. Sie speichert diesen Schlusskurs in der referenzierten Variablen lastClosedPositionClosePrice. Wenn die Funktion LastClosedPositionClosePrice() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionClosePrice mit dem Wert des Schlusskurses und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionClosePrice unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionClosePrice(double &lastClosedPositionClosePrice) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionClosePrice = lastClosedPositionInfo.closePrice; return(true); } return(false); }
Die Funktion LastClosedPositionOpenPrice
Die Funktion LastClosedPositionOpenPrice() ist dafür zuständig, den Eröffnungskurs der zuletzt geschlossenen Position in der Handelshistorie abzurufen. Sie speichert diesen Eröffnungskurs in der referenzierten Variablen lastClosedPositionOpenPrice. Wenn die Funktion LastClosedPositionOpenPrice() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionOpenPrice mit dem Wert des Eröffnungskurses und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionOpenPrice unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionOpenPrice(double &lastClosedPositionOpenPrice) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionOpenPrice = lastClosedPositionInfo.openPrice; return(true); } return(false); }
Die Funktion LastClosedPositionSlPrice
Die Funktion LastClosedPositionSlPrice() ist für die Abfrage des Kurses von Stop-Loss der zuletzt geschlossenen Position in der Handelshistorie zuständig. Sie speichert diesen Stop-Loss-Kurs in der referenzierten Variablen lastClosedPositionSlPrice. Wenn die Funktion LastClosedPositionSlPrice() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionSlPrice mit dem Wert des Stop-Loss-Kurses und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionSlPrice unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionSlPrice(double &lastClosedPositionSlPrice) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionSlPrice = lastClosedPositionInfo.slPrice; return(true); } return(false); }
Die Funktion LastClosedPositionTpPrice
Die Funktion LastClosedPositionTpPrice() ist dafür zuständig, den Kurs des Take-Profit der zuletzt geschlossenen Position in der Handelshistorie abzurufen. Sie speichert diesen Take-Profit-Preis in der referenzierten Variablen lastClosedPositionTpPrice. Wenn die Funktion LastClosedPositionTpPrice() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionTpPrice mit dem Wert von Take-Profit und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionTpPrice unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionTpPrice(double &lastClosedPositionTpPrice) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionTpPrice = lastClosedPositionInfo.tpPrice; return(true); } return(false); }
Die Funktion LastClosedPositionSlPips
Die Funktion LastClosedPositionSlPips() ist dafür zuständig, den Stop-Loss-Wert der zuletzt geschlossenen Position in Punkten (Pips) zu ermitteln. Sie speichert diesen Stop-Loss-Wert in der referenzierten Variablen lastClosedPositionSlPips. Wenn die Funktion LastClosedPositionSlPips() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionSlPips mit dem Wert von Stop-Loss in Pips und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionSlPips unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionSlPips(int &lastClosedPositionSlPips) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionSlPips = lastClosedPositionInfo.slPips; return(true); } return(false); }
Die Funktion LastClosedPositionTpPips()
Die Funktion LastClosedPositionTpPips() ist dafür zuständig, den Wert des Take-Profit der zuletzt geschlossenen Position in Punkten (Pips) zu ermitteln. Sie speichert diesen Take-Profit-Wert in der referenzierten Variablen lastClosedPositionTpPips. Wenn die Funktion LastClosedPositionTpPips() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionTpPips mit dem Take-Profit-Wert in Pips und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionTpPips unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionTpPips(int &lastClosedPositionTpPips) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionTpPips = lastClosedPositionInfo.tpPips; return(true); } return(false); }
Die Funktion LastClosedPositionOpenTime
Die Funktion LastClosedPositionOpenTime() ist für die Abfrage der Öffnungszeit der zuletzt geschlossenen Position zuständig. Sie speichert diese Öffnungszeit in der referenzierten Variablen lastClosedPositionOpenTime. Wenn die Funktion LastClosedPositionOpenTime() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionOpenTime mit dem Wert für die offene Zeit und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionOpenTime unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionOpenTime(datetime &lastClosedPositionOpenTime) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionOpenTime = lastClosedPositionInfo.openTime; return(true); } return(false); }
Die Funktion LastClosedPositionCloseTime
Die Funktion LastClosedPositionCloseTime() ist für die Abfrage der Schließzeit der zuletzt geschlossenen Position. Sie speichert diese Schließzeit in der referenzierten Variablen lastClosedPositionCloseTime. Wenn die Funktion LastClosedPositionCloseTime() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionCloseTime mit dem Wert der Schließzeit und bestätigt den erfolgreichen Vorgang durch die Rückgabe von true. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionCloseTime unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionCloseTime(datetime &lastClosedPositionCloseTime) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionCloseTime = lastClosedPositionInfo.closeTime; return(true); } return(false); }
Die Funktion LastClosedPositionSwap()
Die Funktion LastClosedPositionSwap() ist dafür zuständig, den Swap-Wert der zuletzt geschlossenen Position abzurufen. Sie speichert diesen Swap-Wert in der referenzierten Variablen lastClosedPositionSwap. Wenn die Funktion LastClosedPositionSwap() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionSwap mit dem Swap-Wert und bestätigt den erfolgreichen Vorgang durch Rückgabe von true. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionSwap unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionSwap(double &lastClosedPositionSwap) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionSwap = lastClosedPositionInfo.swap; return(true); } return(false); }
Die Funktion LastClosedPositionCommission
Die Funktion LastClosedPositionCommission() ist dafür zuständig, den Provisionswert der zuletzt geschlossenen Position abzurufen. Sie speichert diesen Provisionswert in der referenzierten Variablen lastClosedPositionCommission. Wenn die Funktion LastClosedPositionCommission() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionCommission mit dem Wert für die Kommission und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionCommission unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionCommission(double &lastClosedPositionCommission) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionCommission = lastClosedPositionInfo.commission; return(true); } return(false); }
Die Funktion LastClosedPositionInitiatingOrderType
Die Funktion LastClosedPositionInitiatingOrderType() ist für die Abfrage der auslösenden Auftragsart der zuletzt geschlossenen Position zuständig. So können wir feststellen, ob die Position durch einen schwebenden Auftrag (Buy Stop, Buy Limit, Sell Stop, Sell Limit, Buy Stop Limit oder Sell Stop Limit) oder durch einen direkten Markteintrittsauftrag eingeleitet wurde. Sie speichert diesen auslösenden Auftragstyp in der referenzierten Variablen lastClosedPositionInitiatingOrderType. Wenn die Funktion LastClosedPositionInitiatingOrderType() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionInitiatingOrderType mit dem Wert der auslösenden Auftragsart und bestätigt den erfolgreichen Vorgang, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionInitiatingOrderType unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionInitiatingOrderType(ENUM_ORDER_TYPE &lastClosedPositionInitiatingOrderType) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionInitiatingOrderType = lastClosedPositionInfo.initiatingOrderType; return(true); } return(false); }
Die Funktion LastClosedPositionId
Die Funktion LastClosedPositionId() ist für die Abfrage der ID der zuletzt geschlossenen Position zuständig. Sie speichert diese Positions-ID in der referenzierten Variablen lastClosedPositionId. Wenn die Funktion LastClosedPositionId() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionId mit dem Positions-ID-Wert und bestätigt den erfolgreichen Vorgang durch Rückgabe von true. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionId unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionId(ulong &lastClosedPositionId) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionId = lastClosedPositionInfo.positionId; return(true); } return(false); }
Letzte geschlossene Position, initiiert durch die Funktion Pending Order
Die Funktion LastClosedPositionInitiatedByPendingOrder() prüft, ob die zuletzt geschlossene Position durch einen schwebenden Auftrag ausgelöst wurde. Sie speichert diese Information in der referenzierten Variablen lastClosedPositionInitiatedByPendingOrder. Wenn die Funktion LastClosedPositionInitiatedByPendingOrder() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionInitiatedByPendingOrder mit dem Ergebnis und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionInitiatedByPendingOrder unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionInitiatedByPendingOrder(bool &lastClosedPositionInitiatedByPendingOrder) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionInitiatedByPendingOrder = lastClosedPositionInfo.initiatedByPendingOrder; return(true); } return(false); }
Letzte geschlossene Position Eröffnungsauftrag Ticketfunktion
Die Funktion LastClosedPositionOpeningOrderTicket() ist für die Abfrage der Ticketnummer des Eröffnungsauftrags für die zuletzt geschlossene Position zuständig. Sie speichert diese Ticketnummer in der referenzierten Variablen lastClosedPositionOpeningOrderTicket. Wenn die Funktion LastClosedPositionOpeningOrderTicket() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionOpeningOrderTicket mit der Ticketnummer und bestätigt den erfolgreichen Vorgang, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionOpeningOrderTicket unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionOpeningOrderTicket(ulong &lastClosedPositionOpeningOrderTicket) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionOpeningOrderTicket = lastClosedPositionInfo.openingOrderTicket; return(true); } return(false); }
Letzte geschlossene Position Eröffnungsgeschäft Ticketfunktion
Die Funktion LastClosedPositionOpeningDealTicket() ist für die Abfrage der Ticketnummer des Eröffnungsgeschäfts für die zuletzt geschlossene Position zuständig. Sie speichert die Nummer des Verkaufstickets in der referenzierten Variablen lastClosedPositionOpeningDealTicket. Wenn die Funktion LastClosedPositionOpeningDealTicket() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionOpeningDealTicket mit der Nummer des Deal-Tickets und bestätigt den erfolgreichen Vorgang, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionOpeningDealTicket unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionOpeningDealTicket(ulong &lastClosedPositionOpeningDealTicket) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionOpeningDealTicket = lastClosedPositionInfo.openingDealTicket; return(true); } return(false); }
Die Funktion LastClosedPositionClosingDealTicket
Die Funktion LastClosedPositionClosingDealTicket() ist für die Abfrage der Ticketnummer des schließenden Deals für die zuletzt geschlossene Position zuständig. Sie speichert die Nummer des Verkaufstickets in der referenzierten Variablen lastClosedPositionClosingDealTicket. Wenn die Funktion LastClosedPositionClosingDealTicket() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionClosingDealTicket mit der Nummer des Deal-Tickets und bestätigt den erfolgreichen Vorgang, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionClosingDealTicket unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionClosingDealTicket(ulong &lastClosedPositionClosingDealTicket) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionClosingDealTicket = lastClosedPositionInfo.closingDealTicket; return(true); } return(false); }
Letzte geschlossene Position Magische Funktion
Die Funktion LastClosedPositionMagic() ist für die Abfrage der magischen Zahl der zuletzt geschlossenen Position zuständig. Sie speichert diese magische Zahl in der referenzierten Variablen lastClosedPositionMagic. Wenn die Funktion LastClosedPositionMagic() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionMagic mit der magischen Zahl und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionMagic unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionMagic(ulong &lastClosedPositionMagic) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionMagic = lastClosedPositionInfo.magic; return(true); } return(false); }
Letzte geschlossene Position Kommentar Funktion
Die Funktion LastClosedPositionComment() ist für die Abfrage des mit der zuletzt geschlossenen Position verbundenen Kommentars zuständig. Sie speichert diesen Kommentar in der referenzierten Variablen lastClosedPositionComment. Wenn die Funktion LastClosedPositionComment() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionComment mit dem Kommentar und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionComment unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionComment(string &lastClosedPositionComment) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionComment = lastClosedPositionInfo.comment; return(true); } return(false); }
Letzte geschlossene Position Dauer Funktion
Die Funktion LastClosedPositionDuration() ist für die Abfrage der Dauer der zuletzt geschlossenen Position in Sekunden zuständig. Sie speichert diese Dauer in der referenzierten Variablen lastClosedPositionDuration. Wenn die Funktion LastClosedPositionDuration() die Daten für die letzte geschlossene Position erfolgreich abruft, aktualisiert sie die Variable lastClosedPositionDuration mit der Dauer und bestätigt den Erfolg der Operation, indem sie true zurückgibt. Gelingt es nicht, die Daten abzurufen, bleibt die Variable lastClosedPositionDuration unverändert, und die Funktion zeigt den Fehler an, indem sie false zurückgibt.
bool LastClosedPositionDuration(long &lastClosedPositionDuration) export { PositionData lastClosedPositionInfo; if(GetLastClosedPositionData(lastClosedPositionInfo)) { lastClosedPositionDuration = lastClosedPositionInfo.duration; return(true); } return(false); }
Schlussfolgerung
In diesem Artikel haben Sie gelernt, wie kleinere, fokussierte Hilfsfunktionen, wie die, die wir entwickelt haben, um spezifische Eigenschaften der letzten geschlossenen Positionen abzurufen, zusammenarbeiten können, um gezielte Aufgaben zu erfüllen und gleichzeitig die Übersichtlichkeit und Modularität innerhalb der EX5-Bibliothekscodebasis zu erhalten. Durch die Isolierung der Logik für die Extraktion verschiedener Eigenschaften von Positionen rationalisieren diese Funktionen den Prozess der Erfassung spezifischer Daten klar und effizient.
Um diesen Artikel kurz und bündig zu halten, werden wir die Erstellung von Bibliotheksfunktionen, die die verschiedenen Eigenschaften der zuletzt ausgeführten und stornierten schwebenden Aufträge abrufen, auf den nächsten Artikel verschieben. In diesem Artikel werden wir diese Funktionen im Detail untersuchen und sicherstellen, dass sie gut in den bestehenden Rahmen integriert sind. Anschließend werden wir eine Reihe von analytischen Berichtsfunktionen entwickeln, die es den Nutzern ermöglichen, aufschlussreiche Zusammenfassungen und detaillierte Berichte auf der Grundlage der historischen Handelsdaten zu erstellen. Dieser schrittweise Ansatz sorgt für Klarheit und ermöglicht es uns, jedes Thema umfassend zu behandeln, ohne Sie mit so vielen Informationen auf einmal zu überfordern.
Am Ende dieses Artikels finden Sie die neueste Version der Datei HistoryManager.mq5 Bibliothek, die alle Funktionen enthält, die in diesem Artikel erstellt wurden, sowie die Funktionen, die im vorherigen Artikel vorgestellt wurden. Vielen Dank, dass Sie mir gefolgt sind, und ich freue mich darauf, Sie im nächsten Artikel wieder zu treffen.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/16681





- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.