English 日本語
preview
MQL5 Handels-Toolkit (Teil 7): Erweitern der History Management EX5-Bibliothek um die Funktionen für den zuletzt stornierten, schwebenden Auftrag

MQL5 Handels-Toolkit (Teil 7): Erweitern der History Management EX5-Bibliothek um die Funktionen für den zuletzt stornierten, schwebenden Auftrag

MetaTrader 5Beispiele |
143 0
Wanateki Solutions LTD
Kelvin Muturi Muigua

Einführung

Im Laufe dieser Artikelserie haben wir erhebliche Anstrengungen unternommen, um eine umfassende Suite von EX5-Bibliotheken für den Handel zu erstellen. Diese Bibliotheken wurden entwickelt, um den Entwicklungsprozess für MQL5-Anwendungen zu rationalisieren und den Zeit- und Arbeitsaufwand für die Abwicklung von Handelsoperationen und die Verwaltung der historischen Daten von Aufträgen, Handelsgeschäften und Positionen drastisch zu reduzieren. Durch gut strukturierte und intuitive Funktionen vereinfachen diese Bibliotheken komplexe Aufgaben und ermöglichen es Entwicklern, Handelsverläufe nahtlos, präzise und effizient zu verarbeiten.

In diesem Artikel werden wir die Entwicklung des letzten Moduls unserer Bibliothek History Management EX5 abschließen, das speziell für das Abrufen und Speichern von Eigenschaften im Zusammenhang mit dem zuletzt stornierten, schwebenden Auftrag entwickelt wurde. Dieses Modul behebt eine wesentliche Einschränkung der Sprache MQL5, der es an einfachen, einzeiligen Funktionen für den Zugriff und die Verwaltung solcher historischen Daten mangelt. Durch die Überbrückung dieser Lücke bietet unsere Bibliothek Entwicklern eine rationalisierte Lösung für die effiziente Arbeit mit stornierten, schwebenden Auftragsinformationen.

Der Schwerpunkt dieses Moduls liegt auf der Bereitstellung einer einfachen, aber effektiven Methode zum Abrufen und Speichern wichtiger Details von stornierten, schwebenden Aufträgen, wie z. B. deren Symbol, Eröffnungskurs, Pip-basierter Stop Loss, Take Profit, zeitbasierte Laufzeiten und andere relevante Attribute. Durch die Kapselung dieser Funktionen in nutzerfreundlichen Funktionen ermöglicht die Bibliothek Entwicklern den Zugriff auf die benötigten Daten mit minimalem Aufwand und minimaler Komplexität. Das macht es zu einem unentbehrlichen Werkzeug für alle, die MQL5-Anwendungen erstellen wollen, die auf präzise und zugängliche Daten der Handelsgeschichte angewiesen sind. Für diejenigen unter Ihnen, die an der Analyse der Handelsleistung interessiert sind, vereinfacht dieses Modul den Prozess und ermöglicht es Ihnen, sich auf das große Ganze zu konzentrieren.

Um zu beginnen, öffnen Sie die Datei HistoryManager.mq5 aus dem vorangegangenen Artikel, in der wir Funktionen für die Bearbeitung des zuletzt ausgeführten schwebenden Auftrags entwickelt haben. In diesem Abschnitt werden wir mit der Implementierung der Funktion GetLastCancledPendingOrderData() zu implementieren, die für die Verarbeitung stornierter schwebender Aufträge von zentraler Bedeutung ist. Bevor Sie fortfahren, vergewissern Sie sich, dass Sie die Quelldatei HistoryManager.mq5 heruntergeladen haben, die am Ende des vorherigen Artikels angehängt ist.

Sobald die Datei bereit ist, suchen Sie den Abschnitt, an dem wir im letzten Artikel geendet haben. Insbesondere werden wir weiterhin neuen Code direkt unter der Funktion LastFilledPendingOrderComment(). Dadurch wird sichergestellt, dass die neuen Funktionen logisch neben den verwandten Funktionen angeordnet sind, sodass die Bibliothek leichter zu navigieren und bei Bedarf in Zukunft zu erweitern ist.


