Struktur des Ergebnisses der Handelsanforderung  (MqlTradeResult)

Als Antwort auf Handelsanforderung, gibt das Handelsserver Daten über Bearbeitungsergebnis der Handelsanforderung als eine vorbestimmte Sonderstruktur  MqlTradeResult zurück.

 

struct MqlTradeResult
  {
   uint     retcode;          // Kode des Operationsergebnisses 
   ulong    deal;             // Ticket des Deals, wenn es abgeschlossen ist 
   ulong    order;            // Ticket der Order, wenn sie gestellt ist 
   double   volume;           // Dealvolumen, bestaetigt vom Broker 
   double   price;            // Dealpreis, bestaetigt vom Broker 
   double   bid;              // Laufender Bidpreis (Requote Preis)
   double   ask;              // Laufender Askpreis (Requote Preis)
   string   comment;          // Kommentar des Brokers zur Opearion (als Default durch Beschreibung ausgefuellt Rückkehrcode des Handels Servers) 
   uint     request_id;       // Identifikator der Anforderung, der vom Terminal beim Senden eingesetzt wird 
   int      retcode_external// Return Code eines externen Handelssystems
  }; 

Beschreibung der Felder

Feld

Beschreibung

retcode

Rückkehrkode des Handelsservers

deal

Ticket von Deal, wenn es abgeschlossen ist. Zugänglich bei der Handelsoperation TRADE_ACTION_DEAL

order

Ticket der Order, wenn sie gestellt ist. Gemeldet bei der Handelsoperation TRADE_ACTION_PENDING

volume

Dealvolumen, bestätigt vom Broker. Hängt vom Typ der Orderausfuellung

price

Preis im Deal, bestätigt vom Broker. Hängt vom Feld deviation in der Handelsanforderung und/oder vom Typ der Handelsoperation ab

bid

Laufender Bidpreis (Requote Preis)

ask

Laufender Askpreis (Requote Preis)

comment

Kommentar des Brokers zur Operation (als Default durch Beschreibung ausgefüllt Rückkehrcode des Handels Servers)

request_id

Identifikator der Anforderung, der vom Terminal beim Senden eingesetzt wird

retcode_external

Der Code des Fehlers, den ein externes Handelssystem zurückgegeben hat. Das Hinzufügen und die Typen dieser Fehler hängen mit dem Broker und dem externen Handelssystem zusammen, an das Transaktionen gesendet werden

Ergebnis der Handelsoperation kehrt zur Variable des Typs MqlTradeResult zurück, die vom zweiten Parameter in die Funktion OrderSend() für Durchführung der Handelsoperationen übertragen wird .

Das Terminal schreibt den Identifikator der Anforderung in das Feld request_id, wenn er an den Handel-Server durch Funktionen OrdersSend() und OrderSendAsync() gesendet wird. Vom Handel-Server erhält das Terminal Nachrichten über die ausgeführten Handelstransaktionen und übergibt sie für Bearbeitung in die OnTradeTransaction () Funktion, die als die Parameter enthält:

  • Beschreibung der Handelstransaktion in der Struktur MqlTradeTransaction;
  • Beschreibung der Handelsanforderung, der aus der Funktion OrderSend() oder OrdersSendAsync() gesendet ist. Identifikator der Anforderung wird vom Terminal an den Handle-Server gesendet, und die Anforderung und seinen request_id werden im Terminalspeicher aufbewahrt;
  • das Ergebnis der Ausführung der Handelsanforderung als die Struktur MqlTradeResult, in dem das Feld request_id den Identifikator dieser Anforderung enthält.

Funktion OnTradeTransaction() bekommt drei Eingabeparameter, aber die beiden letzten Parameter sollten nur für die Handelstransaktionen mit dem Typ TRADE_TRANSACTION_REQUEST analysiert werden. In allen anderen Fällen werden die Daten über die Handelsanforderung und das Ergebnis seiner Ausführung nicht ausgefüllt. Das Beispiel der Analyse der Parameter ist im Abschnitt Struktur der Handelstransaktion gegeben.

Die Einstellung des Identifikators request_id vom Terminal für die Handelsanforderung dient zur Arbeit mit der asynchronen Funktion OrderSendAsync() beim Senden an den Server. Dieser Identifikator erlaubt die ausgeführte Aktion (Aufruf der Funktion OrderSend oder OrderSendAsync) mit dem in die OnTradeTransaction() übergebenen Ergebnis dieser Aktion zu verbinden.

Beispiel:

//+------------------------------------------------------------------+
//| Senden der Handelsanforderung mit Ergebnisverarbeitung           |
//+------------------------------------------------------------------+
bool MyOrderSend(MqlTradeRequest request,MqlTradeResult result)
  {
//--- stellen wir Kode des letzten Fehlers auf Null 
   ResetLastError();
//--- senden wir Anforderung 
   bool success=OrderSend(request,result);
//--- wenn das Ergebnis erfolglos ist - versuchen wir zu erfahren warum 
   if(!success)
     {
      int answer=result.retcode;
      Print("TradeLog:Trade request failed. Error = ",GetLastError());
      switch(answer)
        {
         //--- Requote
         case 10004:
           {
            Print("TRADE_RETCODE_REQUOTE");
            Print("request.price = ",request.price,"   result.ask = ",
                  result.ask," result.bid =",result.bid);
            break;
           }
         //--- Order ist vom Server nicht akzeptiert 
         case 10006:
           {
            Print("TRADE_RETCODE_REJECT");
            Print("request.price = ",request.price,"   result.ask = ",
                  result.ask," result.bid = ",result.bid);
            break;
           }
         //--- Falscher Preis
         case 10015:
           {
            Print("TRADE_RETCODE_INVALID_PRICE");
            Print("request.price = ",request.price,"   result.ask = ",
                  result.ask," result.bid = ",result.bid);
            break;
           }
         //--- falscher SL und/oder TP
         case 10016:
           {
            Print("TRADE_RETCODE_INVALID_STOPS");
            Print("request.sl = ",request.sl," request.tp = ",request.tp);
            Print("result.ask = ",result.ask," result.bid = ",result.bid);
            break;
           }
         //--- unkorrektes Volumen
         case 10014:
           {
            Print("TRADE_RETCODE_INVALID_VOLUME");
            Print("request.volume = ",request.volume,"   result.volume = ",
                  result.volume);
            break;
           }
         //--- nicht genug Geld für Handelsoperation 
         case 10019:
           {
            Print("TRADE_RETCODE_NO_MONEY");
            Print("request.volume = ",request.volume,"   result.volume = ",
                  result.volume,"   result.comment = ",result.comment);
            break;
           }
         //--- irgendwelcher anderer Grund, Kode der Serverantwort ist zu melden     
         default:
           {
            Print("Other answer = ",answer);
           }
        }
      //--- erfolgloses Ergebnis der Handelsanfoderung durch Rückkehr false wird gemeldet
      return(false);
     }
//--- OrderSend() gibt true zurück - wiederholen wir die Antwort 
   return(true);
  }