English 日本語
preview
MQL5 Handels-Toolkit (Teil 6): Erweitern der Bibliothek der History Management EX5 mit den Funktionen für den zuletzt ausgelösten, schwebenden Auftrag

MQL5 Handels-Toolkit (Teil 6): Erweitern der Bibliothek der History Management EX5 mit den Funktionen für den zuletzt ausgelösten, schwebenden Auftrag

MetaTrader 5Beispiele | 29 Mai 2025, 08:09
68 0
Wanateki Solutions LTD
Kelvin Muturi Muigua

Einführung

Der Zugriff auf die Details des zuletzt ausgelösten, schwebenden Auftrags ist besonders wertvoll in Szenarien, in denen Ihre Handelslogik von der Art des zuletzt ausgelösten, schwebenden Auftrags abhängt. Sie können diese Daten beispielsweise nutzen, um Ihre Handelsstrategien zu verfeinern, je nachdem, ob der zuletzt ausgelöste Auftrag ein Buy Limit, Sell Stop, Buy Stop, Sell Limit, Buy Stop Limit oder Sell Stop Limit war. Die Kenntnis der Auftragsart kann Aufschluss über die Marktbedingungen geben und Anpassungen Ihres Ansatzes ermöglichen, z. B. die Anpassung von Einstiegs- oder Ausstiegspunkten.

Diese Informationen sind auch wichtig, um historische Handelsdaten zu sammeln und zu analysieren, um Ihre Handelssysteme zu optimieren, oder um Daten darüber zu sammeln, wie schnell Ihr Broker schwebende Aufträge ausfüllt oder ausführt, wenn sie ausgelöst und aktiviert werden. Durch die Untersuchung von Details wie Slippage, der Zeit, die von der Auftragserteilung bis zur Ausführung verstrichen ist, und der Bedingungen, unter denen der Auftrag ausgelöst wurde, können Sie Muster und verbesserungswürdige Bereiche in Ihrer Strategie erkennen. Außerdem können Sie anhand dieser Daten die Ausführungsqualität überwachen, um sicherzustellen, dass Ihre Aufträge wie erwartet ausgelöst werden, und um potenzielle Ineffizienzen in Ihren Handelsabläufen zu beseitigen. Eine solche detaillierte Analyse kann die Entscheidungsfindung verbessern und im Laufe der Zeit zu effektiveren und robusteren Handelsstrategien führen.

Diese EX5-Bibliothek zur Verwaltung der Historie vereinfacht das Abrufen von Details und Eigenschaften des zuletzt ausgelösten, schwebenden Auftrags. Durch den Aufruf einer einzigen Funktion können Sie auf diese Daten zugreifen, ohne den zusätzlichen Aufwand, einen Zeitraum für die Suche in der Handelshistorie festzulegen - die EX5-Bibliothek verwaltet dies reibungslos für Sie. Alles, was Sie tun müssen, ist, der entsprechenden Funktion zur Abfrage der Historie eine Variable zur Verfügung zu stellen, um die spezifische Eigenschaft des ausstehenden Auftrags als Eingabe zu speichern. Die Funktion speichert dann die abgerufenen Details in der von Ihnen angegebenen Referenzvariablen.

Wenn die Funktion die angeforderten Daten erfolgreich abruft, gibt sie true zurück und zeigt damit den Erfolg an. Wenn die angegebenen Daten des schwebenden Auftrags nicht verfügbar sind, wird false zurückgegeben. Durch diesen rationalisierten Ansatz wird unnötige Komplexität vermieden, sodass Sie sich auf die Analyse oder Integration der abgerufenen Daten in Ihre Handelsstrategien konzentrieren können, was sowohl die Effizienz als auch die Genauigkeit Ihrer Handelsoperationen gewährleistet.

Um zu beginnen, öffnen wir die Datei HistoryManager.mq5 aus dem vorherigen Artikel, in dem wir die Funktionen zum Abrufen der Positionshistorie erstellt haben, und beginnen mit der Erstellung der Funktion GetLastFilledPendingOrderData(). Stellen Sie sicher, dass Sie die Datei HistoryManager.mq5 heruntergeladen haben, die Sie am Ende des vorherigen Artikels finden. Wir werden weiterhin neuen Code unterhalb der Funktion LastClosedPositionDuration() hinzufügen, wo wir zuvor aufgehört haben.


Die Funktion GetLastFilledPendingOrderData()

Die Funktion GetLastFilledPendingOrderData() ist für das Abrufen der Eigenschaften des letzten ausgelösten, schwebenden Auftrags aus der verfügbaren Handelshistorie zuständig. Sie prüft systematisch die Verlaufsdaten auf ausstehende Aufträge, die ausgelöst wurden, und wenn ein solcher Auftrag gefunden wird, speichert sie die entsprechenden Daten in der referenzierten Variablen getLastFilledPendingOrderData .

Diese Funktion arbeitet mit der Funktion FetchHistoryByCriteria() zusammen, um die erforderlichen Daten der Handelshistorie abzurufen. Sie stellt sicher, dass nur die ausgelösten, schwebenden Aufträge berücksichtigt werden und aktualisiert die bereitgestellte Struktur mit den Daten des letzten ausgelösten, schwebenden Auftrags.

