Diskussion zum Artikel "Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil XXIV): Handelsklassen - automatische Korrektur ungültiger Parametern"

 

Neuer Artikel Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil XXIV): Handelsklassen - automatische Korrektur ungültiger Parametern :

In diesem Artikel werden wir einen Blick auf die Behandlung ungültiger Handelsparameter werfen und die Handelsereignisklasse verbessern. Jetzt werden alle Handelsereignisse (sowohl einzelne als auch die gleichzeitig bei einem Tick auftretenden) in Programmen korrekt definiert.

Im Allgemeinen sollte der EA in der Lage sein, den Umständen entsprechend zu handeln und gleichzeitig der benutzerdefinierten Logik der Behandlung von Fehlern in Handelsaufträgen zu folgen. Daher können wir dem EA die folgenden Anweisungen geben, wenn ein Handelsauftragsfehler entdeckt wird:

  1. Einfach die Handelsmethode beenden, um den Nutzer die Behandlung für ungültige Parameter eines fehlerhaften Auftrags selbst erstellen lassen.
  2. Wenn ein ungültiger Wert eines Handelsauftrags behoben werden kann, tun Sie dies sofort und senden Sie ihn danach an den Server.
  3. Wenn ein Fehler situationsbedingt ist, wiederholen Sie eine Handelsanfrage nach einer Pause oder wiederholen Sie einfach die Anfrage mit den gleichen Parametern.

Die Behandlung von Fehlern in den Parametern der Handelsaufträge kann zu einem von mehreren Ergebnissen führen:

  • Die Unfähigkeit, den Handel mit dem EA fortzusetzen, bevor eine Fehlerquelle vom Nutzer beseitigt ist.
  • Unfähigkeit, einen Handelsauftrag zu senden — Ausstieg aus der Handelsmethode.
  • Korrigieren ungültiger Werte und Senden eines korrigierten Handelsauftrags.
  • Sofortiges Senden eines Handelsauftrags mit den Ausgangsparametern (hier wird davon ausgegangen, dass sich die Handelsbedingungen verbessert haben).
  • Warten, Aktualisieren der Kursdaten und Senden eines Handelsauftrags mit den Ausgangsparametern.

In diesem Artikel werden wir den Fehlerbehandler für Handelsaufträge entwickeln, der Fehler und ihre Quellen prüft und die Methode der Fehlerbehandlung zurückgibt:

  • deaktivieren des Handels,
  • unterbrechen des Handels,
  • korrigieren ungültiger Parameter,
  • Handelsanfrage mit den Ausgangsparametern,
  • Handelsanfrage nach einer Pause (vorläufige Lösung),
  • Erstellen einer schwebenden (pending) Handelsanfrage (in nachfolgenden Artikeln)

Autor: Artyom Trishkin

 
Können Sie mir sagen, wie ich Informationen über einen Verlustauftrag erhalten kann? Zum Beispiel die Höhe des Verlusts, die Auftragsnummer, die Auftragsmenge, die Eröffnungszeit, usw.. Ich danke Ihnen!
 
hsyhsy863 :
Können Sie mir sagen, wie ich Informationen über einen Verlustauftrag erhalten kann? Zum Beispiel die Höhe des Verlusts, die Auftragsnummer, die Auftragsmenge, die Eröffnungszeit, usw.. Vielen Dank!
Hier können Sie Ihre Fragen stellen.
 
Artyom Trishkin:
Hier können Sie Ihre Fragen stellen.
Meine Frage ist, wenn ich ein automatisches Handelsprogramm mit Ihrem Programm entwerfe und eine Verlustorder schließen muss, wie kann ich dann die Auftragsnummer der Verlustorder erhalten ?
 
hsyhsy863 :
Meine Frage ist, wenn ich ein automatisches Handelsprogramm mit Ihrem Programm entwerfe und einen Verlustauftrag schließen muss, wie erhalte ich die Auftragsnummer des Verlustauftrags?

Im Advisor.

//--- Abrufen einer Liste aller offenen Stellen
   CArrayObj* list=engine.GetListMarketPosition();
//--- Sortieren der Liste nach Gewinn, unter Berücksichtigung von Provision und Swap
   list.Sort(SORT_BY_ORDER_PROFIT_FULL);
//--- Ermittelt den Index der Position mit dem geringsten Gewinn (größten Verlust)
   int index=CSelect::FindOrderMin(list,ORDER_PROP_PROFIT_FULL);
   if(index>WRONG_VALUE)
     {
      //--- Holen Sie das Positionsobjekt mit dem größten Verlust und schließen Sie die Position per Ticket
      COrder* position=list.At(index);
      if(position!=NULL)
         engine.ClosePosition(position.Ticket());
     }

Die Bibliothek sollte entsprechend dem diesem Artikel beigefügten Expertenbeispiel angeschlossen werden.

 
Artyom Trishkin:

Im Berater.

Die Bibliothek sollte entsprechend dem diesem Artikel beigefügten Expertenbeispiel angeschlossen werden.

Die Bibliothek sollte gemäß dem diesem Artikel beigefügten Expertenbeispiel angeschlossen werden!
 
Hallo, als ich den automatischen Handel entworfen habe, habe ich festgestellt, dass, wenn OP_BUYSTOP und OP_SELLSTOP gleichzeitig platziert werden, nur OP_SELLSTOP platziert wird, aber nicht OP_BUYSTOP. Die Anweisung erfüllt zwar die Bedingungen der Pending Order, aber sie kann nicht Pending sein.
 
hsyhsy863 :
Hallo, als ich den automatischen Handel entworfen habe, habe ich festgestellt, dass, wenn OP_BUYSTOP und OP_SELLSTOP gleichzeitig platziert werden, nur OP_SELLSTOP platziert wird, aber nicht OP_BUYSTOP. Die Anweisung erfüllt die Bedingungen für schwebende Aufträge, aber die Aufträge können nicht schwebend sein.
Geben Sie ein Beispiel, um diesen Fehler zu reproduzieren.
 
Artyom Trishkin:
Geben Sie ein Beispiel, um diesen Fehler zu reproduzieren.
if(datetimeN5!=iTime(NULL,0,0))
if(datetimeN5!=iTime(NULL,0,0))
if(ASWER(Close Position, "Upper Pending Bid")==0) { if(datetimeN5!=iTime(NULL,0,0))
{
Pending Buy(0.382,Closed); {
datetimeN5 = iTime(NULL, 0, 0);
}}
if(datetimeN6!=iTime(NULL,0,0))
{
if(ASWER(Close Position, "Down Pending Sell Count") == 0)
{
Pending Sell(0.382,Close Position);
datetimeN6 = iTime(NULL, 0, 0);

}}

Dies ist der Quellcode für meine Pending Buy und Pending Sell, es sollte logischerweise zwei Pending Orders gleichzeitig geben, aber in Wirklichkeit gibt es nur die Pending Sell Order.

 
Entschuldigung, Problem gelöst, mein Fehler!!!!
 
hsyhsy863:
Entschuldigung, Problem gelöst, mein Fehler!!!!
OK