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: 4097
Beiträge: 38687
Benutzer: 6.384
Aktive Benutzer: 217
Links: 80
Wir begrüßen unseren neuesten Benutzer: haschmat
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 18:12).
Neue Benutzer:
vor 2 Tagen
- haschmat
vor 2 Tagen
- jayhouse
vor 3 Tagen
- oktay
vor 3 Tagen
- DeadMan66
vor 6 Tagen
- philipbarn...

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 58
Gesamt: 59
Team: 0
Team:  
Benutzer:  Leopold
Freunde anzeigen

Empfehlungen

Like Tree1Likes
  • 1 Post By Raul0
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 10.08.18
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 129
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...
  #2 (permalink)  
Alt 10.08.18
Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 282
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 ---
  #3 (permalink)  
Alt 10.08.18
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 129
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...
  #4 (permalink)  
Alt 10.08.18
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 129
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...
  #5 (permalink)  
Alt 10.08.18
Mitglied
 
Registriert seit: Nov 2015
Beiträge: 129
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 :-)
  #6 (permalink)  
Alt 12.08.18
Premium Mitglied
 
Registriert seit: Apr 2015
Beiträge: 415
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.
Adlerauge likes this.
__________________

Easy Trading Assistant
Thema geschlossen

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 12:30 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.
-----------------------------------------------------------------------------------------------------------------------------