Beginnen wir mit der Definition der Signatur der Funktion GetLastFilledPendingOrderData(). Da diese Funktion als Export markiert ist, ist sie für jede MQL5-Quellcodedatei zugänglich, die die kompilierte EX5-Bibliothek importiert. Die Funktion verweist auf die Variable getLastFilledPendingOrderData, in der die abgerufenen Daten gespeichert werden.

bool GetLastFilledPendingOrderData(PendingOrderData &getLastFilledPendingOrderData) export
  {
//-- Function logic will be implemented here
  }

Als Nächstes verwenden wir die Funktion FetchHistoryByCriteria() und übergeben die Konstante GET_PENDING_ORDERS_HISTORY_DATA als Funktionsparameter, um sicherzustellen, dass wir über die erforderlichen Daten zur Historie der ausstehenden Aufträge verfügen. Wenn keine Daten gefunden werden, wird eine Meldung ausgegeben und false zurückgegeben.

if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA))
  {
   Print(__FUNCTION__, ": No trading history available. Last filled pending order can't be retrieved.");
   return(false);
  }

Wenn wir die Daten erfolgreich abgerufen haben, suchen wir nach dem letzten erfüllten Auftrag in der Schwebe. Wir ermitteln die Gesamtzahl der ausstehenden Aufträge mit der Funktion GetTotalDataInfoSize() und durchlaufen dann das Array pendingOrderInfo, um einen ausstehenden Auftrag zu finden, der ausgelöst wurde. Sobald die Daten gefunden sind, werden sie der Struktur getLastFilledPendingOrderData zugewiesen. Schließlich gibt die Funktion true zurück, wenn ein erfüllter schwebender Auftrag gefunden und seine Daten gespeichert wurden. Wenn kein erfüllter schwebender Auftrag gefunden wird, wird die Funktion beendet und gibt false zurück.

int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA);
for(int x = 0; x < totalPendingOrderInfo; x++)
  {
   if(pendingOrderInfo[x].state == ORDER_STATE_FILLED)
     {
      getLastFilledPendingOrderData = pendingOrderInfo[x];
      break;
     }
  }
  return(true);

Hier ist die vollständige Implementierung der Funktion GetLastFilledPendingOrderData() mit allen Codesegmenten in der richtigen Reihenfolge.

bool GetLastFilledPendingOrderData(PendingOrderData &getLastFilledPendingOrderData) export
  {
   if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA))
     {
      Print(__FUNCTION__, ": No trading history available. Last filled pending order can't be retrieved.");
      return(false);
     }

//-- Save the last filled pending order data in the referenced getLastFilledPendingOrderData variable
   int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA);
   for(int x = 0; x < totalPendingOrderInfo; x++)
     {
      if(pendingOrderInfo[x].state == ORDER_STATE_FILLED)
        {
         getLastFilledPendingOrderData = pendingOrderInfo[x];
         break;
        }
     }
   return(true);
  }


Zuletzt ausgefüllter schwebender Auftragstyp Funktion

Die Funktion LastFilledPendingOrderType() ist für die Ermittlung des Typs des zuletzt ausgelösten, schwebenden Auftrags zuständig. Sie speichert diesen Typ in der referenzierten Variablen lastFilledPendingOrderType. Diese Fähigkeit ist für Anwendungen unerlässlich, die Auftragsausführungsarten analysieren oder die Leistung bestimmter Auftragskategorien verfolgen müssen.

Beginnen wir mit der Definition der Funktionssignatur. Da diese Funktion als Export markiert ist, kann sie in jeder MQL5-Quelldatei, die die EX5-Bibliothek importiert, verwendet werden. Die Funktion akzeptiert die referenzierte Variable lastFilledPendingOrderType als Eingabe, in der der Typ des zuletzt ausgelösten, schwebenden Auftrags gespeichert wird.

bool LastFilledPendingOrderType(ENUM_ORDER_TYPE &lastFilledPendingOrderType) export
  {
//-- Function logic will be implemented here
  }

Zunächst deklarieren wir eine Variable vom Typ PendingOrderData mit dem Namen lastFilledPendingOrderInfo. Diese Variable speichert vorübergehend die Details des zuletzt ausgelösten, schwebenden Auftrags.

PendingOrderData lastFilledPendingOrderInfo;

Als Nächstes werden wir die Funktion GetLastFilledPendingOrderData() verwenden, um die Details der zuletzt ausgelösten, schwebenden Bestellung abzurufen. Wenn der Vorgang erfolgreich ist, wird das Typfeld aus der Struktur lastFilledPendingOrderInfo extrahiert, in der referenzierten Variablen lastFilledPendingOrderType gespeichert und true zurückgegeben. Wenn der Abruf fehlschlägt, wird die Aktualisierung der referenzierten Variablen übersprungen und false zurückgegeben, um anzuzeigen, dass keine Daten gefunden wurden.

if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
  {
   lastFilledPendingOrderType = lastFilledPendingOrderInfo.type;
   return(true);
  }
return(false);

Hier ist die vollständige Implementierung der Funktion LastFilledPendingOrderType().

