|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Zeitgleiche Orderschließung
hallo,
ich bin neu in der Sprache mq4 und versuche gerade mein erstes system zu schreiben. Bin überwältig von den Möglichkeiten / Angeboten der Funktionen, wenn man das mal mit ctl (Chart Studio) vergleicht. Mein Problem ist, das der EA eine Order ausführt, aber leider auch zeitgleich wieder schließt, obwohl weder sl oder tp vom Balken / Kerze erreicht wurden. Kann jemand mir das erklären. Wäre super, vielen Dank! Gruß lala12 |
|
|||
Servus,
ohne den Quellcode von Dir gesehen zu haben, würde ich mal tippen das Du etwas falsch programmiert hast wenn nicht das passiert was Du dir gerne wünscht. Am besten Du postest einfach den Quellcode und dann kann Dir mit Sicherheit auch geholfen werden. Fuchs |
|
|||
moin fuchs,
also ich habe gestern nochmals den Quelltext geändert: int start() { //---- double atraktuell, zielpreis; int total,ticket,expiration ; bool trigger; //---- if(Bars<20) // Keine Daten vorhanden für ATR { Print("bars less than 20"); return(0); } atraktuell = iATR(NULL,0,14,0); total=OrdersTotal(); zielpreis = Close[1] + atraktuell * 2; zielpreis = MathRound(zielpreis); expiration = TimeCurrent()+5 *60; // Wenn order nicht ausgeführt wird, wieder Ende des 5min Balkens schließen if(total<1) // keine offene Order { ticket= OrderSend(Symbol(),OP_BUYSTOP,1,zielpreis,2,zielpr eis-20,zielpreis+20,"Start",16384,expiration,Green); } } 1. Variante Ich glaube es liegt an der function OrderSend: Jetzt erhalte ich error 3, nachdem ich die expiration geändert habe. Wenn ich diesen Wert auf Null setzte wird die Order zwar ausgeführt, würde aber erwarten, dass durch den sl oder tp die Order wieder gesschlossen wird, wenn low <= sl oder high >= tp. 2. Variante ticket= OrderSend(Symbol(),OP_BUY,1,zielpreis,2,zielpreis-20,zielpreis+20,"Start",16384,0,Green); In diesem Fall wird die Order geöffnet und zeitglich wieder geschlossen. Beide Varianten bzw. Ergebnisse verstehe ich nicht. Danke und Gruß lala12 |
|
|||
ERR_INVALID_TRADE_PARAMETERS 3 Invalid trade parameters.
deine komplette Berechnung der Tradeparameter EntryPrice / SL / TP ist falsch. 1. du musst den absoluten Wert angeben und dabei richtig umrechnen. wenn du zum Beispiel bei EUR/USD den SL vom aktuellen Wert - 20 rechnest, dann kommt da irgendwas im Bereich von -18,7 raus! 1,3 - 20 = -18,7. ich glaube nicht das dein SL auf -18,7 liegen soll. für USD/JPY wäre es zwar möglich, aber 85,5 - 20 ist dann ein SL von 65,5 macht knackige 20.000 Punkte. ich weiß nicht ob du das willst, dann kannst du dir den SL gleich sparen. 2. du musst immer korrekt runden. nimm einfach Digits und runde auf die letzte Kommastelle die dir der Broker per Marketinfo für das jeweilige Währungspaar gibt. check das mal, nun solltest du dem richtigen Ergebnis schon näher kommen |
|
|||
hallo fuchs,
danke für das feedback; das system soll auf den dax (cfd) handeln; negative werte können also (praktisch) nicht entstehen; aufgerundet habe ich ja mit mathround() gearbeitet. kann aber sein, das 20 als 200 interpretiert wird; schaue mal inder marktinfo nach.. bei der Variante 1 gibt es ja keine Fehlermeldung auf (dax30 5min). Die Order wird aber nicht nach 5 min wieder geschlossen, wenn keine ausführung stattgefunden hat. gruß lala12 |
|
|||
okay, für den DAX wird es wohl funktionieren, aber dann bleibt noch das Thema Runden.
du musst den Wert SL/TP/Price mit normalizedouble auf Digits runden. dann sollte es gehen. |
|
|||
hallo,
ja wir nähern uns der lösung. wie du im bild sehen kannst, wird die order plaziert (pending), aber sie müsste m.M. nach 5 min wieder geschlossen werden, da das high < einstiegskus ist.. dies muss mit der ordergültikeit zusammenhängen, die aber 5 min ist bzw. wenn order nicht ausgeführt dann stornieren.. gruß lala12 |
Lesezeichen |
Stichworte |
mql4, order close, order schliessung |
|
|