Hauptinhalt

  1. Abrufen der Daten des letzten, stornierten, schwebenden Auftrags
  2. Abrufen des Typs des letzten, stornierten, schwebenden Auftrags
  3. Abrufen des Symbols des letzten, stornierten, schwebenden Auftrags
  4. Abrufen des Tickets des letzten, stornierten, schwebenden Auftrags
  5. Abrufen des Eröffnungspreises des letzten, stornierten, schwebenden Auftrags
  6. Abrufen des Stop Loss des letzten, stornierten, schwebenden Auftrags
  7. Abrufen des Take Profits des letzten, stornierten, schwebenden Auftrags
  8. Abrufen der Pips des Stop Loss des letzten, stornierten, schwebenden Auftrags
  9. Abrufen der Pips des Take Profit des letzten, stornierten, schwebenden Auftrags
  10. Abrufen des Einrichtungszeit des letzten, stornierten, schwebenden Auftrags
  11. Abrufen der Auslösezeit des letzten, stornierten, schwebenden Auftrags
  12. Abrufen der Verfallszeit des letzten, stornierten, schwebenden Auftrags
  13. Abrufen der Positions-ID der letzten, stornierten, schwebenden Auftrags
  14. Abrufen der magischen Zahl des letzten, stornierten, schwebenden Auftrags
  15. Abrufen des Grunds des letzten, stornierten, schwebenden Auftrags
  16. Abrufen der Auslösezeit des letzten, stornierten, schwebenden Auftrags
  17. Abrufen des Laufzeit-Typs des letzten, stornierten, schwebenden Auftrags
  18. Abrufen des Kommentars des letzten, stornierten, schwebenden Auftrags
  19. Schlussfolgerung



Die Funktion GetLastCanceledPendingOrderData

Die Funktion GetLastCanceledPendingOrderData() ruft die Details des zuletzt stornierten, schwebenden Auftrags ab und speichert diese Informationen in der angegebenen Referenz getLastCanceledPendingOrderData. Sie stützt sich auf die Funktion FetchHistoryByCriteria(), um auf historische Handelsdaten zuzugreifen und den letzten, stornierten, schwebenden Auftrag durch Analyse des entsprechenden Datensatzes zu identifizieren. Wurden keine solchen Daten gefunden, gibt die Funktion eine Fehlermeldung aus und liefert false. Bei Erfolg speichert es die abgerufenen Informationen in der angegebenen Referenz und gibt true zurück.

Beginnen wir mit der Erstellung der Funktionsdefinition oder Signatur. Die Funktion GetLastCancledPendingOrderData() sollte für importierende MQL5-Programme zur externen Verwendung zugänglich sein, weshalb wir sie mit export definiert haben.

bool GetLastCanceledPendingOrderData(PendingOrderData &getLastCanceledPendingOrderData) export
  {
//-- Function implementation will be explained step by step below.
  }

Wir fahren fort und versuchen, die Historie der schwebenden Aufträge mit der Funktion FetchHistoryByCriteria() und dem Argument GET_PENDING_ORDERS_HISTORY_DATA abzurufen. Dadurch wird sichergestellt, dass die Funktion Zugriff auf die erforderlichen Daten für stornierte, schwebende Aufträge hat.

Wenn die Funktion FetchHistoryByCriteria() den Wert false zurückgibt, bedeutet dies, dass keine Handelshistorie verfügbar ist. In diesem Fall protokollieren wir eine Fehlermeldung mit der Funktion Print(), um die Fehlersuche zu erleichtern. Die Funktion gibt dann false zurück, was bedeutet, dass die Daten nicht abgerufen werden können.

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

Sobald die historischen Daten verfügbar sind, berechnen wir die Gesamtzahl der schwebenden Aufträge mit der Funktion GetTotalDataInfoSize(). Dieser Wert hilft uns, das Array pendingOrderInfo zu durchlaufen, um den zuletzt stornierten, schwebenden Auftrag zu finden.

Als Nächstes durchlaufen wir das Array pendingOrderInfo, um einen Auftrag mit dem Status ORDER_STATE_CANCELED zu finden. Die Funktion speichert den ersten übereinstimmenden Auftrag in der Variablen getLastCanceledPendingOrderData. Die Schleife stellt sicher, dass der Status von jedem Auftrag überprüft wird, und sobald ein stornierter Auftrag gefunden wird, wird er in der Referenzvariablen gespeichert, wonach die Schleife beendet wird. Nach der Speicherung der Daten für den letzten, stornierten, schwebenden Auftrag gibt die Funktion true zurück und zeigt damit an, dass der Vorgang erfolgreich war.

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

Wenn keine historischen Daten verfügbar sind, wird mit der Funktion Print() eine Fehlermeldung protokolliert, die zur Verdeutlichung den Funktionsnamen (__FUNCTION__) enthält. Diese Meldung hilft, das Problem während der Fehlersuche zu identifizieren. Die Funktion stellt sicher, dass die angegebene Referenzvariable unverändert bleibt, wenn der Vorgang fehlschlägt, sodass die Integrität der Eingabe gewahrt bleibt.

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

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

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


