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)
-   -   Trailing Stop in EAs einbauen (http://www.expert-advisor.com/forum/showthread.php?t=5828)

immic 13.08.17 18:46

Trailing Stop in EAs einbauen
 
Hallo,

ich bin auf der Suche nach einem TrailingStop, den ich in eine vorhandenen EA einbauen kann. Ich habe hier schon mehrere gefunden, sowohl intregrierte als auch Einzel-TrailingStops. Leider funktionieren alle nicht so richtig, wenn ich sie in meinen EA eingebaut habe. Alle lassen meinen Metatrader/Strategietester extrem langsam laufen bzw. abstürzen, sodass man kein vernünftige Backtesting machen kann. Bei denen, wo ich ein bisschen was im Visual Modus erkennen konnte, ist der TrailingStop nur teilweise ausgelöst worden und ist dann auch noch in die entgegengesetzte Richtgung mitgelaufen, anstatt stehen zu bleiben.
Habe es mit dem e-Trailing, dem TrailingStop, dem Trade-Protector und noch anderen versucht. Leider ohne Erfolg.

Hat einer eine Idee, wo man einen funktionierenden TrailingStop herbekommt, den man in EAs einbauen kann?
Würde mir enorm helfen :)

next user 16.08.17 05:33

Zitat:

Zitat von immic (Beitrag 39595)
Leider funktionieren alle nicht so richtig, wenn ich sie in meinen EA eingebaut habe.

Naja, Copy&Paste ohne zu verstehen was der entsprechende Code macht, führt halt oft zu Inkompatibilitäten.
Zitat:

Zitat von immic (Beitrag 39595)
Bei denen, wo ich ein bisschen was im Visual Modus erkennen konnte, ist der TrailingStop nur teilweise ausgelöst worden und ist dann auch noch in die entgegengesetzte Richtgung mitgelaufen, anstatt stehen zu bleiben.

Ein Trailingstop ist ja auch kein "fertiger Baustein" an sich, welcher immer so zu funktionieren hat, wie es die allgemeine Definition vorgibt.
Ein Trailingstop ist eine erstellte, kleine Programmlogik, die sich so verhält, wie sie implementiert wurde.
Es gibt daher nicht "den einen Triailingstop".
Zitat:

Zitat von immic (Beitrag 39595)
Habe es mit dem e-Trailing, dem TrailingStop, dem Trade-Protector und noch anderen versucht. Leider ohne Erfolg.

Z.B. der e-Trailing ist im Code ja sehr schlank. Da du ihn aber anscheinend nicht verstanden hast, gehe ich davon aus,
das auch dein EA nicht von dir selbst programmiert wurde, oder?
Zitat:

Zitat von immic (Beitrag 39595)
Hat einer eine Idee, wo man einen funktionierenden TrailingStop herbekommt, den man in EAs einbauen kann?

Wenn du einfach mal drüber nachdenkst, was ein möglicher Trailingstop macht, so müsste es auch für dich umzusetzen sein,
sofern du schon programmiert hast.

Im einfachsten Fall hast du zwei Variablen als Eingabeparameter, z.B. so
Code:

input int TrailingStop_Abstand = 15;
input int TrailingStop_Schritt = 2;

In diesem Fall soll der Stoploss um 2 Pips nachgezogen werden, wenn dieser 17 Pips vom Kurs entfernt ist,
sodass er wieder einen Abstand von 15 Pips zum Kurs hat.

Als nächstes überlegst du dir, welche Order du mit einem Trailingstop versehen möchtest.
Im einfachsten Fall gehst du einfach alle offenen Positionen durch, z.B. so
Code:

int OrdersT = OrdersTotal();

for(int i=OrdersT-1; i>=0; i--)
{
  // Alle offenen Orders durchgehen...
}

und behandelst jede Order, abhängig von Typ in die eine oder andere Richtung. Zum Beispiel so
Code:

input int TrailingStop_Abstand = 15;
input int TrailingStop_Schritt = 2;

int OrdersT = OrdersTotal();
string O_Sym;
double O_Point, O_Price;

for(int i=OrdersT-1; i>=0; i--)
{
  // Alle offenen Orders durchgehen...
  OrderSelect(i,SELECT_BY_POS);
  ResetLastError();
 
  O_Sym = OrderSymbol();
  O_Point = MarketInfo(O_Sym,MODE_POINT);  // Größe eines Punktes im Symbol der Order
 
  if(_Digits == 3 || _Digits == 5)
      O_Point = O_Point*10;
 
  if(OrderType() == OP_BUY)
  {
      O_Price = MarketInfo(O_Sym,MODE_BID);  // Aktuellen Preis des entsprechenden Symbols
     
      if(OrderStopLoss() < O_Price-((TrailingStop_Abstand+TrailingStop_Schritt) * O_Point))
      {
        if(!OrderModify(OrderTicket(),OrderOpenPrice(),O_Price-(TrailingStop_Abstand*O_Point),OrderTakeProfit(),0))
            Alert("Order #",IntegerToString(OrderTicket())," konnte nicht modifiziert werden! Fehler Nr: ",IntegerToString(GetLastError()));
      } 
  }
  else if(OrderType() == OP_SELL)
  {
      O_Price = MarketInfo(O_Sym,MODE_ASK);  // Aktuellen Preis des entsprechenden Symbols
     
      if(OrderStopLoss() > O_Price+((TrailingStop_Abstand+TrailingStop_Schritt) * O_Point))
      {
        if(!OrderModify(OrderTicket(),OrderOpenPrice(),O_Price+(TrailingStop_Abstand*O_Point),OrderTakeProfit(),0))
            Alert("Order #",IntegerToString(OrderTicket())," konnte nicht modifiziert werden! Fehler Nr: ",IntegerToString(GetLastError()));
      }
  }
}

Hinweis
- Im Beispiel werden alle offenen Positionen bearbeitet. Daher können diese logischerweise unterschiedliche Symbole haben.
Bedenke das die Stops von anderen Symbolen erst aktualisiert werden, wenn ein neuer Tick im aktuellen Symbol kommt, sofern der Code in der OnTick() plaziert wird.
- Für die Fehlermeldungen wäre diese Seite hilfreich.


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