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)
-   -   Nach schließen einer Order durch SL/TP eine identische Order erstellen (http://www.expert-advisor.com/forum/showthread.php?t=1345)

Deviton 28.03.11 17:23

Nach schließen einer Order durch SL/TP eine identische Order erstellen
 
Hallo,

da ich vom Programmieren so viel Ahnung haben wie eine Kuh vom Eier legen und ich mir die Finger auch schon wund gegoogelt habe, hoffe ich dass mir hier geholfen wird.

Was ich brauche ist Folgendes:

Wenn eine aktive Order durch SL oder TP geschlossen wird, möchte ich, dass diese Order mit identischen Werten als neue Pending-Order erstellt wird.

Ich hoffe, dies ist programmiertechnisch möglich.

Ich sag schon mal herzlichen Dank im Voraus.

Gruß

Marco

forexAlexPH 08.12.11 02:34

Hi Marco,

hast du einen EA gefunden, der das macht?
Dieser EA würde mich auch interessieren.

Gruß Alex

hugo 08.12.11 02:45

So was suche ich auch ...

Programmierer 08.12.11 12:44

Diesen Wunsch scheinen ja schon mehr Leute gehabt zu haben, lasst uns so einen EA doch hier entwickeln!

Ich mach schon mal den Anfang, andere Programmierer sind herzlich willkommen, mitzumachen. Machen wir doch offenes Entwickeln, d.h. mit Erklärung, wie was programmiert wird, zumindest für den Anfang. Es ist das ja für alle interessant, wie man so einen EA entwickelt.

Zuerst müssen wir da konzeptionell rangehen:

Was brauchen wir:
Einen EA, der bestimmte offene Orders beobachten und, wenn diese durch SL oder TP geschlossen wurden, als Pending Order neu einstellen soll.

Welche Orders soll der EA beobachten?
Zum eine würde ich dem EA die Möglichkeit einbauen, das Währungspaar und/oder die Magicnnummer zu spezifizieren. Das macht also zwei Inputs notwendig (MagicNumber und Symbol). Damit kann man nämlich den EA so einstellen, dass nur einzelne Orders beobachtet und ggf. neu eröffnet werden, und andere Orders von ihm in Ruhe gelassen werden. Will man hingegen alle Orders von ihm prüfen lassen, lässt man beide Inputs einfach leer.

Wie soll der EA mitbekommen, wenn eine Order geschlossen wurde?
Leider bringt da MT4 keine richtig schöne Lösung von Hause aus mit, wie etwa Events. MT5 ist da besser. Für MT4 muss sich also eine selber programmieren, mir fallen da zwei Möglichkeiten ein:
  • Entweder man bildet sich eine Liste von zur Zeit offenen Orders und überprüft jeden Tick, ob aus dieser Liste Orders geschlossen worden sind.
  • Oder man beobachtet die OrderHistory und schaut, ob da eine neue Order hinzugefügt wurde, die vorher nicht da war.
Beide Lösungen haben natürlich Vor- und Nachteile. Ich bin eher für die erste Variante, da müssen wir nämlich nur einen Array mit offenen Orders vorhalten und müssen nicht die komplette History auf Veränderungen überprüfen.

Wie bekommen wir raus, ob die Order wirklich durch T/P bzw. S/L geschlossen wurde und nicht von Hand?
Orders, die von Hand oder durch einen EA geschlossen wurden, sollen ja nicht wieder eröffnet werden, oder?

Wenn ich an manchen Stellen zu weit um die Ecke denke und ihr bessere Lösungen habt, sagt bitte bescheid!

hugo 08.12.11 12:57

Klingt nach einem guten Anfang.

Programmierer 08.12.11 13:00

Was meint ihr zu folgender Fragestellung:
Sollen Orders, die von Hand oder durch einen EA geschlossen wurden, auch wieder eröffnet werden oder soll der EA ganz explizit nur nach T/P und S/L gucken?

hugo 08.12.11 13:03

Zitat:

Zitat von Programmierer (Beitrag 6813)
Was meint ihr zu folgender Fragestellung:
Sollen Orders, die von Hand oder durch einen EA geschlossen wurden, auch wieder eröffnet werden oder soll der EA ganz explizit nur nach T/P und S/L gucken?

Müsste er schon. Ansonsten müssten man vor jedem manuellen Schließen den EA erst abschalten. Dann wäre das ganze ziemlich sinnlos, oder?

Programmierer 08.12.11 13:05

Was soll geschehen, wenn eine Order geschlossen wurde?
Es soll ja eine gleiche Pending order eröffnet werden. D.h. also der EA schaut sich die geschl. Order an, speichert die Orderrichtung (LONG/SHORT), Eröffnungskurs, Ordervolumen, T/P und S/L. Dann muss er ermitteln, ob die neue Pending order eine STOP- oder LIMIT-Order ist (je nach Lage des aktuellen Preises zum Schlusskurs der alten Order; bei SL wirds ne STOP-Order, bei TP ne Limit-Order). Dann kann der EA also die neue Pending order mit identischen Werten eröffnen.

Programmierer 08.12.11 13:11

Zitat:

Zitat von hugo (Beitrag 6814)
Müsste er schon. Ansonsten müssten man vor jedem manuellen Schließen den EA erst abschalten. Dann wäre das ganze ziemlich sinnlos, oder?

Ja, wär nicht schlecht. Machen wir also weiter mit diesem Punkt.

Wie bekommen wir raus, ob die Order wirklich durch T/P bzw. S/L geschlossen wurde und nicht von Hand?
Orders, die von Hand oder durch einen EA geschlossen wurden, sollen ja nicht wieder eröffnet werden. In MQL4 gibts da leider keine einfache Lösung. Man kann:
  • in den OrderComment der geschlossenen Order schauen, wenn da [sl] bzw.[tp] drin steht, dann ist sie durcht T/P oder S/L geschlossen
  • überprüfen, ob der S/L oder T/P Preis erreicht oder überschritten wurde. Zu schauen, ob der S/L oder T/P-Preis erreicht wurde, reicht nicht, da der oft nicht auf den Zehntelpip erreicht wird, sondern überschritten.
Die zweite Lösung ist m.E. sicherer, denn was der Broker genau als OrderComment einstellt, wissen wir ja nicht. Der EA soll ja Broker-übergreifend funktionieren.

Programmierer 09.12.11 13:02

Liste der Anhänge anzeigen (Anzahl: 1)
so, ich habe nach den o.g. Spezifikation einen Reorder-EA programmiert. Hier kommt also ReorderEA_v0.1

Hier sind die Einstellungen:
  • WatchMagicNumber
    stellt die MagicNummer der Trades ein, die beobachtet werden sollen, lasst es bei -1, wenn ihr diesen Filter nicht anwenden wollt.
  • WatchSymbol
    stellt das Symbol (Währungspaar) der Trades ein, die beobachtet werden sollen, lasst es leer, wenn ihr diesen Filter nicht anwenden wollt.
  • TradeMagicNumber
    stellt die MagicNummer der Trades ein, die für die neuen Pending orders genutzt werden soll. Wenn ihr die gleiche einstellt wie oben oder oben -1 eingetragt habt, dann wird diese Order (sobald ausgelöst) auch wieder beobachtet. Wenn ihr das nicht wollt, stellt hier eine andere Nummer ein und nutzt oben nicht -1.

Der EA bindet viele Funktionen per include ein, die ich auch in meinen Kundenprojekten benutze. Daher kann ich auch nur die .EX4-Datei hochladen. Der Code wäre einige Hundert Zeilen lang.

Über Feedback würde ich mich freuen,
Daniel.


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