Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   GetLastError() (http://www.expert-advisor.com/forum/showthread.php?t=6169)

Adlerauge 10.08.18 13:33

GetLastError()
 
Hallo Allerseits,
ich habe ein kleines Problem mit der GetLastError-Funktion.

Ich öffne eine Order mit einer while-Schleife:
PHP-Code:

 int i_Ticketnummer 0;
 
string s_Error_Beschreibung;
 while (
i_Ticketnummer <= 0)
  { 
RefreshRates();
     
i_Ticketnummer OrderSend(Symbol(),OP_SELL,1,Bid,1000,0,0,NULL,0,0);
    if (
GetLastError() == 132) { s_Error_Beschreibung "Markt geschlossen";                     Alert(Symbol(), s_Error_Beschreibung); break; }
    if (
GetLastError() == 134) { s_Error_Beschreibung "zu wenig Geld zur Orderöffnung";        Alert(Symbol(), s_Error_Beschreibung); break; }
    if (
GetLastError() == 136) { s_Error_Beschreibung "Off Quotes";                            Alert(Symbol(), s_Error_Beschreibung); break; }
    if (
GetLastError() == 137) { s_Error_Beschreibung "Broker busy";                           Alert(Symbol(), s_Error_Beschreibung); break; }
    if (
GetLastError() == 148) { s_Error_Beschreibung "Max. Anzahl erlaubter Trades erreicht"Alert(Symbol(), s_Error_Beschreibung); break; }
  } 

Wenn also einer der Error-Codes zutrifft, müsste ich eine Meldung bekommen und die while-Schleife abbrechen. Ist aber beides nicht der Fall. Ich habe es nun x-mal getestet, indem ich absichtlich eine zu grosse Order aufgegeben habe, die while-Schleife läuft immer weiter.
Im Journal kommt dann natürlich ununterbrochen die Meldung:
order buy ............ opening at market ........ failed [not enough money]
Die GetLastError-Funktion müsste dann eigentlich den Code 134 zurückbekommen - scheint aber nicht zu funktionieren.

Hat jemand eine Idee?

Danke...

Leopold 10.08.18 15:23

Hallo,

lass doch mal mit Print() den Errorcode im Journal ausgeben damit du mal siehst welcher Errorcode wirklich vorliegt.

und vor OrderSend() würde ich noch ResetLastError(); schreiben.

--- Leopold ---

Adlerauge 10.08.18 17:44

ja, hab ich gerade ausprobiert, ich habe die Zeile
Print("GetLastError: ", GetLastError());
hinter die OrderSent-Zeile gesetzt.
...wird glatt übergangen - vom Print-Befehl ist im Journal nichts zu sehen - die Fehlermeldung des MT4 selbst [not enough money] aber sehrwohl.

Dann habe ich es mit Alert versucht:
Alert("GetLastError: ", GetLastError());
Jetzt hängt sich der ganze MT4 beim Versuch, das Alert-Fenster aufzubauen auf, und lässt sich nur noch per Task-Manager killen.

Er ist so, als ob die while-Schleife schon wieder von vorne beginnt, bevor sie ganz abgearbeitet wurde...

Adlerauge 10.08.18 17:59

so, jetzt habe ich hinter der Print-Zeile eine Pause von einer Sekunde eingefügt:
Sleep(1000);
Der Print-Befehl wird trotzdem nicht ausgeführt.

Dann das gleiche nochmal mit Alert und Sleep:
... und siehe da, jetzt wird im Alert-Fenster der Fehlercode 134 ausgegeben.
Trotzdem läuft die Schleife immer weiter, unbeeindruckt vom break, wenn der Fehlercode 134 lautet...

Adlerauge 10.08.18 19:02

so, hab die Lösung gefunden:
if (GetLastError() == 134)
funktioniert nicht.

Man muss es mit einer Variablen machen:
int i_Error_Code = GetLastError();
if (i_Error_Code == 134)
{
...
}

@Leopold: trotzdem danke für Deine Antwort :-)

Raul0 12.08.18 00:12

Hallo,

sobald GetLastError() abgefragt wurde, wird diese Funktion wieder zurückgesetzt. Somit ist es schon richtig über eine Variable zu gehen, da nachfolgende Abfragen ohne Ergebniss sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum