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)
-   -   Error (http://www.expert-advisor.com/forum/showthread.php?t=5812)

Lena 08.08.17 20:12

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?

traderdoc 08.08.17 21:39

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

Lena 08.08.17 21:39

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?

Lena 08.08.17 22:18

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");
}


Lena 09.08.17 07:32

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.

traderdoc 09.08.17 10:32

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

Lena 09.08.17 12:36

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?

traderdoc 09.08.17 16:57

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

Lena 11.08.17 14:07

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.

traderdoc 11.08.17 17:12

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:06 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