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

exergon 09.07.17 23:07

OrderDelete error 4108
 
Hallo Zusammen,

ich bin neu hier und finde das Forum echt klasse! Habe schon viel dadurch gelernt.

Aktuell bin ich an einem Problem, dass ich einfach nicht gelöst bekomme. Ich möchte eine Pending-Order aus dem Orderbuch mit Hilfe des Befehls OrderDelete() löschen. Anbei Code:

bool zz = false;
while(zz !=true)
{
zz=OrderDelete(TicketNummer[5]);
}

Die Variable "TicketNummer[5]" ist ein integer array und beinhaltet den richtigen Ticketnummerwert. Ich habe ihn ausgeben lassen und überprüft. Trotzdem bekomme ich folgende Fehlermeldung:

"OrderDelete error 4108 - unkown ticket for OrderDelete function"

Was mache ich falsch?

Ich habe schon aus der Not heraus - um die Funktion OrderDelete() zu umgehen - versucht über OrderModify den Einstieg zu verschieben um die Order dann später manuell zu löschen, aber da kommt dann "OrderModify error 1" egal wie ich den Kaufpreis, den Stoploss und den TakeProfit setze.

Wer kann mir helfen?

Danke Euch....

VG exergon :confused:

traderdoc 09.07.17 23:21

Manchmal habe ich den Eindruck, dass mit den Arrays etwas merkwürdig umgegangen wird. Deshalb würde ich mal probieren:

Code:

bool zz = false;
int ticket = TicketNummer[5];
while(zz !=true) {
  zz=OrderDelete(ticket);
}

Immer vorausgesetzt, dass 100%ig das Feld TicketNummer[5] eine TicketNumber einer PendingOrder enthält!!

traderdoc

next user 10.07.17 04:50

Mir ist auch mal sowas passiert, allerdigns war das Problem nicht auf meiner Seite. Als ich den Fehler nicht im Code finden konnte, habe
ich ne Order manuell modifizieren wollen. Auch das ging nicht.
Ein paar Minuten später stellte sich heraus, das der Broker die Anfrage mit einem Fehler beendete. Danach ging der selbe Code.

Ist hier bei dir aber wahrscheinlich nicht der Fall.
Zitat:

Zitat von traderdoc (Beitrag 39106)
Manchmal habe ich den Eindruck, dass mit den Arrays etwas merkwürdig umgegangen wird.

Ist bei mir glücklicherweise noch nicht passiert.

Beim Code, der eigentlich richtig aussieht ist es meist schwer, die Quelle des Problems zu finden.
Sofern das von Traderdoc nicht funktioniert (was ich stark bezweifle), kannst du es ja mal mit einer Test-Order und direkter Eingabe der Ordernummer versuchen.
Die Order ist aber wirklich pending, oder :D

exergon 10.07.17 09:23

Vielen Dank Euch beiden für die schnelle Antwort. :)

Traderdoc:
Klasse Idee...habe es eben probiert aber leider kommt die selbe Fehlermeldung. Wirklich verrückt und sehr crazy!

next_user:
Schon komisch manchmal....das stimmt. Und ich verstehe auch die Skepsis hinsichtlich meiner Aussage mit der "Pending-Order". Aber es ist wirklich eine Pending-Order die noch aktiv im Orderbuch steht.

Was ich auch nicht kapiere ist, dass die OrderModify-Funktion ebenfalls ins Leere läuft. Ich sehe im Journal dass die Daten der Order noch geändert werden wie von mir vorgegeben und dann steigt die Funktion aus mit dem error 1.

So ein Mist.... :confused:

traderdoc 10.07.17 11:12

Da kann was nicht stimmen, was auch immer es ist.
Also entweder ist es keine PendingOrder, obwohl Du sagst, es ist definitiv eine oder Dein MT4 hat ne Macke. Das ist alles schon vorgekommen.

Da hilft nur Neuinstallation des MT4.

Wenn bei OrderModify() der Error 1 kommt, liegt das meistens daran, dass versucht wird, Daten der PendingOrder zu ändern, die bereits geändert wurden.
Das passiert gern in Schleifen, dass OrderModify() dann mehrmals aufgerufen wird, obwohl die Änderung bereits geschehen war.
Nur wenn Du tatsächlich Änderungen siehst, dann wurde auch die Order richtig angesprochen, was wiederum bedeutet, dass mit der Funktion OrderClose() was nicht mehr stimmt.

Trotzdem, sehr merkwürdig.

traderdoc

exergon 10.07.17 11:44

Ja, das ist definitiv sehr komisch ....sehe ich auch so. Habe Stunden damit verbracht eine Lösung zu finden. Ohne Erfolg.

Werde den EA auf einem anderen PC nochmal testen. Danke Dir traderdoc für Dein Feedback! :-)

next user 10.07.17 12:14

Sag dann nacher mal, ob es auf'm anderen geklappt hat.

Und falls du Zeit hast, erstell doch mal ein paar Test-Orders und setze in deine EA-Initialisierung folgenden Code ein:
Code:

for(int i=OrdersTotal()-1; i>=0; i--)
{
  ResetLastError();

  if(!OrderSelect(i,SELECT_BY_POS))
      Print("Order konnte nicht selektiert werden. Fehler: ",IntegerToString(GetLastError()));
  else
  {
      if(OrderType() != OP_BUY && OrderType() != OP_SELL)
      {
        if(!OrderDelete(OrderTicket()))
            Print("Pending Order konnte nicht gelöscht werden. Fehler: ",IntegerToString(GetLastError()));
        else
            Print("IST NICHT WAHR ..."); 
      }
  } 
}

Würde mich echt interessieren, ob da bei allen der gleiche Fehler kommt. Wenn es hier klappen sollte, so würde ich mal an der Stelle suchen,
wo du deinen Array mit den Tickets füllst.

exergon 11.07.17 10:49

Update:
Ich habe den Fehler gefunden....es lag an mir! Der reine Code mit dem Löschen der Order stimmt. Aber im Ablauf ist mein Programm nach der Ausführung der Löschfunktion nochmal in die Delete-Schleife reingelaufen und da war dann die Order ja schon gelöscht. Daher musste ich einfach die Delete-Funktion nochmal verriegeln damit sie nicht zweimal ausgefürt wird. Nun passt alles....also mein Fehler!

Nochmal herzlichen Dank an Euch beide! :-)

VG exergon :)

next user 11.07.17 11:21

Und ich hatte schon fast angefangen an mystische "zufällige Codesegmente" zu glauben (wie im Film I Robot), die nicht zu erklären sind. :D

traderdoc 11.07.17 12:34

Sorry, aber was ich jetzt nicht verstehe ist, dass Du eingangs es so beschrieben hattest, als das die PendingOrder per OrderClose() überhaupt nicht geschlossen wurde. Hättest Du geschrieben, dass sie geschlossen wurde und trotzdem dieser Fehler angezeigt wird, dann hättest Du auch an der zeitlichen Abfolge ersehen können, dass der Fehler nach! dem eigentlichen und stattgefundenen! Close erscheint.

Also eigentlich eine völlig andere Situation!

traderdoc


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:40 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