bool LastFilledPendingOrderType(ENUM_ORDER_TYPE &lastFilledPendingOrderType) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderType = lastFilledPendingOrderInfo.type;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderSymbol

Die Funktion LastFilledPendingOrderSymbol() ruft das Symbol der zuletzt ausgelösten, schwebenden Order ab und speichert es in der referenzierten Variablen lastFilledPendingOrderSymbol. Sie akzeptiert die referenzierte Variable lastFilledPendingOrderSymbol als Eingabe, um das Symbol zu speichern.

Zunächst wird die Variable lastFilledPendingOrderInfo mit dem Typ PendingOrderData deklariert, die vorübergehend die Details des letzten ausgelösten, schwebenden Auftrags enthält. Anschließend verwenden wir die Funktion GetLastFilledPendingOrderData(), um die Auftragsdetails abzurufen. Bei Erfolg extrahieren wir das Symbol aus lastFilledPendingOrderInfo, speichern es in lastFilledPendingOrderSymbol und geben true zurück. Wenn der Abruf fehlschlägt, wird false zurückgegeben, ohne die referenzierte Variable zu aktualisieren.

Hier ist die Implementierung der Funktion LastFilledPendingOrderSymbol().

bool LastFilledPendingOrderSymbol(string &lastFilledPendingOrderSymbol) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderSymbol = lastFilledPendingOrderInfo.symbol;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderTicket

Die Funktion LastFilledPendingOrderTicket() ruft die Ticketnummer des zuletzt ausgelösten, schwebenden Auftrags ab und speichert sie in der referenzierten Variablen lastFilledPendingOrderTicket. Sie akzeptiert die Variable lastFilledPendingOrderTicket als Eingabe, in der die Ticketnummer gespeichert wird.

Wir beginnen mit der Definition der Variablen lastFilledPendingOrderInfo vom Typ PendingOrderData, die als temporärer Container für die Details des zuletzt ausgelösten, schwebenden Auftrags dient. Als Nächstes rufen wir die Funktion GetLastFilledPendingOrderData() auf, um die Auftragsdaten abzurufen. Bei erfolgreichem Abruf extrahieren wir das Ticket aus lastFilledPendingOrderInfo, speichern es in der Variablen lastFilledPendingOrderTicket und melden den Erfolg durch Rückgabe von true. Ist der Abruf erfolglos, gibt die Funktion false zurück und lässt die referenzierte Variable unverändert.

Hier ist die Implementierung der Funktion LastFilledPendingOrderTicket().

bool LastFilledPendingOrderTicket(ulong &lastFilledPendingOrderTicket) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTicket = lastFilledPendingOrderInfo.ticket;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderPriceOpen

Die Funktion LastFilledPendingOrderPriceOpen() ruft den Eröffnungskurs des zuletzt ausgelösten, schwebenden Auftrags ab und speichert ihn in der referenzierten Variablen lastFilledPendingOrderPriceOpen. Sie akzeptiert die Variable lastFilledPendingOrderPriceOpen als Eingabe, um den Eröffnungspreis zu speichern.

Zunächst wird die Variable lastFilledPendingOrderInfo mit dem Typ PendingOrderData deklariert, die vorübergehend die Details des letzten ausgelösten, schwebenden Auftrags enthält. Anschließend verwenden wir die Funktion GetLastFilledPendingOrderData(), um die Auftragsdetails abzurufen. Bei Erfolg extrahieren wir priceOpen aus lastFilledPendingOrderInfo, speichern ihn in lastFilledPendingOrderPriceOpen und geben true zurück. Wenn der Abruf fehlschlägt, wird false zurückgegeben, ohne die referenzierte Variable zu aktualisieren.

Hier ist die Implementierung der Funktion LastFilledPendingOrderPriceOpen().

bool LastFilledPendingOrderPriceOpen(double &lastFilledPendingOrderPriceOpen) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderPriceOpen = lastFilledPendingOrderInfo.priceOpen;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderSlPrice

Die Funktion LastFilledPendingOrderSlPrice() ruft den Stop-Loss der zuletzt ausgelösten, schwebenden Auftrag ab und speichert ihn in der referenzierten Variablen lastFilledPendingOrderSlPrice. Sie akzeptiert die Variable lastFilledPendingOrderSlPrice als Eingabe, um den abgerufenen Stop-Loss-Preis zu speichern. Diese Funktion ist besonders nützlich für Szenarien, in denen die Stop-Loss-Niveaus von kürzlich ausgelösten, schwebenden Aufträgen verfolgt oder analysiert werden müssen.

Zunächst deklarieren wir die Variable lastFilledPendingOrderInfo mit dem Typ PendingOrderData, die vorübergehend die Details des letzten erfüllten Auftrags enthält. Anschließend verwenden wir die Funktion GetLastFilledPendingOrderData(), um die Einzelheiten der Bestellung abzurufen.

