|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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 |
|
|||
4108 bedeutet "invalid ticket", d.h. da wird eine Order per Ticketnummer aufgrufen, die nicht existiert.
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
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 |
|
|||
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 |
|
|||
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 |
|
||||
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 |
|
|||
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 |
Lesezeichen |
|
|