Die Funktion LastCanceledPendingOrderType

Die Funktion LastCanceledPendingOrderType() ist für die Abfrage des Auftragstyps des zuletzt stornierten, schwebenden Auftrags verantwortlich und speichert diesen in der referenzierten Variablen lastCanceledPendingOrderType. Diese Variable wird als Eingabe an die Funktion übergeben, wo sie den abgerufenen Auftragstyp speichert.

Zu diesem Zweck wird eine temporäre Variablen lastCancledPendingOrderInfo mit dem Typ PendingOrderData deklariert, die die Details des letzten, stornierten, schwebenden Auftrags enthält. Die Funktion ruft dann GetLastCanceledPendingOrderData() auf, um die erforderlichen Auftragsinformationen zu erhalten.

Wenn der Abruf erfolgreich ist, wird das Feld des Typs aus lastCanceledPendingOrderInfo extrahiert und lastCanceledPendingOrderType zugewiesen. Die Funktion gibt dann true zurück, um den erfolgreichen Vorgang zu bestätigen. Schlägt der Abruf hingegen fehl, gibt die Funktion den Wert false zurück und lässt die Variable lastCancledPendingOrderType unverändert.

Nachstehend finden Sie die vollständige Implementierung der Funktion LastCancledPendingOrderType().

bool LastCanceledPendingOrderType(ENUM_ORDER_TYPE &lastCanceledPendingOrderType) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderType = lastCanceledPendingOrderInfo.type;
      return(true);
     }
   return(false);
  }


Die Funktion LastCancledPendingOrderSymbol

Die Funktion LastCancledPendingOrderSymbol() dient dazu, das Handelssymbol des zuletzt stornierten, schwebenden Auftrags abzurufen. Dieses Symbol wird in der bereitgestellten Variablen lastCancledPendingOrderSymbol gespeichert und bietet eine einfache Möglichkeit, auf diese spezifische Eigenschaft zuzugreifen. Die Funktion stützt sich auf das Dienstprogramm GetLastCancledPendingOrderData(), um die erforderlichen Auftragsdetails zu erhalten.

Der Prozess beginnt mit dem Aufruf von GetLastCanceledPendingOrderData(), der die Details des letzten, stornierten, schwebenden Auftrags abruft. Wenn der Abruf erfolgreich ist, wird das Feld mit dem Symbol aus den abgerufenen Daten der referenzierten Variablen lastCanceledPendingOrderSymbol zugewiesen, und die Funktion gibt true zurück, um den Erfolg des Vorgangs zu bestätigen.

In Fällen, in denen der Datenabruf fehlschlägt, z. B. wenn keine relevante Auftragshistorie vorhanden ist, lässt die Funktion die referenzierte Variable unverändert und gibt false zurück, um den Fehler anzuzeigen.

Nachstehend finden Sie die vollständige Implementierung der Funktion LastCancledPendingOrderSymbol().

bool LastCanceledPendingOrderSymbol(string &lastCanceledPendingOrderSymbol) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderSymbol = lastCanceledPendingOrderInfo.symbol;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderTicket

Die Funktion LastCanceledPendingOrderTicket() ruft die Ticketnummer des zuletzt stornierten, schwebenden Auftrags ab und speichert sie in der referenzierten Variable lastCanceledPendingOrderTicket. Sie ruft die Funktion GetLastCanceledPendingOrderData() auf, um die Bestellungsdetails abzurufen.

Wenn der Datenabruf erfolgreich war, wird die Ticketnummer in der referenzierten Variablen gespeichert, und die Funktion gibt true zurück. Schlägt der Prozess fehl, gibt die Funktion false zurück und lässt die Variable unverändert.

Nachstehend finden Sie den vollständigen Code für die Funktion LastCancledPendingOrderTicket().
bool LastCanceledPendingOrderTicket(ulong &lastCanceledPendingOrderTicket) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTicket = lastCanceledPendingOrderInfo.ticket;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderPriceOpen

Die Funktion LastCanceledPendingOrderPriceOpen() ermittelt den Eröffnungskurs des zuletzt stornierten, schwebenden Auftrags und speichert ihn in der referenzierten Variablen lastCanceledPendingOrderPriceOpen. Sie ruft GetLastCanceledPendingOrderData() auf, um die Auftragsdetails zu erfassen.

Bei erfolgreichem Abruf wird der Eröffnungskurs in der angegebenen Variablen gespeichert, und die Funktion gibt true zurück. Schlägt der Abruf fehl, gibt die Funktion false zurück, ohne die Variable zu ändern.

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