Wenn der Datenabruf erfolgreich ist, wird das Feld slPrice aus lastFilledPendingOrderInfo extrahiert und in der referenzierten Variablen lastFilledPendingOrderSlPrice gespeichert. Die Funktion gibt dann true zurück, um den Erfolg anzuzeigen. Schlägt der Abruf fehl, wird die Funktion beendet, ohne die referenzierte Variable zu aktualisieren, und gibt false zurück, um zu signalisieren, dass keine Daten gefunden wurden.

Hier ist die vollständige Implementierung der Funktion LastFilledPendingOrderSlPrice():

bool LastFilledPendingOrderSlPrice(double &lastFilledPendingOrderSlPrice) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderSlPrice = lastFilledPendingOrderInfo.slPrice;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderTpPrice

Die Funktion LastFilledPendingOrderTpPrice() ruft den Preis von Take-Profit der zuletzt ausgelösten, schwebenden Order ab und speichert ihn in der referenzierten Variablen lastFilledPendingOrderTpPrice. Diese Funktion ist wichtig für Anwendungen, die Take-Profit-Levels von ausgefüllten Pending Orders analysieren oder verwalten. Sie akzeptiert die Variable lastFilledPendingOrderTpPrice als Eingabe, um den Take-Profit-Preis zu speichern.

Zunächst wird die Variable lastFilledPendingOrderInfo mit dem Typ PendingOrderData deklariert, die vorübergehend die Details des letzten erfüllten Auftrags enthält. Anschließend verwenden wir die Funktion GetLastFilledPendingOrderData(), um die Auftragsdetails abzurufen. Wenn der Abruf erfolgreich ist, extrahieren wir tpPrice aus lastFilledPendingOrderInfo, speichern ihn in der Variablen lastFilledPendingOrderTpPrice und geben true zurück. Wenn der Abruf fehlschlägt, wird false zurückgegeben, ohne die referenzierte Variable zu aktualisieren.

Hier ist die Implementierung der Funktion LastFilledPendingOrderTpPrice().

bool LastFilledPendingOrderTpPrice(double &lastFilledPendingOrderTpPrice) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTpPrice = lastFilledPendingOrderInfo.tpPrice;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderSlPips

Die Funktion LastFilledPendingOrderSlPips() ruft den Stop-Loss-Pips-Wert des zuletzt ausgelösten, schwebenden Auftrags ab und speichert ihn in der referenzierten Variablen lastFilledPendingOrderSlPips. Diese Funktion ist entscheidend für die Analyse der Risikoparameter, die mit den ausgelösten, schwebenden Aufträgen verbunden sind.

Zunächst deklarieren wir eine Variable PendingOrderData mit dem Namen lastFilledPendingOrderInfo. Diese Variable enthält vorübergehend die Details des zuletzt ausgelösten, schwebenden Auftrags. Anschließend verwenden wir die Funktion GetLastFilledPendingOrderData(), um die Auftragsdetails abzurufen. Wenn der Vorgang erfolgreich ist, wird das Feld slPips aus der Struktur lastFilledPendingOrderInfo extrahiert und in der referenzierten Variablen lastFilledPendingOrderSlPips gespeichert. Die Funktion gibt dann true zurück, um den Erfolg anzuzeigen. Schlägt der Abrufvorgang fehl, bleibt die referenzierte Variable unverändert, und die Funktion gibt false zurück, um zu signalisieren, dass keine Daten gefunden wurden.

Hier ist die vollständige Implementierung der Funktion LastFilledPendingOrderSlPips(),

bool LastFilledPendingOrderSlPips(int &lastFilledPendingOrderSlPips) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderSlPips = lastFilledPendingOrderInfo.slPips;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderTpPips

Die Funktion LastFilledPendingOrderTpPips() ruft den Wert in Pips von Take-Profit der zuletzt ausgelösten, schwebenden Order ab und speichert ihn in der referenzierten Variablen lastFilledPendingOrderTpPips. Diese Funktion ist wertvoll für die Verfolgung der Take-Profit-Levels von ausgelösten, schwebenden Aufträgen und kann für Leistungsanalysen oder Strategieanpassungen verwendet werden.

Zu diesem Zweck wird zunächst die Variable lastFilledPendingOrderInfo mit dem Typ PendingOrderData deklariert. Diese Variable wird verwendet, um vorübergehend die Details des zuletzt ausgelösten, schwebenden Auftrags zu speichern. Anschließend rufen wir die Funktion GetLastFilledPendingOrderData() auf, um die Details der Bestellung abzurufen. Wenn der Abruf erfolgreich ist, wird der Wert von tpPips aus lastFilledPendingOrderInfo extrahiert und in der Variablen lastFilledPendingOrderTpPips gespeichert. Die Funktion gibt dann true zurück. Schlägt der Abruf fehl, bleibt die referenzierte Variable unverändert, und die Funktion gibt false zurück, um den Fehler anzuzeigen.

Hier ist die vollständige Implementierung der Funktion LastFilledPendingOrderTpPips().

bool LastFilledPendingOrderTpPips(int &lastFilledPendingOrderTpPips) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTpPips = lastFilledPendingOrderInfo.tpPips;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderTimeSetup

