Einzelnen Beitrag anzeigen
  #3 (permalink)  
Alt 06.02.20
MA-EA MA-EA ist offline
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

So läufts bei mir ganz gut. Mit nen paar Pips Abweichung hier und da...
Code:
//-----------------------------------------------------------------------------------------------------------*/

extern int Stop_Loss=400;

//-----------------------------------------------------------------------------------------------------------*/

extern string TS="Trailing Stop";

input bool Trailing_Stop=false; // Zum Testen aus
extern int Trailing_Stop_Step=30; // Bei TSS 6 wurden gar keine Orders geöffnet.

//-----------------------------------------------------------------------------------------------------------*/

extern int Take_Profit=5000; // Zum Testen 5.000

//-------------------------------------------------------------------------------------------------------------
Code:
 //=============================================================================================================
// S T O P   L O S S
//=============================================================================================================

//SL auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(Stop_Loss<1){
  Buy_SL=0.0;
  Sel_SL=0.0;}

  else{
    Buy_SL=NormalizeDouble(Ask-Stop_Loss*_Point,_Digits);
    Sel_SL=NormalizeDouble(Bid+Stop_Loss*_Point,_Digits);}

//SL genauso groß wie Minstoplevels machen, wenn er kleiner ist:
double MSL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(Buy_SL<MSL)Buy_SL=MSL;
if(Sel_SL<MSL)Sel_SL=MSL;

//=============================================================================================================
// T A K E   P R O F I T
//=============================================================================================================

//TP auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(Take_Profit<1){
  Buy_TP=0.0;
  Sel_TP=0.0;}

  else{
    Buy_TP=NormalizeDouble(Ask+Take_Profit*_Point,_Digits);
    Sel_TP=NormalizeDouble(Bid-Take_Profit*_Point,_Digits);}
Code:
//=============================================================================================================
// M O D I F Y   O R D E R S
//=============================================================================================================

if(Trailing_Stop==true){

  for(i=OrdersTotal()-1;i>=0;i--){
    if(OrderSelect(i,SELECT_BY_POS)){
///////////////////////////////////////////////////////////////////////////////////////////////////////////////

      //Neuer BUY-"SL" (B_TS) Funktionen/Berechnungen
      if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol()){

        //BUY-Öffnungskurs - gesendeten BUY-SL, um Wert zu ermitteln, der vom Ask abgezogen wurde:
        double BOOP_BOSL = OrderOpenPrice() - OrderStopLoss();
        
        //ASK - BUY_SL double-Wert = neuer BUY-"SL", der bei OrderModify gesendet werden soll:
        double Buy_TS = Ask - BOOP_BOSL;

        //neuer BUY_"SL" - Trailing_Stop_Step.
        //Damit soll geprüft werden, ob BUY_"SL" (B_TS) nach gezogen werden muss.
        double BuyTS_TSS = NormalizeDouble( Buy_TS - Trailing_Stop_Step *_Point,_Digits);
        
        //Wenn aktueller/zuletzt gesendeter BUY_SL kleiner als
        //neuer BUY_SL - TSS ist, soll neuer BUY_"SL" (BUY_TS) gesendet werden:
        if( OrderStopLoss() < BuyTS_TSS ){
          
          if(IsTradeAllowed()==true)OM=OrderModify(OrderTicket(),OrderOpenPrice(),Buy_TS,OrderTakeProfit(),0,CLR_NONE);}}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////


      //Neuer SELL-"SL" (S_TS) Funktionen/Berechnungen
      if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol()){

        //gesendeter SELL_SL - Öffnungskurs, um double-Wert ermitteln, der zum BID dazu gerechnet wurde:
        double SOSL_SOOP = OrderStopLoss() - OrderOpenPrice();

        //BID + SELL-SL double-Wert = neuer SELL-"SL", der bei OrderModify gesendet werden soll
        double Sel_TS = Bid + SOSL_SOOP;

        double SelTS_TSS=NormalizeDouble(Sel_TS + Trailing_Stop_Step *_Point,_Digits);
        
        if( OrderStopLoss() > SelTS_TSS ){
          
          if(IsTradeAllowed()==true)OM=OrderModify(OrderTicket(),OrderOpenPrice(),Sel_TS,OrderTakeProfit(),0,CLR_NONE);}} }}}