Einzelnen Beitrag anzeigen
  #2 (permalink)  
Alt 16.08.17
next user next user ist offline
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von immic Beitrag anzeigen
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 anzeigen
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 anzeigen
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 anzeigen
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.