Die Funktion LastFilledPendingOrderTimeSetup() ermittelt den Zeitpunkt, zu dem der zuletzt ausgelöste, schwebende Auftrag eingerichtet wurde. Sie speichert diese Zeit in der referenzierten Variablen lastFilledPendingOrderTimeSetup. Diese Funktion ist unerlässlich, um zu verfolgen, wann bestimmte ausstehende Aufträge ausgelöst wurden, und ermöglicht eine zeitliche Analyse der Auftragsaktivität.

Die Funktion LastFilledPendingOrderTimeSetup() akzeptiert eine referenzierte Variable, lastFilledPendingOrderTimeSetup, als Eingabe. Diese Variable enthält die Einrichtungszeit des letzten ausgelösten, schwebenden Auftrags nach Ausführung der Funktion. Um dies zu erreichen, beginnt die Funktion mit der Deklaration der Variable lastFilledPendingOrderInfo vom Typ PendingOrderData. Diese Variable wird verwendet, um die Details des letzten, ausgelösten, schwebenden Auftrags vorübergehend zu speichern.

Als Nächstes wird die Funktion GetLastFilledPendingOrderData() aufgerufen, um die Details des zuletzt ausgelösten, schwebenden Auftrags abzurufen. Wenn der Abruf erfolgreich ist, wird das Feld timeSetup aus der Struktur lastFilledPendingOrderInfo extrahiert und in der Variablen lastFilledPendingOrderTimeSetup gespeichert. Die Funktion gibt dann true zurück, um den Erfolg anzuzeigen. Schlägt der Abruf fehl, gibt die Funktion false zurück, ohne die referenzierte Variable zu aktualisieren.

Hier ist die vollständige Implementierung der Funktion LastFilledPendingOrderTimeSetup() .

bool LastFilledPendingOrderTimeSetup(datetime &lastFilledPendingOrderTimeSetup) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTimeSetup = lastFilledPendingOrderInfo.timeSetup;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderTimeDone

Die Funktion LastFilledPendingOrderTimeDone() ermittelt die Zeit, zu der die zuletzt ausgelöste schwebende Order ausgelöst wurde (time done) und speichert sie in der referenzierten Variablen lastFilledPendingOrderTimeDone. Diese Funktion ist für die Verfolgung der Ausführungszeiten von ausgelösten, schwebenden Aufträgen unerlässlich und ermöglicht es Ihnen, das Auftrags-Timing zu analysieren oder detaillierte Berichte zu erstellen.

Die Funktion nimmt die referenzierte Variable lastFilledPendingOrderTimeDone als Eingabe, um die erledigte Zeit zu speichern. Zunächst wird die Variable lastFilledPendingOrderInfo mit dem Typ PendingOrderData deklariert, in der die Details des zuletzt ausgelösten Auftrags vorübergehend gespeichert werden.

Als Nächstes ruft die Funktion GetLastFilledPendingOrderData() auf, um die Daten für den zuletzt ausgelösten, schwebenden Auftrag abzurufen. Wenn der Vorgang erfolgreich ist, extrahiert die Funktion das Feld timeDone aus der Struktur lastFilledPendingOrderInfo und speichert es in der referenzierten Variablen lastFilledPendingOrderTimeDone. Sie gibt dann true zurück, um den Erfolg anzuzeigen.

Wenn der Abruf fehlschlägt, aktualisiert die Funktion die referenzierte Variable nicht und gibt stattdessen false zurück, um zu signalisieren, dass keine gültigen Daten gefunden wurden.

Hier ist die vollständige Implementierung der Funktion LastFilledPendingOrderTimeDone().

bool LastFilledPendingOrderTimeDone(datetime &lastFilledPendingOrderTimeDone) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTimeDone = lastFilledPendingOrderInfo.timeDone;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderExpirationTime

Die Funktion LastFilledPendingOrderExpirationTime() ruft die Verfallszeit der zuletzt ausgelösten, schwebenden Order ab und speichert sie in der referenzierten Variablen lastFilledPendingOrderExpirationTime. Diese Funktion ist nützlich für die Verwaltung und Analyse der Lebensdauer der ausstehenden Aufträge, insbesondere für die Überwachung ihrer Gültigkeitsdauer.

Die Funktion akzeptiert die referenzierte Variable lastFilledPendingOrderExpirationTime als Eingabe, um die Verfallszeit zu speichern. Zunächst wird die Variable lastFilledPendingOrderInfo mit dem Typ PendingOrderData deklariert, die als temporärer Container für die Details des zuletzt ausgelösten, schwebenden Auftrags dient.

Die Funktion ruft dann GetLastFilledPendingOrderData() auf, um die Daten für den letzten erfüllten Auftrag abzurufen. Wenn der Vorgang erfolgreich ist, wird das Feld expirationTime aus der Struktur lastFilledPendingOrderInfo extrahiert und in der referenzierten Variablen lastFilledPendingOrderExpirationTime gespeichert. Sie gibt true zurück, um den erfolgreichen Abruf der Daten anzuzeigen.

Schlägt der Abruf fehl, lässt die Funktion die referenzierte Variable unverändert und gibt false zurück, um zu signalisieren, dass keine gültigen Daten vorhanden sind.

Hier ist die vollständige Implementierung der Funktion LastFilledPendingOrderExpirationTime().

