OrderCheck

OrderCheck() prüft, ob genug Geld vorhanden ist, um die notwendigen Handelsoperationen auszuführen. Die Ergebnisse der Prüfung werden den Feldern der Struktur MqlTradeCheckResult zugewiesen.

bool  OrderCheck(
   MqlTradeRequest&       request,      // Struktur der Anforderung 
   MqlTradeCheckResult&   result        // Struktur der Antwort
   );

Parameter

request

[in]  Zeiger auf die Struktur vom Typ MqlTradeRequest, die die erforderliche Handelsoperation beschreibt.

Ergebnis

[in,out]  Zeiger auf die Struktur vom Typ MqlTradeCheckResult, der das Ergebnis der Prüfung zugewiesen wird.

Rückgabewert

Wenn es an Geldmittel fehlt oder Parameter nicht korrekt ausgefüllt sind, gibt die Funktion false zurück. Bei der erfolgreichen Grundprüfung der Strukturen (Prüfung der Zeiger) kehrt sie mit true zurück – das zeugt noch nicht davon, dass die angeforderte Handelsoperation unbedingt erfolgreich ausgeführt wird. Für den Erhalt der ausführlichen Beschreibung der Ausführung der Funktion muss man die Felder der Struktur result analysieren.

Für den Erhalt der Information über den Fehler, muss man die Funktion GetLastError() aufrufen.

Beispiel:

#define   DEVIATION     5              // erlaubte Abweichung vom Preis
#define   VOLUME        1.0            // Auftragsvolumen
#define   EXPERT_MAGIC  123            // MagicNumber
#define   DIRECTION     ORDER_TYPE_BUY // Richtung der zu öffnenden Position (ORDER_TYPE_BUY or ORDER_TYPE_SELL)
 
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Anforderungs-, Verifizierungs- und Ergebnisstrukturen deklarieren und initialisieren
   MqlTradeRequest     request={};
   MqlTradeCheckResult check  ={};
   MqlTradeResult      result ={};
   
//--- Handelsanforderungsparameter vorbereiten
   PrepareRequest(_SymbolDIRECTIONVOLUMErequest);
   
//--- Handelsanforderungsparameter prüfen
   ResetLastError();
   bool res=OrderCheck(requestcheck);
   if(!res)
     {
      PrintFormat("Trade request verification completed with error %d\nServer retcode: %u, comment: %s"GetLastError(), check.retcodecheck.comment);
      return;
     }
     
//--- die Prüfung der Handelsanfrage war erfolgreich - Beschreibung der Felder der Handelsanfrage-Verifizierungsstruktur anzeigen
   Print("Trade request verification completed successfully");
   MqlTradeCheckResultPrint(check14);
   
//--- Handelsanfrage senden
   if(!OrderSend(requestresult))
      Print("OrderSend error "GetLastError());    // Wenn die Anfrage nicht gesendet werden kann, zeige den Fehlercode an
      
//--- Information über die Operation
   PrintFormat("Trade request result: retcode=%u, deal=%I64u, order=%I64u"result.retcoderesult.dealresult.order);
   /*
   Ergebnis mit deaktiviertem Auto-Trading im Client-Terminal:
   Trade request verification completed with error 4752
   Server retcode10027commentAutoTrading disabled by client
   
   Automatischen Handel aktivieren und bei geschlossenem Markt erneut prüfen:
   Experts   automated trading is enabled
   Trade request verification completed successfully
   Retcode:      0
   Balance:      10779.50 USD
   Equity:       10779.50 USD
   Profit:       0.00 USD
   Margin:       1104.79 USD
   Margin free:  9674.71 USD
   Margin level975.71 %
   Comment:      Done
   OrderSend error 4756
   Trade request resultretcode=10018deal=0order=0
   
   Prüfen, ob der Markt offen ist:
   Trade request verification completed successfully
   Retcode:      0
   Balance:      10779.50 USD
   Equity:       10779.50 USD
   Profit:       0.00 USD
   Margin:       110.46 USD
   Margin free:  10669.04 USD
   Margin level9758.74 %
   Comment:      Done
   Trade request resultretcode=10009deal=2777010968order=2802818813
   */
  }
//+------------------------------------------------------------------+
//| Parameter für eine Handelsanfrage vorbereiten                    |
//+------------------------------------------------------------------+
void PrepareRequest(const string symbolconst ENUM_ORDER_TYPE order_typeconst double volumeMqlTradeRequest &request)
  {
   ENUM_ORDER_TYPE type=(DIRECTION !=ORDER_TYPE_BUY ? ORDER_TYPE_SELL : DIRECTION);
   double price=(DIRECTION==ORDER_TYPE_BUY ? SymbolInfoDouble(Symbol(), SYMBOL_ASK) : SymbolInfoDouble(Symbol(), SYMBOL_BID));
//--- Abfrage der Parameter
   request.action    = TRADE_ACTION_DEAL// Typ der Handelsoperation
   request.symbol    = symbol;            // Symbol
   request.volume    = volume;            // Volumen
   request.type      = type;              // Auftragstyp
   request.price     = price;             // Eröffnungspreis
   request.deviation = DEVIATION;         // erlaubte Abweichung vom Preis
   request.magic     = EXPERT_MAGIC;      // MagicNumber des Auftrags
  }
//+------------------------------------------------------------------+
//| Felder der Handelsanfrage ausdrucken                             |
//| Prüfergebnis im Journal                                          |
//+------------------------------------------------------------------+
void MqlTradeCheckResultPrint(const MqlTradeCheckResult &checkconst uint header_width=0)
  {
//--- Kontowährung und Anzahl der Dezimalstellen der Kontowährung abrufen
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
   int    digits  =(int)AccountInfoInteger(ACCOUNT_CURRENCY_DIGITS);
   
//--- Definieren der Kopftextes und der Breite des Textfeldes
//--- Wenn der Funktion eine Breite von Null übergeben wird, dann ist die Breite die Größe der Kopfzeile + 1
   string header="Retcode:";
   uint w=(header_width==0 ? header.Length()+1 : header_width);
//--- Anzeige des Rückgabecodes mit dem Header der angegebenen Breite im Journal
   PrintFormat("%-*s%-u"wheadercheck.retcode);
   
//--- Anzeige des Saldos nach der Ausführung einer Handelsoperation im Journal
   header="Balance:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.balancecurrency);
   
//--- Anzeige des Eigenkapitals nach Ausführung einer Handelsoperation im Journal
   header="Equity:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.equitycurrency);
      
//--- Anzeige des schwebenden Gewinns nach der Ausführung einer Handelsoperation im Journal
   header="Profit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.profitcurrency);      
      
//--- Anzeige der für die erforderliche Handelsoperation erforderlichen Marge im Journal
   header="Margin:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.margincurrency);      
      
//--- Anzeige des nach der Durchführung einer Handelsoperation verbleibenden Eigenkapitals im Journal
   header="Margin free:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.*f %s"wheaderdigitscheck.margin_freecurrency);      
      
//--- Anzeige des Margin-Levels, der nach Abschluss der erforderlichen Handelsoperation im Journal festgelegt werden soll
   header="Margin level:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-.2f %%"wheadercheck.margin_level);      
      
//--- Kommentar zum Antwortcode und Fehlerbeschreibung im Journal anzeigen
   header="Comment:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   PrintFormat("%-*s%-s"wheadercheck.comment);      
  }

Siehe auch

OrderSend(), Typen der Handelsoperationen, Struktur der Handelsanforderung, Struktur der Ergebnisse der Prüfung der Handelsanforderung, Struktur des Ergebnisses der Handelsanforderung.