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

berlin 01.12.20 20:09

error 4108
 
moin zusammen,

ich habe einen TP in einen EA eingefügt:

double tp = 0;
if(TP > 0) tp = NormalizeDouble(Ask+TP*Point,Digits);

beim testen führt der startegie tester nach vier sauber geöffneten und geschlossenen trades keine weitere mehr durch und meldet error 4108.

woran kann das liegen und wie kann ich das problem lösen?

vielen dank und lieben gruss,
berlin

traderdoc 01.12.20 20:12

4108 bedeutet "invalid ticket", d.h. da wird eine Order per Ticketnummer aufgrufen, die nicht existiert.

traderdoc

berlin 01.12.20 20:34

er arbeitet am anfang mit OrderTicket.

dachte grad ich kann es so lösen:

double tp = 0;
if(TP > 0) tp = NormalizeDouble(Bid-TP*Point,Digits);{
shortOrder = 0;}



bekomme beim kompilieren auch keine feheler meldung nur beim test beendet er weiterhin nach de 4. trade das traden

berlin 02.12.20 18:34

ich habe jetzt verschiedene dinge ausprobiert um mein OrderTicket problem zu lösen, z.b.:

1. > funktioniert nciht
double tp = 0;
if(TP > 0) tp = NormalizeDouble(Bid-TP*Point,Digits);OrderTicket(shortOrder = 0);

2. > funktioniert nicht
double tp = 0;
if(TP > 0) tp = NormalizeDouble(Bid-TP*Point,Digits);OrderTicket(0);

3. > funktioniert nicht
double tp = 0;
if(TP > 0) tp = NormalizeDouble(Bid-TP*Point,Digits);shortOrder = 0;

der Befehl das das Order ticket nach close mit TP zurückgesetzt wird muss ja aus meinem verständnis auch beim befehl des TP´s liegen.


aktuell wird ein trade nur mit eine gegensignal, folglich gegentrade geschlossen

das wird so geregelt, am beispiel für ein short signal:

if(longOrder > 0){
bool res = OrderClose(longOrder,Lots,Bid,1000);
if(res == true){
longOrder = 0;
}

}

rot markierter bereich ist aus meinem verständnis dafür zuständig das auch das orderticket zurückgesetzt wird.

als dachte ich mir kann ich den TP auch so regeln:
if(TP > 0) tp = NormalizeDouble(Bid-TP*Point,Digits);{
bool res = OrderClose(longOrder,Lots,Bid,1000);
(res == true){
longOrder = 0;
}
}

funktioniert auch nicht.

ich brauche einen klaren tip wie ich dem EA sagen kann das er nach dem TP das Orderticket auch zurücksetzt.

vielen dank dafür und lieben gruss,
berlin

Indikator-Trading 02.12.20 22:15

Hallo Berlin,

bezüglich deines Codes: Beim Öffnen des Trades, also bei OrderSend(...) ist die Rückgabe der Funktion die Ticketnummer. Diese speicherst du und überschreibst Sie erst wieder, sobald du die Order schließen solltest. Besser ist es aber die offenen Order in einer Schleife durchzugehen und abzufragen, ob es sich um eine Sell oder eine Buy Order handelt und ob diese zum EA und den Symbol passt.

Code:

  int res;
  for(int i=OrdersTotal()-1; i>=0; i--)
    {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
        break;
      if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol())
        continue;
      //--- check order type
      if(OrderType()==OP_BUY)
        res=OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
      if(OrderType()==OP_SELL)
        res=OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
    }


berlin 05.12.20 20:04

hey timo,

vielen dank für deine antwort. mir erschliesst es sich noch nicht, ich versuche mal meine gedanken zu erklären:

1. mich wundert warum die ticket nummer nicht überschrieben wird wenn der trade mit TP geschlossen wird. beim schliessen mit gegensignal passiert das doch auch.
vor allem ist der TP doch auch über die OrderSend funktion definiert.

2. warum bricht er denn erst nach der 4. order das trading ab?

3. zu deiner schleife. so eine ähnliche durchläuft er ja auch beim start einmal um zu checken ob offene positionen zum ea gehören um sie dann weiter zu manangen.
mir erschliesst sich noch nicht wie sich deine schleife auf eine mit TP geschlossene order bezieht.

4. kann das sein das rot markierte klammer eine zu viel ist?
beim kompilieren zeigt er mir folgenden fehler an: ")"unexpected token

int res;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false )
break;
if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol())
continue;
//--- check order type
if(OrderType()==OP_BUY)
res=OrderClose(OrderTicket(),OrderLots(),Bid,3,Whi te))
if(OrderType()==OP_SELL)
res=OrderClose(OrderTicket(),OrderLots(),Ask,3,Whi te))
}

5. ich hab die schleife hinter die erste geschweifte hauptklammer im void on tick bereich gesetzt und erhalte zusätzlich zu den fehlermeldungen aus 4. folgende warnungen:
"declaration of "res" hides local variable

vielen dank und lieben gruss,
berlin

Indikator-Trading 06.12.20 09:00

zu 1: Wenn der TP in einem Trade erreicht wird, dann bekommt das deine lokale Variable, in der du die Ticketnummer gespeichert hast nicht mit.

zu 2: Du greifst auf eine Order zu, welche nicht mehr Existiert. Versuche also erstmal den Grund dafür zu finden, wieso du auf eine falsche Ticketnummer zugreifen möchtest

zu 3: Die Schleife umgeht dein Problem auf eine nicht aktive Ticketnummer zuzugreifen. Sie ist natürlich nicht das was du suchst, du könntest sie aber so umbauen, dass sie das macht was du willst, ohne den Fehler zu generieren, welchen du jetzt hast.

zu 4: Ja, die Klammern am Ende müssen weg, hatte ich auf die schnelle aus einem anderen EA rauskopiert, gekürzt und nicht selbst getestet.

zu 5: Du hast dann im globalen Bereich die Variable res bereits definiert. du könntest jetzt das "int res;" weglassen, sofern die globale Variable überschrieben werden darf, oder das "res" in diesem Teil umbenennen.

Gruß Timo

berlin 15.12.20 09:16

moin zusammen,

ich habe das problem jetzt gelöst indem ich die orderausführung mit executeLong/Short aus der on tick funktion ausgegliedert hab.

verstanden hab ich das problem aber immer noch nicht. vor allem wegen folgender auffälligkeit:

schliesse ich einen EA trade manuell vom handy arbeitet der ea weiter. wird er aber wie oben beschrieben vom EA mit TP geschlossen kommt die fehlermeldung und das orderticket wird nicht zurückgesetzt.

bin, auch wenn das problem behoben ist offen für aufklärung :)

lieben gruss,
berlin

Indikator-Trading 15.12.20 13:35

Ich habe dir den Grund für dieses Problem schon im in der letzten Antwort genannt.


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