bool LastCanceledPendingOrderPriceOpen(double &lastCanceledPendingOrderPriceOpen) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderPriceOpen = lastCanceledPendingOrderInfo.priceOpen;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderSlPrice

Die Funktion LastCanceledPendingOrderSlPrice() ermittelt den Preis des Stop Loss des zuletzt stornierten, schwebenden Auftrags und speichert ihn in der referenzierten Variablen lastCanceledPendingOrderSlPrice. Sie verwendet die Funktion GetLastCancledPendingOrderData(), um die Auftragsdetails abzurufen.

Wenn der Abruf erfolgreich ist, wird der Preis des Stop Loss in der referenzierten Variablen gespeichert, und die Funktion gibt true zurück. Wenn der Prozess fehlschlägt, gibt die Funktion false zurück, ohne die Variable zu ändern.

So wird die Funktion LastCancledPendingOrderSlPrice() vollständig implementiert.

bool LastCanceledPendingOrderSlPrice(double &lastCanceledPendingOrderSlPrice) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderSlPrice = lastCanceledPendingOrderInfo.slPrice;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderTpPrice

Die Funktion LastCanceledPendingOrderTpPrice() ruft den Preis des Take Profit des zuletzt stornierten, schwebenden Auftrags ab und speichert ihn in der referenzierten Variablen lastCanceledPendingOrderTpPrice. Sie verwendet die Funktion GetLastCanceledPendingOrderData(), um die Auftragsdetails abzurufen.

Wenn der Datenabruf erfolgreich war, wird der Preis des Take Profit in der referenzierten Variablen gespeichert, und die Funktion gibt true zurück. Schlägt der Abruf fehl, gibt die Funktion false zurück, ohne die Variable zu ändern.

Nachstehend finden Sie die vollständige Implementierung der Funktion LastCancledPendingOrderTpPrice().

bool LastCanceledPendingOrderTpPrice(double &lastCanceledPendingOrderTpPrice) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTpPrice = lastCanceledPendingOrderInfo.tpPrice;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderSlPips

Die Funktion LastCanceledPendingOrderSlPips() ruft den Wert in Pips des Stop Loss des zuletzt stornierten, schwebenden Auftrags ab und speichert ihn in der referenzierten Variablen lastCanceledPendingOrderSlPips. Mit Hilfe der Funktion GetLastCancledPendingOrderData() wird auf die relevanten Auftragsdetails zugegriffen, um diesen spezifischen Wert zu extrahieren.

Die Funktion beginnt mit dem Aufruf von GetLastCanceledPendingOrderData(), um die Daten des letzten, stornierten, schwebenden Auftrags zu erhalten. Wenn der Abruf erfolgreich ist, wird der Wert in Pips des Stop Loss aus den abgerufenen Daten extrahiert und der Variablen lastCanceledPendingOrderSlPips zugewiesen. Die Funktion zeigt dann den Erfolg an, indem sie true zurückgibt.

Gelingt es der Funktion hingegen nicht, die erforderlichen Daten abzurufen - vielleicht aufgrund eines Mangels an historischen Informationen - wird die Variable lastCanceledPendingOrderSlPips nicht geändert und stattdessen false zurückgegeben.

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

bool LastCanceledPendingOrderSlPips(int &lastCanceledPendingOrderSlPips) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderSlPips = lastCanceledPendingOrderInfo.slPips;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderTpPips

Die Funktion LastCanceledPendingOrderTpPips() ruft den Wert in Pips des Take Profit ab, der mit dem zuletzt stornierten, schwebenden Auftrag verbunden ist. Der abgefragte Wert wird in der referenzierten Variablen lastCanceledPendingOrderTpPips gespeichert. Um dies zu erreichen, stützt sich die Funktion auf die Funktion GetLastCancledPendingOrderData(), die die erforderlichen Auftragsdetails abruft.

Zunächst wird eine Variable des Typs PendingOrderData deklariert, um die Details des letzten, stornierten, schwebenden Auftrags vorübergehend zu speichern. Die Funktion GetLastCancledPendingOrderData() wird dann aufgerufen, um diese Variable mit den relevanten Daten zu füllen. Wenn der Vorgang erfolgreich ist, wird der Wert in Pips des Take Profit aus der Variablen extrahiert und in der Variablen lastCanceledPendingOrderTpPips gespeichert. Die Funktion gibt dann true zurück, was den Erfolg anzeigt.

