Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Probleme mit Trailing Stop

Geschrieben

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

Featured Replies

Geschrieben

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.

Geschrieben
  • Autor

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 von sill3000

Geschrieben

Ich verstehe das leider nicht so ganz.

Sorry, ich schreib manchmal wirres Zeug, das ich dann im Nachhinein selbst nichtmehr versteh. :99:

 

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 traffic

2) 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 :ph34r:

 

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!

Geschrieben

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)

Geschrieben

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.

Geschrieben
  • Autor

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 von whipsaw
Zitat gekürzt

Geschrieben
  • Autor

danke dir, werde ich probieren, melde mich demnächst.

 

 

Wie geht denn das mit OrderSelect() ? *schäm*

Geschrieben

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.

Geschrieben

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
    }
   }
  }
 }

  • 1 Monat später...
Geschrieben
  • Autor

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 !

Geschrieben

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.

Geschrieben

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.

Geschrieben
  • Autor

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

Geschrieben

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.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.