bool LastFilledPendingOrderExpirationTime(datetime &lastFilledPendingOrderExpirationTime) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderExpirationTime = lastFilledPendingOrderInfo.expirationTime;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderPositionId

Die Funktion LastFilledPendingOrderPositionId() ruft die Positions-ID der zuletzt ausgelösten, schwebenden Order ab und speichert sie in der referenzierten Variablen lastFilledPendingOrderPositionId. Diese Funktion ist besonders nützlich, um schwebende Aufträge mit den entsprechenden Positionen zu verknüpfen, was eine bessere Verfolgung und Verwaltung der Handelsaktivitäten ermöglicht.

Die Funktion verwendet die referenzierte Variable lastFilledPendingOrderPositionId als Eingabe, um die Positions-ID zu speichern. Zu Beginn wird die Variable lastFilledPendingOrderInfo mit dem Typ PendingOrderData deklariert, die als temporärer Container für die Details des zuletzt ausgelösten, noch offenen Auftrags dient.

Als Nächstes ruft die Funktion GetLastFilledPendingOrderData() auf, um die Daten für den zuletzt ausgelösten, schwebenden Auftrag abzurufen. Wenn die Datenabfrage erfolgreich ist, wird das Feld positionId aus der Struktur lastFilledPendingOrderInfo extrahiert und der referenzierten Variablen lastFilledPendingOrderPositionId zugewiesen. Sie gibt dann true zurück, um anzuzeigen, dass der Vorgang erfolgreich war.

Schlägt der Datenabruf fehl, ändert die Funktion die referenzierte Variable nicht und gibt false zurück, um den Fehler zu signalisieren.

Hier ist die vollständige Implementierung der Funktion LastFilledPendingOrderPositionId().

bool LastFilledPendingOrderPositionId(ulong &lastFilledPendingOrderPositionId) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderPositionId = lastFilledPendingOrderInfo.positionId;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderMagic

Die Funktion LastFilledPendingOrderMagic() ruft die magische Zahl des zuletzt ausgelösten, schwebenden Auftrags ab und speichert sie in der referenzierten Variablen lastFilledPendingOrderMagic. Diese Funktion ist wichtig, um die eindeutige Kennung eines bestimmten Auftrags zu identifizieren, insbesondere wenn mehrere Strategien oder Systeme innerhalb desselben Handelskontos verwaltet werden.

Die Funktion verwendet die referenzierte Variable lastFilledPendingOrderMagic als Eingabe, um die magische Zahl zu speichern. Zunächst wird die Variable lastFilledPendingOrderInfo mit dem Typ PendingOrderData deklariert, die vorübergehend die Details des zuletzt ausgelösten, schwebenden Auftrags enthält.

Als Nächstes ruft die Funktion GetLastFilledPendingOrderData() auf, um die Daten für den zuletzt ausgelösten, schwebenden Auftrag abzurufen. Wenn die Datenabfrage erfolgreich ist, wird das Feld magic aus der Struktur lastFilledPendingOrderInfo extrahiert und der referenzierten Variablen lastFilledPendingOrderMagic zugewiesen. Sie gibt dann true zurück, um anzuzeigen, dass der Vorgang erfolgreich war.

Wenn der Datenabruf fehlschlägt, ändert die Funktion die referenzierte Variable nicht und gibt false zurück, um den Fehler anzuzeigen.

Hier ist die vollständige Implementierung der Funktion LastFilledPendingOrderMagic().

bool LastFilledPendingOrderMagic(ulong &lastFilledPendingOrderMagic) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderMagic = lastFilledPendingOrderInfo.magic;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderReason

Die Funktion LastFilledPendingOrderReason() ermittelt den Grund für den zuletzt ausgelösten Auftrag und speichert ihn in der referenzierten Variablen lastFilledPendingOrderReason. Diese Funktion ist nützlich, um den spezifischen Grund für die Ausführung eines Auftrags zu ermitteln. So lässt sich feststellen, ob die Order von einer mobilen, Web- oder Desktop-Anwendung aus ausgelöst, durch einen Expert Advisor oder ein Skript ausgelöst oder durch ein Stop-Loss-, Take-Profit- oder Stop-Out-Ereignis aktiviert wurde. Diese Informationen sind für die Analyse und Fehlersuche von entscheidender Bedeutung und geben Aufschluss darüber, wie und warum ein Auftrag ausgelöst wurde.

Die Funktion verwendet die referenzierte Variable lastFilledPendingOrderReason als Eingabe, um den Grund zu speichern. Zunächst wird die Variable lastFilledPendingOrderInfo mit dem Typ PendingOrderData deklariert, die vorübergehend die Details des letzten ausgelösten, schwebenden Auftrags enthält.

Als Nächstes ruft die Funktion GetLastFilledPendingOrderData() auf, um die Daten für den zuletzt ausgelösten, schwebenden Auftrag abzurufen. Wenn die Datenabfrage erfolgreich ist, wird das Feld reason aus der Struktur lastFilledPendingOrderInfo extrahiert und der referenzierten Variablen lastFilledPendingOrderReason zugewiesen. Die Funktion gibt dann true zurück, um anzuzeigen, dass der Vorgang erfolgreich war.