Schlägt der Datenabruf jedoch fehl, gibt die Funktion false zurück und lässt die referenzierte Variable unverändert.

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

bool LastCanceledPendingOrderTpPips(int &lastCanceledPendingOrderTpPips) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTpPips = lastCanceledPendingOrderInfo.tpPips;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderTimeDone

Die Funktion LastCanceledPendingOrderTimeSetup() ruft die Einrichtungszeit des zuletzt stornierten, schwebenden Auftrags ab und speichert sie in der referenzierten Variable lastCanceledPendingOrderTimeSetup. Um diesen Vorgang durchzuführen, verwendet die Funktion GetLastCanceledPendingOrderData(), um auf die notwendigen Details über den stornierten Auftrag zuzugreifen.

Zunächst wird eine Variable PendingOrderData deklariert, die vorübergehend die Daten für den letzten, stornierten, schwebenden Auftrag enthält. Die Funktion GetLastCancledPendingOrderData() wird dann aufgerufen, um die entsprechenden Auftragsdetails dieser Variablen zuzuweisen. Wenn der Abruf erfolgreich ist, wird der Wert der Einrichtungszeit extrahiert und in der Variablen lastCanceledPendingOrderTimeSetup gespeichert. Die Funktion gibt anschließend den Wert true zurück und bestätigt damit den Erfolg des Vorgangs.

Schlägt der Datenabruf hingegen fehl, gibt die Funktion false zurück, sodass die Variable lastCancledPendingOrderTimeSetup unverändert bleibt.

Nachfolgend finden Sie die vollständige Implementierung der Funktion LastCancledPendingOrderTimeSetup().

bool LastCanceledPendingOrderTimeSetup(datetime &lastCanceledPendingOrderTimeSetup) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTimeSetup = lastCanceledPendingOrderInfo.timeSetup;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderTimeDone

Die Funktion LastCanceledPendingOrderTimeDone() dient dazu, den Zeitpunkt abzufragen, zu dem der zuletzt stornierte, schwebende Auftrag ausgeführt wurde. Diese Zeit wird in der referenzierten Variablen lastCanceledPendingOrderTimeDone gespeichert, sodass ein einfacher Zugriff auf diese spezifischen Daten möglich ist. Die Funktion stützt sich auf die Dienstfunktion GetLastCanceledPendingOrderData(), um die erforderlichen Details des stornierten Auftrags zu erfassen.

Die Funktion beginnt mit dem Aufruf von GetLastCanceledPendingOrderData(), der die Details des zuletzt stornierten, schwebenden Auftrags extrahiert. Ist der Abrufvorgang erfolgreich, wird das Feld mit der Zeit aus den abgerufenen Daten der Variablen lastCanceledPendingOrderTimeDone zugewiesen, und die Funktion gibt true zurück, was den erfolgreichen Vorgang bestätigt.

Wenn der Abrufprozess jedoch fehlschlägt - z. B. wenn keine relevante Auftragshistorie vorliegt - ändert die Funktion die referenzierte Variable nicht und gibt stattdessen false zurück, was signalisiert, dass die gewünschten Informationen nicht abgerufen werden konnten.

Für Aufgaben, die die Berechnung der Gesamtzeit erfordern, die ein schwebender Auftrag offen war, bevor er storniert wurde, kann diese Funktion zusammen mit der Funktion LastCanceledPendingOrderTimeSetup() verwendet werden. Zusammen ermöglichen sie es, die Dauer zwischen der Erstellung des Auftrags und seiner Stornierung zu bestimmen.

Nachstehend finden Sie die vollständige Implementierung der Funktion LastCancledPendingOrderTimeDone().

bool LastCanceledPendingOrderTimeDone(datetime &lastCanceledPendingOrderTimeDone) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTimeDone = lastCanceledPendingOrderInfo.timeDone;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderExpirationTime

Die Funktion LastCanceledPendingOrderExpirationTime() ruft die Verfallszeit des zuletzt stornierten, schwebenden Auftrags ab und weist sie der referenzierten Variablen lastCanceledPendingOrderExpirationTime zu. Sie ruft die Funktion GetLastCancledPendingOrderData() auf, um die Auftragsdetails zu erhalten.

Wenn der Datenabruf erfolgreich ist, wird die Ablaufzeit in der referenzierten Variablen gespeichert und die Funktion gibt true zurück. Schlägt der Abruf fehl, gibt die Funktion false zurück, ohne die Variable zu ändern.

Nachfolgend finden Sie die vollständige Implementierung der Funktion LastCancledPendingOrderExpirationTime().
bool LastCanceledPendingOrderExpirationTime(datetime &lastCanceledPendingOrderExpirationTime) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderExpirationTime = lastCanceledPendingOrderInfo.expirationTime;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderPositionId

