Geschrieben 20. September 201015 Jr. comment_105224 Hallo zusammen, möchte meinen EA um einen Trailing Stop erweitern. Habe aber irgendwie "Null" plan wie ich ansetzen soll. Kann mir bitte jemand helfen ? vielen Dank schonmal Melden
Geschrieben 20. September 201015 Jr. comment_105226 Du machst am Besten folgendes. Beim Eröffnen der Position setzt du einen SL, der relativ weit von deinem Einstiegskurs entfernt ist. (Bei best. Brokern, z.B. MBT kannst du eh keinen SL einstellen). Deinen eigentlichen SL speicherst du dir in einer Variablen.Nun kannst du ganz einfach bei jedem Start-Durchlauf, bei dem eine Position offen ist, abfragen if(Bid <= StopLoss) OrderClose(...) (für eine Long-Position) Den Wert der Variablen "StopLoss" kannst du abhängig vom Kurs ändern, also bei steigendem Kurs nachziehen, was dann dein Trailingstop ist. Melden
Geschrieben 20. September 201015 Jr. Autor comment_105227 Du machst am Besten folgendes. Beim Eröffnen der Position setzt du einen SL, der relativ weit von deinem Einstiegskurs entfernt ist. (Bei best. Brokern, z.B. MBT kannst du eh keinen SL einstellen). Deinen eigentlichen SL speicherst du dir in einer Variablen.Nun kannst du ganz einfach bei jedem Start-Durchlauf, bei dem eine Position offen ist, abfragen if(Bid <= StopLoss) OrderClose(...) (für eine Long-Position) Den Wert der Variablen "StopLoss" kannst du abhängig vom Kurs ändern, also bei steigendem Kurs nachziehen, was dann dein Trailingstop ist. Danke für die Antwort, aber irgendwie kann ich nicht ganz nachvollziehen, wie du das genau meinst(sorry).? Ich verstehe das leider nicht so ganz. OrderClose (...), die schliesst doch alle Trades, oder ? Ich dachte eher so an OrderModify() und so. Bearbeitet 20. September 201015 Jr. von sill3000 Melden
Geschrieben 20. September 201015 Jr. comment_105228 Ich verstehe das leider nicht so ganz.Sorry, ich schreib manchmal wirres Zeug, das ich dann im Nachhinein selbst nichtmehr versteh. Dann nochmal detaillierter... Du eröffnest ja eine Position, indem du einen OrderSend()-Befehl absetzt. Hier gibst du Einstiegskurs, Take Profit, Stop Loss und noch ein paar Sachen an die du dann an deinen Broker schickst. Der hier angegebene Stop Loss ist nun am Server des Brokers aktiv. Gehen wir im Weiteren davon aus, dass du eine Long-Position eröffnest. Fällt nach dem Eröffnen deiner Position nun der Kurs unter den von dir bei OrderSend angegebenen Kurs, dann wird deine Position geschlossen.Willst du aber, dass dein Stop Loss sich ändert, dann hast du im Prinzip 2 Möglichkeiten.1) Du änderst den Stop Loss am Server (also den, den du bei OrderSend angegeben hast) über OrderModify(). Hier gibst du zu den erforderlichen Parametern einfach deinen neuen Stop Loss an.Nachteil: Wenn du deinen SL sehr häufig änderst, dann wird das irgendwann zuviel traffic2) Du setzt keinen Server-SL (oder nur einen sogenannten Katastrophen Stop sehr weit vom aktuellen Kurs entfernt) und kontrollierst das Schließen der Position über den EA selb.Hierzu gibt es die Funktion OrderClose().Nachteil: Wenn dein Rechner abstürzt, dann hast du erst mal keine Kontrolle mehr und könntest einen relativ großen Verlußt erleiden Ich bevorzuge trotzdem den zweiten Ansatz. Du überlegst dir also, wann du deinen Stop Loss nachziehen willst, beispielsweise ziehst du den SL immer dann nach, wenn der Kurs um 10 Punkte steigt.Diesen Stop Loss schickst du aber nicht an den Server, sondern schreibst ihn nur in eine EA-Variable. Fällt nun der Kurs unter diesen Stop Loss in deiner EA Variablen, dann rufst du die bereits oben erwähnte Funktion OrderClose() auf und schließt damit die Position (if Bid Ich hoffe das war jetzt besser verständlich. Schau dir einfach mal die Beschreibungen zu OrderSend(), OrderModify() und OrderClose() an! Melden
Geschrieben 20. September 201015 Jr. comment_105230 OrderClose (...), die schliesst doch alle Trades, oder ?nein, nur den Trade mit dem angegebenen Orderticket: bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE) Melden
Geschrieben 20. September 201015 Jr. comment_105233 Variante für long: //Trailing stop long if(TrailingStop > 0) { if(Bid - OrderOpenPrice() > Point * TrailingStop) { if(OrderStopLoss() < Bid - Point * TrailingStop) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen); continue; } } } ... und für short: //Trailing stop short if(TrailingStop > 0) { if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) { if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange); continue; } } } Was Du dann noch machen musst, ist vorab die Order per OrderSelect etc. auszuwählen und die Variable TrailingStop mit einem Wert > 0 versehen. Melden
Geschrieben 20. September 201015 Jr. Autor comment_105236 Variante für long:[...] ... und für short:[...] Was Du dann noch machen musst, ist vorab die Order per OrderSelect etc. auszuwählen und die Variable TrailingStop mit einem Wert > 0 versehen. danke dir, werde ich probieren, melde mich demnächst. Bearbeitet 21. September 201015 Jr. von whipsaw Zitat gekürzt Melden
Geschrieben 21. September 201015 Jr. Autor comment_105264 danke dir, werde ich probieren, melde mich demnächst. Wie geht denn das mit OrderSelect() ? *schäm* Melden
Geschrieben 22. September 201015 Jr. comment_105275 Wie geht denn das mit OrderSelect() ? *schäm*Am einfachsten merkst du dir in einer Variablen das Orderticket, das ist der Rückgabewert von OrderSend(). ... int Order_Ticket=OrderSend(...); ... Vor conglom-os Code musst du dann nur OrderSelect einfügen ... OrderSelect(Order_Ticket, SELECT_BY_TICKET); ... Mit diesem Befehl sagst du MT, auf welche Ordernummer sich die Funktionen OrderOpenPrice(), OrderStopLoss(), OrderTakeProfit()...beziehen. Melden
Geschrieben 22. September 201015 Jr. comment_105323 Am einfachsten merkst du dir in einer Variablen das Orderticket, das ist der Rückgabewert von OrderSend().Oder, wenn du dir das Ticket nicht gemerkt hast (was Vorteile hat, wie z.B. beim Absturz/Beenden des MT4), dann kannst du über deine Tickets iterieren und beim Finden des gewünschten Ticket weitermachen: if (OrdersTotal() > 0) // offene Aufträge vorhanden { for (int ii=0;ii < OrdersTotal();ii++) { if (OrderSelect(ii, SELECT_BY_POS, MODE_TRADES)) { if (Symbol() == OrderSymbol()) // Symbol des Fensters, in dem der EA läuft ist gleich dem OrderTicket { //... weitere Prüfungen (z.B. MagicNumber) und ggf. Aktionen } } } } Melden
Geschrieben 1. November 201015 Jr. Autor comment_107105 Wie nah( geringster Abstand) kann man eigentlich den TRailing-Stop vom aktuellen Kurs laufen lassen ? Legt das der Broker fest oder gibt es der Spread vor oder muss man das irgendwie berechnen. Lieben Gruss an alle ! Melden
Geschrieben 1. November 201015 Jr. comment_107112 Bei Active Traders sind es z.B. 15 Pips minimum Abstand, dieser lässt sich auch in der Plattform als solches nicht verändern.Es mag sein das andere Broker andere Minimum Abstände vorgeben. Ich habe jedoch auch schon Trailingstop Scripte gesehen/gehabt bei denen der Abstand geringer einstellbar war,als es die Plattform in der Standard einstellung zuließ. Inwiefern diese dann Live wirklich vom Broker akzeptiert werden, ist mir nicht bekannt. Melden
Geschrieben 1. November 201015 Jr. comment_107124 Legt das der Broker fest oder gibt es der Spread vor oder muss man das irgendwie berechnen.Du kannst das über MarketInfo(Symbol(),MODE_STOPLEVEL) abfragen. Melden
Geschrieben 8. November 201015 Jr. Autor comment_107415 ich habe alles ausprobiert, was ihr mir geschrieben habt und ich sage, danke, danke, danke ! Aber jetzt habe ich noch eine Fehlermeldung, die ich nicht verstehe. Was bedeuted das : Old tick EURUSD1 "altes Ticket " ?????????????? Danke für eure Hilfe Melden
Geschrieben 9. November 201015 Jr. comment_107422 Was bedeuted das : Old tick EURUSD1 "altes Ticket " ??????????????Das liegt nicht an dir. Die Meldung bekommst du, wenn der Server deines Brokers Kursdaten verzögert rausschickt, vermutlich weil er gerade gut ausgelastet ist.Das ist aber in der Regel kein Problem. Melden
Hallo zusammen,
möchte meinen EA um einen Trailing Stop erweitern.
Habe aber irgendwie "Null" plan wie ich ansetzen soll.
Kann mir bitte jemand helfen ?
vielen Dank schonmal