Wenn der Datenabruf fehlschlägt, ändert die Funktion die referenzierte Variable nicht und gibt false zurück, um den Fehler anzuzeigen.

Hier ist die vollständige Implementierung der Funktion LastFilledPendingOrderReason().

bool LastFilledPendingOrderReason(ENUM_ORDER_REASON &lastFilledPendingOrderReason) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderReason = lastFilledPendingOrderInfo.reason;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderTypeFilling

Die Funktion LastFilledPendingOrderTypeFilling() ermittelt die Auftragsart des zuletzt ausgelösten, schwebenden Auftrags und speichert sie in der referenzierten Variablen lastFilledPendingOrderTypeFilling. Diese Funktion ist wichtig, um festzustellen, wie der schwebende Auftrag ausgelöst wurde, z. B. durch Fill or Kill, Immediate oder Cancel, Passive (Book oder Cancel) oder Return Politik.

Die Funktion nimmt die referenzierte Variable lastFilledPendingOrderTypeFilling als Eingabe, um den Fülltyp zu speichern. Sie beginnt mit der Deklaration der Variablen lastFilledPendingOrderInfo mit dem Typ PendingOrderData, die vorübergehend die Details des letzten ausgelösten, schwebenden Auftrags enthält.

Als Nächstes ruft die Funktion GetLastFilledPendingOrderData() auf, um die Daten für den zuletzt ausgelösten, schwebenden Auftrag abzurufen. Wenn die Datenabfrage erfolgreich ist, wird das Feld typeFilling aus der Struktur lastFilledPendingOrderInfo extrahiert und der referenzierten Variablen lastFilledPendingOrderTypeFilling zugewiesen. Die Funktion gibt dann true zurück, um anzuzeigen, dass der Vorgang erfolgreich war.

Wenn der Datenabruf fehlschlägt, ändert die Funktion die referenzierte Variable nicht und gibt false zurück, um den Fehler anzuzeigen.

Hier ist die vollständige Implementierung der Funktion LastFilledPendingOrderTypeFilling().

bool LastFilledPendingOrderTypeFilling(ENUM_ORDER_TYPE_FILLING &lastFilledPendingOrderTypeFilling) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTypeFilling = lastFilledPendingOrderInfo.typeFilling;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderTypeTime

Die Funktion LastFilledPendingOrderTypeTime() ruft den Zeit-Typ des zuletzt ausgelösten, schwebenden Auftrags ab und speichert sie in der referenzierten Variablen lastFilledPendingOrderTypeTime. Mit dieser Funktion lässt sich die Lebensdauer des schwebenden Auftrags bestimmen.

Die Funktion verwendet die referenzierte Variable lastFilledPendingOrderTypeTime als Eingabe, um den Zeit-Typ zu speichern. Zunächst wird die Variable lastFilledPendingOrderInfo vom Typ PendingOrderData deklariert, die vorübergehend die Details des letzten ausgelösten, schwebenden Auftrags enthält.

Die Funktion ruft dann GetLastFilledPendingOrderData() auf, um die Daten für den zuletzt ausgelösten, schwebenden Auftrag abzurufen. Wenn die Datenabfrage erfolgreich ist, wird das Feld typeTime aus der Struktur lastFilledPendingOrderInfo extrahiert und der referenzierten Variablen lastFilledPendingOrderTypeTime zugewiesen. Die Funktion gibt dann true zurück, um anzuzeigen, dass der Vorgang erfolgreich war.

Wenn der Datenabruf fehlschlägt, ändert die Funktion die referenzierte Variable nicht und gibt false zurück, um den Fehler anzuzeigen.

Hier ist die vollständige Implementierung der Funktion LastFilledPendingOrderTypeTime().

bool LastFilledPendingOrderTypeTime(datetime &lastFilledPendingOrderTypeTime) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderTypeTime = lastFilledPendingOrderInfo.typeTime;
      return(true);
     }
   return(false);
  }


Die Funktion LastFilledPendingOrderComment

Die Funktion LastFilledPendingOrderComment() ruft den Kommentar ab, der mit der zuletzt ausgelösten, schwebenden Bestellung verbunden ist, und speichert ihn in der referenzierten Variablen lastFilledPendingOrderComment. Diese Funktion ist nützlich, um alle zusätzlichen Notizen oder Anmerkungen zu erfassen, die dem schwebenden Auftrag hinzugefügt wurden.

Die Funktion akzeptiert die referenzierte Variable lastFilledPendingOrderComment als Eingabe, in der sie den Kommentar speichert. Zunächst wird die Variable lastFilledPendingOrderInfo mit dem Typ PendingOrderData deklariert, die vorübergehend die Details des letzten ausgelösten, schwebenden Auftrags enthält.

Als Nächstes ruft die Funktion GetLastFilledPendingOrderData() auf, um die Daten für den zuletzt ausgelösten, schwebenden Auftrag abzurufen. Wenn die Datenabfrage erfolgreich ist, wird das Kommentarfeld aus der Struktur lastFilledPendingOrderInfo extrahiert und der referenzierten Variablen lastFilledPendingOrderComment zugewiesen. Die Funktion gibt dann true zurück, um anzuzeigen, dass der Vorgang erfolgreich war.