Die Funktion LastCanceledPendingOrderPositionId() extrahiert die Positions-ID des zuletzt stornierten, schwebenden Auftrags und aktualisiert die referenzierte Variable lastCanceledPendingOrderPositionId mit diesem Wert. Um auf die erforderlichen Daten zuzugreifen, ruft sie die Funktion GetLastCanceledPendingOrderData() auf.

Ist der Vorgang erfolgreich, wird die Positions-ID in die referenzierte Variable eingetragen, und die Funktion gibt true zurück. Falls der Abruf nicht erfolgreich ist, gibt die Funktion false zurück und lässt die Variable unverändert.

Hier ist die vollständige Implementierung der Funktion LastCancledPendingOrderPositionId().
bool LastCanceledPendingOrderPositionId(ulong &lastCanceledPendingOrderPositionId) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderPositionId = lastCanceledPendingOrderInfo.positionId;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderMagic

Die Funktion LastCanceledPendingOrderMagic() ermittelt die magische Zahl, die mit dem zuletzt stornierten, schwebenden Auftrag verbunden ist, und weist sie der referenzierten Variablen lastCanceledPendingOrderMagic zu. Dieser Prozess stützt sich auf die Funktion GetLastCanceledPendingOrderData(), um die erforderlichen Details abzurufen.

Wenn der Datenabruf erfolgreich ist, wird die magische Zahl in die referenzierte Variable übertragen, und die Funktion gibt true zurück. Schlägt der Vorgang fehl, gibt die Funktion den Wert false zurück, sodass die Variable nicht verändert wird.

Hier ist die vollständige Implementierung der Funktion LastCancledPendingOrderMagic().
bool LastCanceledPendingOrderMagic(ulong &lastCanceledPendingOrderMagic) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderMagic = lastCanceledPendingOrderInfo.magic;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderReason

Die Funktion LastCanceledPendingOrderReason() extrahiert die Kennziffer des Grundes für den zuletzt stornierten, schwebenden Auftrag und speichert ihn in der referenzierten Variablen lastCanceledPendingOrderReason. Sie verwendet den Befehl GetLastCancledPendingOrderData(), um die Auftragsdetails abzurufen.

Der Grund gibt an, wie der Auftrag erteilt wurde oder warum er ausgelöst wurde. So zeigt beispielsweise ORDER_REASON_CLIENT an, dass der Auftrag manuell von einem Desktop-Terminal aus erteilt wurde, während ORDER_REASON_EXPERT angibt, dass der Auftrag von einem Expert Advisor erteilt wurde und ORDER_REASON_WEB, dass der Auftrag von einer Web-Plattform aus erteilt wurde. Andere mögliche Gründe sind die Aktivierung aufgrund eines Stop Loss oderTake Profit oder als Folge eines Stop-Out-Ereignisses.

Wenn der Datenabruf erfolgreich ist, speichert die Funktion den Grund in der angegebenen Variablen und gibt true zurück. Schlägt sie fehl, gibt die Funktion false zurück, ohne die Variable zu ändern.

Nachstehend finden Sie die vollständige Implementierung der Funktion LastCancledPendingOrderReason().

bool LastCanceledPendingOrderReason(ENUM_ORDER_REASON &lastCanceledPendingOrderReason) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderReason = lastCanceledPendingOrderInfo.reason;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderTypeFilling

Die Funktion LastCanceledPendingOrderTypeFilling() ermittelt den Füllungstyp des zuletzt stornierten, schwebenden Auftrags und weist ihn der referenzierten Variablen lastCanceledPendingOrderTypeFilling zu. Dies wird durch den Aufruf der Funktion GetLastCancledPendingOrderData() erreicht, um die erforderlichen Auftragsdetails zu sammeln.

Der Durchführungstyp liefert wichtige Informationen darüber, wie der Auftrag ausgeführt werden soll. Bei der Auftragsart „Fill or Kill (FOK)“ muss der Auftrag zum geforderten Preis vollständig ausgeführt werden; ist dies nicht möglich, wird er storniert. Bei „Immediate or Cancel (IOC)“ wird der Auftrag sofort für das verfügbare Volumen zum gewünschten Preis ausgeführt, und der nicht ausgeführte Teil wird verworfen. Der Typ „Return“ ermöglicht es, den Auftrag teilweise auszuführen, wenn das volle Volumen nicht verfügbar ist, wobei das verbleibende nicht ausgeführte Volumen in einen Limitauftrag umgewandelt wird. Diese Limit-Order bleibt im Markt aktiv, bis sie entweder manuell oder durch einen Expert Advisor ausgeführt oder gelöscht wird.

