Einzelnen Beitrag anzeigen
  #2 (permalink)  
Alt 18.03.18
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Karabiner Beitrag anzeigen
Ich finde immer nur EA´s die den bereits vorhandenen SL aus dem aktiven Trade modifizieren, aber nie einen EA der den SL setzt und je nach Marktinfo versetzt, als Lösungsansatz.
Das ist aus meinen "Erinnerung wie's geht" Schnipseln: 2 Anfangspositionen, 1. Position fester SL + fester TP wird nicht mehr angerührt, 2. Position (um die geht es hier) anfangs genau derselbe SL + fester TP halben Block höher als die 1. Position.
Hat die 2. Position den Punkt erreicht, wo die erste das Ziel erreicht hat, wird zuerst ihr Ziel/TP rausgenommen (also open end), und dann nur noch dem aktuellen Preis mit TrailSL Abstand gefolgt, bis man rausfliegt.
Code:
// zu Anfang berechnete Werte: 
// - ProfitMoney ist der Eurowert der 1. TP Position
// - LongBE ist Einstieg+Spread+2*Slippage
// - TrailSL ist der trailing Abstand zum Preis
// voher schon bekannt: es ist eine laufende Long Position
   if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES))    // positions in "Trade"
   {
      //=== break even half range reached:
      //=== half range order: should be closed by TP
      //=== full range order: set order to BE auf Einstand
      if     (  LPosCnt==2 && LEveCnt==0   // not yet even
              && OrderProfit()>ProfitMoney // dist in € 
              && Bid>LongBE                // cur above entry
              && OrderStopLoss()<LongBE )  // SL below entry
      {
         if(OrderModify(OrderTicket(),OrderOpenPrice(),
                     LongBE,OrderTakeProfit(),0,Ctrail) )
         {  LEveCnt=1;                // set even counter
            Print(EAname+" LeC="+IntegerToString(LEveCnt,1) ); 
         }
      }
      //=== trailing: SL was LongBE, TS=block
      //=== take out TP if not yet counted as TPex Takeprofit rausnehmen
      else if(   LPosCnt==2 && LEveCnt==1 && TPxCnt==0
              && Bid>OrderOpenPrice()+(TrailSL) // above cur+block
              && OrderStopLoss()<Bid-TrailSL )  // below cur-block
      {
          if(OrderModify(OrderTicket(),OrderOpenPrice(),
                        LongBE,0,0,Ctrail) )
         {  LEveCnt=1; TPxCnt=1;                // set TP ex counter
            Print(EAname+" TPx="+IntegerToString(TPxCnt,1)); 
         }
      } 
      //=== activate trailing only  nur Trailing
      else if(   LPosCnt==2 && LEveCnt==1 && TPxCnt==1
              && Bid>OrderOpenPrice()+(TrailSL) // above cur+block
              && OrderStopLoss()<Bid-TrailSL )  // below cur-block
      {
         if(OrderModify(OrderTicket(),OrderOpenPrice(),
                        Bid-TrailSL,0,0,Ctrail) )
         {  LEveCnt=1; Print(EAname+" Lmo."); }
      }
   } // == end OrderSelect(n,SELECT_BY_POS,MODE_TRADES)
Ich hoffe, das hilft Dir die Vorgehensweise zu sehen. Bitte nicht einfach abkupfern, die Art nur "if OrderModify ist ok" abzufragen sollte man so nicht einfach machen, sondern besser den Fehlercode holen falls etwas nicht klappt. AVT