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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3781
Beiträge: 36748
Benutzer: 5.984
Aktive Benutzer: 486
Links: 80
Wir begrüßen unseren neuesten Benutzer: Take2
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 2 Tagen
- Take2
vor 3 Tagen
- peterhardi
vor 4 Tagen
- tecdaxfan
vor 5 Tagen
- falcochen
vor 6 Tagen
- Siebi71

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 39
Gesamt: 40
Team: 0
Team:  
Benutzer:  Lena
Freunde anzeigen

Empfehlungen

Werbung

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 08.08.17
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 103
Lena befindet sich auf einem aufstrebenden Ast
Standard Error

Hallo zusammen,
ich habe mal wieder Probleme. Und zwar bekomme ich relativ oft Meldungen mit dem Fehlercode 130, 138, 4051.
Diese Fehler treten nur auf wenn ich eine Market-Order aufgeben will. Bei Pending-Orders gibt es keine Problem. Ich habe gelesen dass das Problem kommt, wenn man direkt einen TP und SL platzieren will. Als Lösung wird empfohlen den TP und SL direkt nach dem platzieren der Order mit OrderModify zu setzen.

Würdet ihr mir das auch empfehlen? Wäre es generell besser erst nur die Order zu setzen und in einem zweiten Schritt anzupassen?
Mit Zitat antworten
  #2 (permalink)  
Alt 08.08.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.856
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Wenn das bei Dir der Fall ist, dann gehört der Broker zu denjenigen, die es nicht zulassen, dass der SL bzw. TP gleichzeitig mitgesendet werden und dann muss man per OrderModify() nachträglich die Marken setzen. Prinzipiell das so zu tun würde ich nicht, aber man kann im Programm den EA entscheiden lassen, ob der Broker das Mitsenden toleriert oder nicht. Wenn nicht, dann werden halt zukünftig alle Order ohnen den Marken geöffnet.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt 08.08.17
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 103
Lena befindet sich auf einem aufstrebenden Ast
Standard

Okay, das den TP und SL rauszunehmen und später durch OrderModify zu setzen ist keine Lösung.
Dachte dann die Slippage wäre zu klein gewählt, aber auch eine Anpassung hier ist keine Lösung.
Habe gelesen man sollte direkt vor OrderSend mit RefreshRates() die Daten aktualisieren. Leider kein Unterschied. Es ist zum kotzen. Woran kann der Fehler "ERROR 138" denn noch liegen?
Mit Zitat antworten
  #4 (permalink)  
Alt 08.08.17
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 103
Lena befindet sich auf einem aufstrebenden Ast
Standard

Vielleicht findet jemand in der Funktion einen gravierenden Fehler?
Der Compiler gibt keine Fehler oder Warnung an. Im Test wird die Order auch gelegentlich ausgeführt. Es kommt aber wie schon gesagt ganz oft der Fehler 138.

Code:
//+------------------------------------------------------------------+
//| Funktion BUY                                                     |
//+------------------------------------------------------------------+
void Func_Buy () {
   if(Digits == 3) Multiplier = 100;
   if(Digits == 5) Multiplier = 10000;
   
   Verlustgrenze = Kapital / 100 * Risiko;
   Abstand       = NormalizeDouble((Bid - S1) * Multiplier, Digits);
   if(Abstand>150){Abstand=150;}
   Verlustgrenze = NormalizeDouble(Verlustgrenze / Abstand,2);
   Volumen       = NormalizeDouble((Verlustgrenze / 0.10)* 0.01,2);
   
   Stop_Loss   = NormalizeDouble(S1 -  4 * Point * 10, Digits);
   Take_Profit = NormalizeDouble(Bid + 1 * (Abstand) * Point * 10, Digits);
   R1          = NormalizeDouble(R1, Digits);

   if(Take_Profit<R1)
      {Take_Profit=R1;}
  
   int Ticket =  OrderSend(Symbol(),OP_BUY,Volumen,Ask,Slippage,Stop_Loss,Take_Profit,"BUY_MARKET",0,0,clrGreen);
   if(Ticket<0) 
     { 
      Print("OrderSend failed with error #",GetLastError()); 
     } 
   else 
      Print("OrderSend placed successfully");
}
Mit Zitat antworten
  #5 (permalink)  