Wenn der Datenabruf erfolgreich ist, wird der Durchführungstyp in der angegebenen Variablen gespeichert, und die Funktion gibt true zurück. Schlägt der Abruf fehl, gibt die Funktion false zurück, ohne die referenzierte Variable zu ändern.

Nachstehend finden Sie die vollständige Implementierung der Funktion LastCancledPendingOrderTypeFilling().

bool LastCanceledPendingOrderTypeFilling(ENUM_ORDER_TYPE_FILLING &lastCanceledPendingOrderTypeFilling) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTypeFilling = lastCanceledPendingOrderInfo.typeFilling;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderTypeTime

Die Funktion LastCanceledPendingOrderTypeTime() extrahiert den Laufzeit-Typ des zuletzt stornierten, schwebenden Auftrags und aktualisiert die referenzierte Variable lastCanceledPendingOrderTypeTime mit diesem Wert. Sie verwendet die Funktion GetLastCanceledPendingOrderData(), um die erforderlichen Auftragsdetails abzurufen.

Der Laufzeit-Typ eines Auftrags gibt an, wie lange der Auftrag gültig ist. Es gibt mehrere Arten von Zeit, die mit Aufträgen verbunden sind: Good Till Cancel (GTC), bei dem der Auftrag aktiv bleibt, bis er manuell storniert wird; Good Till Current Trade Day, bei dem der Auftrag am Ende des Handelstages ausläuft; Good Till Expired, bei dem der Auftrag nach einem bestimmten Datum oder einer bestimmten Uhrzeit ausläuft; und Good Till Specified Day, bei dem der Auftrag bis 23:59:59 Uhr des angegebenen Tages gültig ist, mit der zusätzlichen Bedingung, dass der Auftrag zur nächstgelegenen Handelszeit ausläuft, wenn die Uhrzeit außerhalb einer Handelssitzung liegt.

Wenn der Abruf erfolgreich ist, weist die Funktion der referenzierten Variablen den Laufzeit-Typ zu und gibt true zurück. Schlägt der Abruf fehl, wird die Variable unverändert gelassen und false zurückgegeben.

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

bool LastCanceledPendingOrderTypeTime(datetime &lastCanceledPendingOrderTypeTime) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTypeTime = lastCanceledPendingOrderInfo.typeTime;
      return(true);
     }
   return(false);
  }


Die Funktion LastCanceledPendingOrderComment

Die Funktion LastCanceledPendingOrderComment() erfasst den Kommentar, der mit des zuletzt stornierten, schwebenden Auftrags verbunden ist, und legt ihn in der referenzierten Variablen lastCanceledPendingOrderComment ab. Sie verwendet die Funktion GetLastCanceledPendingOrderData(), um die erforderlichen Auftragsinformationen abzurufen.

Wenn die Auftragsdaten erfolgreich erhalten wurden, wird der Kommentar der referenzierten Variablen zugewiesen und die Funktion gibt true zurück. Schlägt der Vorgang fehl, bleibt die referenzierte Variable unverändert, und die Funktion gibt false zurück.

Nachfolgend finden Sie die vollständige Implementierung der Funktion LastCancledPendingOrderComment().
bool LastCanceledPendingOrderComment(string &lastCanceledPendingOrderComment) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderComment = lastCanceledPendingOrderInfo.comment;
      return(true);
     }
   return(false);
  }


Schlussfolgerung

Wir haben nun eine umfassende Bibliothek zur Verwaltung der Historie entwickelt, die in der Lage ist, die Handelshistorie von ausgeführten und stornierten, schwebenden Aufträgen sowie von Geschäften und Positionen abzufragen, abzurufen, zu kategorisieren und zu speichern. Dies ist ein bedeutender Meilenstein bei der Vereinfachung der Verwaltung historischer Handelsdaten in MQL5, der den Entwicklern ein vielseitiges und effizientes Toolset zur Bewältigung komplexer Datenanforderungen an die Hand gibt.

Was diese Bibliothek auszeichnet, ist ihr robuster und organisierter Rahmen für die Verwaltung von Handelsdaten. Durch die Bereitstellung strukturierter und intuitiver Funktionen verwandelt es die oft mühsame Aufgabe der Bearbeitung der Handelshistorie in einen reibungslosen Prozess. Dieser Ansatz verbessert die Zugänglichkeit zu wichtigen Daten und stellt gleichzeitig sicher, dass sie in verschiedenen realen Szenarien effektiv eingesetzt werden können, z. B. bei der Erstellung von Leistungsanalysetools, der Optimierung von Handelsstrategien oder der Durchführung eingehender historischer Analysen.