Wenn der Datenabruf fehlschlägt, ändert die Funktion die referenzierte Variable nicht und gibt false zurück, um den Fehler anzuzeigen.

Hier ist die vollständige Implementierung der Funktion LastFilledPendingOrderComment().

bool LastFilledPendingOrderComment(string &lastFilledPendingOrderComment) export
  {
   PendingOrderData lastFilledPendingOrderInfo;
   if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo))
     {
      lastFilledPendingOrderComment = lastFilledPendingOrderInfo.comment;
      return(true);
     }
   return(false);
  }


Schlussfolgerung

Wir haben erfolgreich die exportierbaren Funktionen zum Abrufen und Speichern der Eigenschaften des zuletzt ausgelösten, schwebenden Auftrags entwickelt und damit den Reichhaltigkeit der Bibliothek History Management EX5 verbessert. Diese neuen Funktionen bieten einen reibungslosen Zugang zu wichtigen Daten über ausgelöste, schwebende Aufträge und ermöglichen eine einfachere und effektivere Handelsanalyse und Strategieoptimierung.

Im nächsten Artikel werden wir die Bibliothek weiter ausbauen, indem wir Funktionen zum Abrufen und Speichern der Eigenschaften des zuletzt stornierten schwebenden Auftrags hinzufügen. Diese Ergänzung verbessert die Fähigkeit der Bibliothek, Handelsverläufe zu verwalten und zu analysieren, und bietet noch mehr wertvolle Werkzeuge für Ihr Handels-Toolkit.

Der aktualisierte Quellcode der Bibliothek HistoryManager.mq5, einschließlich aller in diesem und früheren Artikeln erstellten Funktionen, ist am Ende dieses Artikels verfügbar. Vielen Dank, dass Sie mir gefolgt sind, und ich freue mich darauf, diese Reise mit Ihnen im nächsten Artikel fortzusetzen.

Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/16742

Beigefügte Dateien |
Integration von Broker-APIs mit Expert Advisors unter Verwendung von MQL5 und Python Integration von Broker-APIs mit Expert Advisors unter Verwendung von MQL5 und Python
In diesem Artikel besprechen wir die Implementierung von MQL5 in Verbindung mit Python, um brokerbezogene Operationen durchzuführen. Stellen Sie sich vor, dass ein kontinuierlich laufender Expert Advisor (EA) auf einem VPS gehostet wird, der in Ihrem Namen handelt. An einem bestimmten Punkt wird die Fähigkeit des EA, Mittel zu verwalten, von entscheidender Bedeutung. Dazu gehören Vorgänge wie die Aufladung Ihres Handelskontos und die Einleitung von Abhebungen. In dieser Diskussion werden wir die Vorteile und die praktische Umsetzung dieser Funktionen beleuchten, um eine nahtlose Integration des Fondsmanagements in Ihre Handelsstrategie zu gewährleisten. Bleiben Sie dran!
Die Strategie des Handel eines Liquiditätshungers Die Strategie des Handel eines Liquiditätshungers
Die Strategie des Handel eines Liquiditätshungers (liquidity grab) ist eine Schlüsselkomponente von Smart Money Concepts (SMC), die darauf abzielt, die Aktionen institutioneller Marktteilnehmer zu identifizieren und auszunutzen. Dabei werden Bereiche mit hoher Liquidität, wie z. B. Unterstützungs- oder Widerstandszonen, ins Visier genommen, in denen große Aufträge Kursbewegungen auslösen können, bevor der Markt seinen Trend wieder aufnimmt. In diesem Artikel wird das Konzept des Liquiditätshungers im Detail erklärt und der Entwicklungsprozess des Expert Advisor der Liquiditätshunger-Handelsstrategie in MQL5 skizziert.
Die Handelsstrategie Inverse Fair Value Gap Die Handelsstrategie Inverse Fair Value Gap
Eine Inverse Fair Value Gap (IFVG) liegt vor, wenn der Kurs in eine zuvor ermittelte „Fair Value Gap“ abprallt und statt der erwarteten unterstützenden oder Widerstandsreaktion diese nicht einhält. Dieses Scheitern kann eine potenzielle Veränderung der Marktrichtung signalisieren und einen konträren Handelsvorteil bieten. In diesem Artikel werde ich meinen selbst entwickelten Ansatz zur Quantifizierung und Nutzung der inversen Fair Value Gap als Strategie für MetaTrader 5 Expert Advisors vorstellen.
Von der Grundstufe bis zur Mittelstufe: Das Array (I) Von der Grundstufe bis zur Mittelstufe: Das Array (I)
Dieser Artikel stellt einen Übergang zwischen dem bisher Erörterten und einer neuen Phase der Forschung dar. Um diesen Artikel zu verstehen, müssen Sie die vorherigen Artikel lesen. Der hier dargestellte Inhalt ist ausschließlich für Bildungszwecke bestimmt. Die Anwendung sollte unter keinen Umständen zu einem anderen Zweck als zum Erlernen und Beherrschen der vorgestellten Konzepte verwendet werden.