Alt 09.08.17
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 103
Lena befindet sich auf einem aufstrebenden Ast
Standard

Ich bin wirklich ratlos. Wenn ich die Funktion einzeln über einen Button aufrufe wird alles korrekt ausgeführt.
Egal zu welcher Zeit und in welchem WP, keinerlei Probleme.
Woran kann es denn dann bitte liegen, dass die Order beim automatischen Aufruf nicht augeführt wird. Die vorherige Abfrage muss ja funktionieren, denn sonst würde die Funktion zum senden der Order garnicht erst aufgerufen.
Mit Zitat antworten
  #6 (permalink)  
Alt 09.08.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.856
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Dann würde ich Dir empfehlen, nach den entsprechenden Variablen eine Print-Ausgabe zu schreiben. Dann siehst Du doch evtl. Unterschiede zwischen der Button- und der EA-Variante.

Da Error 138 der Requote-Fehler ist, könnte man nun vor dem Benutzen von Ask und Bid noch RefreshRates() einfügen.

Ein while(!IsTradeAllowed()) Sleep(100); verhindert anfangs gesetzt, dass die Order geöffnet werden soll, obwohl ein Öffnen z.Z. nicht möglich wäre. Das würde ein Requote nach sich ziehen, aufgrund des Sleep.


traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #7 (permalink)  
Alt 09.08.17
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 103
Lena befindet sich auf einem aufstrebenden Ast
Standard

Bringt alles nichts. Ich habe jetzt wirklich alles abgeschaltet, bis auf die eine Funktion, wovon auch hier schon der Code steht.
Der einzige Unterschied, diese wird nach einer simplen if Abfrage aufgerufen.
Die Funktion alleine funktioniert auch. Daher ist es mir unbegreiflich, warum sie permanent den Fehler 138 auswirft, wenn die Funktion durch eine if Abfrage aufgrufen wird, anstatt durch den klick auf einen Button.

@traderdoc: Vielen Dank für den Tipp. Ich werde es ausprobieren. Ich hätte dazu aber noch eine kleine Frage. Wo und wie muss ich RefreshRates() einsetzen?

Geändert von Lena (09.08.17 um 12:46 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 09.08.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.856
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Am Besten eine Zeile vor dem Aufruf der Variablen Bid bzw. Ask.

Was sagen denn die Print-Ausgaben? Sind sie identisch?
Wenn ich das richtig gelesen habe, dann wird einmal per Button die Funktion Func_Buy() angesprungen, wo alles funktioniert und anderenfalls über eine if-Abfrage diese Funktion angesprungen, wo es nicht mehr funktioniert.
Ich bin der Meinung, wenn die Print-Abfragen identisch sind muss die zweite Variante auch funktionieren.

Was ist das für eine if-Abfrage?

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #9 (permalink)  
Alt 11.08.17
Mitglied
 
Registriert seit: Feb 2016
Beiträge: 103
Lena befindet sich auf einem aufstrebenden Ast
Standard

Das ist richtig. Ich kann die BUY Funktion einmal über einen Button aufrufen, oder aber automatisch über den EA.

Die if Abfrage ist nicht besondes kompliziert. Es wird nur abgeglichen ob der tiefste Punkt des Vortages einen festgelegten Wert tangiert.

if(iLow(NULL,PERIOD_D1,1)>=Var1){
//Aufruf BUY Funktion;
}

Inzwischen ist es mir egal!!! Ich habe den Fehler im Test noch immer. Auf dem Livekonto wird aber alles ganz korrekt ausgeführt. Es ist nur schade weil ich gerne sehen würde wie sich der EA über einen längeren Zeitraum schlägt.
Mit Zitat antworten
  #10 (permalink)  
Alt 11.08.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.856
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ich kann es nur immer wiederholen, keine Print-Ausgaben - keine bis schwierige Fehlerfindung, und das würde die Ausgabe des iLow() mit einbeziehen.

Aber gut.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
130, 138, 4051, error, error 130, error 138, error 4051, fehlercode 130, fehlercode 138, fehlercode 4051, mql4, programmierung, programmierung metatrader, programmierung mql4


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 05:49 Uhr.



spam firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 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.
-----------------------------------------------------------------------------------------------------------------------------