Der nächste Schritt in dieser Reihe besteht in der Erstellung der erforderlichen Header-Dateien, die es den Endnutzern ermöglichen, die Bibliothek nahtlos in ihre Projekte zu importieren und zu integrieren. Sobald die Header vollständig sind, werde ich demonstrieren, wie die Bibliothek implementiert wird, sodass Entwickler die Funktionalität problemlos in ihre Codebasis einbauen können.

Zu Ihrer Erleichterung finden Sie die aktualisierte HistoryManager.mq5 Bibliotheksquellcode, der alle in diesem und früheren Artikeln erstellten Funktionen enthält, sowie die kompilierte EX5-Binärdatei HistoryManager.ex5 sind am Ende dieses Artikels angehängt. Im nächsten Artikel werden wir die Bibliothek zur Verwaltung der Historie abschließen, indem wir eine vollständige Implementierungsdokumentation und praktische Beispiele bereitstellen, die Sie bei der effektiven Nutzung dieser EX5-Bibliothek unterstützen. Vielen Dank, dass Sie uns gefolgt sind. Ich freue mich darauf, wieder mit Ihnen in Kontakt zu treten, wenn wir dieses Projekt in die Endphase bringen.

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

Beigefügte Dateien |
HistoryManager.mq5 (81.42 KB)
HistoryManager.ex5 (33.63 KB)
Meistern der Log-Einträge (Teil 3): Erkunden von Handles zum Speichern von Protokollen Meistern der Log-Einträge (Teil 3): Erkunden von Handles zum Speichern von Protokollen
In diesem Artikel werden wir das Konzept der Handler in der Logging-Bibliothek erkunden, verstehen, wie sie funktionieren, und drei erste Implementierungen erstellen: Konsole, Datenbank und Datei. Wir werden alles von der grundlegenden Struktur der Handler bis hin zu praktischen Tests behandeln, um den Boden für ihre volle Funktionalität in zukünftigen Artikeln zu bereiten.
Entwicklung eines Toolkit zur Analyse von Preisaktionen (Teil 8): Metrics Board Entwicklung eines Toolkit zur Analyse von Preisaktionen (Teil 8): Metrics Board
Als eines der leistungsstärksten Toolkits zur Analyse von Preisaktionen wurde das „Metrics Board“ entwickelt, um die Marktanalyse zu rationalisieren, indem es wichtige Marktmetriken mit nur einem Mausklick bereitstellt. Jede Schaltfläche dient einer bestimmten Funktion, sei es die Analyse von Hoch-/Tief-Trends, Volumen oder anderen Schlüsselindikatoren. Dieses Tool liefert genaue Daten in Echtzeit, wenn Sie sie am meisten brauchen. In diesem Artikel wollen wir uns die Funktionen genauer ansehen.
Hidden Markov Modelle für trendfolgende Volatilitätsprognosen Hidden Markov Modelle für trendfolgende Volatilitätsprognosen
Hidden Markov Modelle (HMM) sind leistungsstarke statistische Instrumente, die durch die Analyse beobachtbarer Kursbewegungen die zugrunde liegenden Marktzustände identifizieren. Im Handel verbessern HMM die Volatilitätsprognose und liefern Informationen für Trendfolgestrategien, indem sie Marktverschiebungen modellieren und antizipieren. In diesem Artikel stellen wir das vollständige Verfahren zur Entwicklung einer Trendfolgestrategie vor, die HMM zur Prognose der Volatilität als Filter einsetzt.
Entwicklung eines Expert Advisors in MQL5 für Ausbrüche nach kalenderbasierten Nachrichtenereignissen Entwicklung eines Expert Advisors in MQL5 für Ausbrüche nach kalenderbasierten Nachrichtenereignissen
Die Volatilität erreicht ihren Höhepunkt in der Regel in der Nähe von Ereignissen mit hohem Nachrichtenwert, wodurch sich erhebliche Ausbruchschancen ergeben. In diesem Artikel werden wir den Umsetzungsprozess einer kalenderbasierten Ausbruch-Strategie skizzieren. Wir werden alles von der Erstellung einer Klasse zur Interpretation und Speicherung von Kalenderdaten über die Entwicklung realistischer Backtests mit diesen Daten bis hin zur Implementierung von Ausführungscode für den Live-Handel behandeln.