Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools  
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4009
Beiträge: 39296
Benutzer: 6.322
Aktive Benutzer: 322
Links: 80
Wir begrüßen unseren neuesten Benutzer: Xypa
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 3 Stunden
- Xypa
vor 10 Stunden
- eisbaer
vor 11 Stunden
- EuroFXMast...
vor einem Tag
- Abdelaliii
vor 3 Tagen
- Cavalino

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 65
Gesamt: 65
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 5 Tagen
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 118
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard 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...
Mit Zitat antworten
  #2 (permalink)  
Alt vor 5 Tagen
Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 224
Leopold befindet sich auf einem aufstrebenden Ast
Standard

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 ---
Mit Zitat antworten
  #3 (permalink)  
Alt vor 5 Tagen
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 118
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

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...
Mit Zitat antworten
  #4 (permalink)  
Alt vor 5 Tagen
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 118
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

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...
Mit Zitat antworten
  #5 (permalink)  
Alt vor 5 Tagen
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 118
Adlerauge befindet sich auf einem aufstrebenden Ast
Standard

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 :-)
Mit Zitat antworten
  #6 (permalink)  
Alt vor 4 Tagen
Premium Mitglied
 
Registriert seit: Apr 2015
Beiträge: 410
Raul0 befindet sich auf einem aufstrebenden Ast
Standard

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.
__________________

Easy Trading Assistant
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
getlasterror


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 00:54 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2018 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------