OrderCheck() - widersprüchliche Aussagem

 

Hallo,

laut Dokumentation gibt OrderCheck(in, out) zurück, ob auf dem Konto genügend Geld ist für den geplanten Trade. Die Tradeparameter und die returns der Funktion werden über struct Variablen übergeben.

Nun ist es bei mir so, dass OrderCheck(...) --> false zurück liefert, obwohl sicherlich genug Knete auf dem Konto ist.

Bei dem Rückgabe-struct-Element .comment steht jedoch "Done" drin, sprich da gibt er sein OK.

Sind also widersprüchliche Aussagen.

Hier der vereinfachte Code:

         MqlTradeRequest request{};
         MqlTradeCheckResult check{};
         request.action = TRADE_ACTION_DEAL;         
         request.symbol = _Symbol;
         request.volume = Lotsize; 
         request.type = ORDER_TYPE_BUY;
         request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
         request.deviation = 10;

 if (OrderCheck(request,check))
       {
       if (check.retcode != 0)
          {
          Print ("Prüfung des geplanten Trades hat diesen Fehler ergeben: " + check.comment);
          // Exit negativ
          }   
          else
          {
          Print ("OrderCheck erfolgreich:" + check.comment);
          // Exit positiv
          }
            
       }      
       else
       {
       Print ("Nicht genügend Geld auf dem Konto");
       // Exit negativ
       }


Kann mir jemand sagen, wo der Fehler liegt? Die Funktion mit der ausreichenden Kontodeckung wäre schon praktisch zu haben...


Vielen Dank,
Klaus

 

In der Dok zum Befehl steht:

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

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

Wenn also genug Knete da ist, gibt es Fehler in den Werten des Auftrags, druck auch den Fehler _LastError aus - das sollte man immer machen.