Trailing Stops and Trailing Profit - page 6

 
deVries:


OrderComment can be overwritten by your broker

you are wanting... Now, as per my requirement, when the price would be say 7 pip [103.603] in profit, the Stop Loss of

1st and 2nd trade will become say 1 pip profit [103.543] and 3rd trade's Stop Loss will remain at 103.386.

make extern int BreakEven = 7

(* 10 ) correction at 5 digit broker to get pipvalue


ohh, Yes, this is certainly a Shortcoming. All my hard work since evening gone into vain now!

Tried a way to distinguish the trades depending on 'order comment' function and wrote a code.

Anyway, your given code will do the moving of Stop Loss part to BE or at desired point but still my problem with the 'Third' trade isn't solving.

I have also this BE moving part of code but I got stuck with the Non-moving SL for third trade.

Just got another idea, trying it now.

And was this Valid?

string comment_sell="Sell Order";

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red);

if (OrderComment()=="comment_sell") // ?

 

Is this Valid?

Say I have attached the EA to EURUSD chart.

if (Order_Symbol()==EURUSD)

Will it compare whether the current chart is of EURUSD or not?

 

Here is a way of distinguishing orders via 'Magic Number' I though.

Braces are not Balanced.

Is this Possible?

if (Order_Symbol==EURUSD) 
{ 
int Magic_Number_3=1303
int Magic_Number_2=1302
int Magic_Number_1=1301
}
if (Order_Symbol==GBPUSD) 
{ 
int Magic_Number_3=1603
int Magic_Number_2=1602
int Magic_Number_1=1601
}
if (Order_Symbol==GBPUSD) 
{ 
int Magic_Number_3=8703
int Magic_Number_2=8702
int Magic_Number_1=8701
}


 if (count==3) 
    {
    BuyOrder_1=OrderSend("EURUSD", iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1,NULL,Magic_Number_3, 0,Blue);
     if (BuyOrder_1>0) //Checking if the order was opened or not
      { 
       sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Buy order 1 sent successfully. Ticket=" + BuyOrder_1;
        count = count - 1; 
      }
       else 
         {
          iLastError = GetLastError();                               
           sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Error sending buy order 1. Error code=" + ErrorDescription(iLastError);
         } 
        }

  if (count==2) 
    {
     BuyOrder_2=OrderSend("EURUSD", iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_2,NULL,Magic_Number_2, 0,Blue);
      if (BuyOrder_2>0) 
      { 
      sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Buy order 2 sent successfully. Ticket=" + BuyOrder_2;
       count = count - 1; 
      }
     else {
          iLastError = GetLastError();
           sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Error sending buy order 2. Error code=" + ErrorDescription(iLastError);
          } 
         }

if (count==1) 
    {
     BuyOrder_3=OrderSend(EURUSD, iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_3,NULL,Magic_Number_1, 0,Blue);
      if (BuyOrder_3>0) 
      {
       sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Buy order 2 sent successfully. Ticket=" + BuyOrder_3;
        count = count - 1; 
      }
     else {
           iLastError = GetLastError();                               
            sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Error sending buy order 2. Error code=" + ErrorDescription(iLastError);
          }  
         }

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

for(cnt=OrdersTotal()-1;cnt>=0;cnt--)

                       { 

                            if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;

                               if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic_Number_3)

                                                      {

                                                          sl     = OrderStopLoss(); // Stop Loss. 

                                                            tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 

                   if(OrderType()==OP_BUY)

                                                  {

                                                     if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits)

                                                           && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits))

                                                            {

                                                                tStopLoss = NormalizeDouble(Bid-TrailingStop*vPoint,Digits);                            

                                                                  ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue);

                                if (ticket > 0)

                                                   {

                                                      Print ("TrailingStop #2 Activated: ", OrderSymbol(), ": SL", tStopLoss, ": Bid", Bid);                            

                                                   }

                                                 else{

                                                     iLastError = GetLastError();

                                                      }

                                                   }//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){

                                                 }//end if(OrderType()==OP_BUY){ 

 

                               if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic_Number_2)

                                                      {

                                                          sl     = OrderStopLoss(); // Stop Loss. 

                                                            tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 

                   if(OrderType()==OP_BUY)

                                                  {

                                                     if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits)

                                                           && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits))

                                                            {

                                                                tStopLoss = NormalizeDouble(Bid-TrailingStop*vPoint,Digits);                            

                                                                  ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue);

                                if (ticket > 0)

                                                   {

                                                      Print ("TrailingStop #2 Activated: ", OrderSymbol(), ": SL", tStopLoss, ": Bid", Bid);                            

                                                   }

                                                 else{

                                                     iLastError = GetLastError();

                                                      }

                                                   }//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){

                                                 }//end if(OrderType()==OP_BUY){  

 

                               if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  Magic_Number_1)

                                                      {

                                                          sl     = OrderStopLoss(); // Stop Loss. 

                                                            tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 

                   if(OrderType()==OP_BUY)

                                                  {

                                                                          ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue);

                                if (ticket > 0)

                                                   {

                                                      Print ("Stop Loss Unchanged");                            

                                                   }

                                                 else{

                                                     iLastError = GetLastError();

                                                      }

                                                   }//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){

                                                 }//end if(OrderType()==OP_BUY){

 
if (Order_Symbol== "EURUSD") //it has to be a string if you do it this way
{                              //==EURUSD)  fails
int Magic_Number_3=1303
int Magic_Number_2=1302
int Magic_Number_1=1301
}

this way you have to look for 3 different magicnumbers

it looks to me possible to do

 

Ok, after a Continuous Hard Working Spell (at least for me), made the EA 'Error Free'!

Posting the changes in short:

extern string    Order_Symbol="EURUSD";

int init()
{

}

int start()
{ 
int Magic_Number_1,Magic_Number_2,Magic_Number_3;
bool bOrderClosed;

//////////////////////////////////////SETTING MAGIC NUMBER///////////////////////////////////////////////////

Set_Magic_Number();

//////////////////////////////////////SETTING MAGIC NUMBER COMPLETED/////////////////////////////////////////


//////////////////////////////////////LOCKING MINIMUM PROFIT/////////////////////////////////////////////////

if(OrdersTotal()>0)
      { 
       for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
        {
         if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
//-----------------------------------------------------------------------------------------------------------------------

             if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1)
                  {
                   if (OrderProfit()<0.03)
                    {                                                     
                     if(OrderType()==OP_BUY)
                      {                                                  
                        bOrderClosed = closeBuyOrder(iOrderType_Buy); //Closing Buy order
                          if(bOrderClosed)
                            {                             
                              Print("Buy Order 1 Closed");              
                            }
                       else {
                             iLastError = GetLastError();                                       
                            }//end else if(bOrderClosed)
                          }//end if(OrderType()==OP_BUY)
//==========================================================================================================================
                         if(OrderType()==OP_SELL)
                           {                                                      
                             bOrderClosed = closeSellOrder(iOrderType_Sell); //Closing Sell order
                               if(bOrderClosed)
                                  {
                                    Print("Sell Order 1 Closed");               
                                   }
                               else{    
                                    iLastError = GetLastError();                                
                                   }//end else if(bOrderClosed)
                                  }//end if(OrderType()==OP_SELL)                                            
                                 }// if (OrderProfit()<0.03)                                    
                                }// if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1)
 //-------------------------------------------------------------------------------------------------------------------------
                        if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_2)
                            {
                              if (OrderProfit()<0.02)
                                {                                                    
                                   if(OrderType()==OP_BUY)
                                            {                                                       
                                              bOrderClosed = closeBuyOrder(iOrderType_Buy); //Closing Buy order 
                                               if(bOrderClosed)
                                                  {
                                                    Print("Buy Order 2 Closed");          
                                                  }
                                              else{
                                                   iLastError = GetLastError();                                        
                                                  }//end else if(bOrderClosed)
                                               }//end if(OrderType()==OP_BUY)
//==========================================================================================================================
                         if(OrderType()==OP_SELL)
                             {                                                       
                               bOrderClosed = closeSellOrder(iOrderType_Sell); //Closing Sell order        
                                 if(bOrderClosed)
                                    {
                                      Print("Sell Order 1 Closed");
                                    }
                                else{
                                     iLastError = GetLastError();                                        
                                    }//end else if(bOrderClosed)
                                   }//end if(OrderType()==OP_SELL)                                         
                                  }// if (OrderProfit()<0.02)                                    
                                 }// if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_2)
//------------------------------------------------------------------------------------------------------------------------------
                        if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_3)
                            {
                             Print("Don't Close this Third Order");                                                    
                            }// if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_3)
//-------------------------------------------------------------------------------------------------------------------------------
                           } //end for(cnt=OrdersTotal()-1;cnt>=0;cnt--) 
                          }// if(OrdersTotal()>0)
//////////////////////////////////////MINIMUM PROFIT LOCKED////////////////////////////////////////////////// 

if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop); 

//count open buy orders.

iOpenOrders_Buy = CntOrd(iOrderType_Buy,Symbol());

//count open sell orders.

iOpenOrders_Sell = CntOrd(iOrderType_Sell,Symbol()); 

//Conditional Part for Trade


if(Buy condition Met)
{
//Close Open Sell Positions 

double OpenPrice=Ask;
                int count=3;
                double  dTakeProfitPrice_1,dTakeProfitPrice_2,dTakeProfitPrice_3;
                dStopLossPrice = NormalizeDouble(OpenPrice - StopLoss * dPip,Digits);

                dTakeProfitPrice_1 = NormalizeDouble(OpenPrice + TakeProfit_1 * dPip,Digits);
                dTakeProfitPrice_2 = NormalizeDouble(OpenPrice + TakeProfit_2 * dPip,Digits);
                dTakeProfitPrice_3 = NormalizeDouble(OpenPrice + TakeProfit_3 * dPip,Digits);              

iLastError = 0;
   if (count==3) 
    {
      BuyOrder_1=OrderSend(Order_Symbol, iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",Magic_Number_1, 0,Blue);
       if (BuyOrder_1>0) //Checking if the order was opened or not
        { 
         count = count - 1; 
        }

   else {
          iLastError = GetLastError();                            

        } 
       }
   if (count==2) 
    {
     BuyOrder_2=OrderSend(Order_Symbol, iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_2, "Buy Order",Magic_Number_2, 0,Blue);
      if (BuyOrder_2>0) 
       {
        count = count - 1;
       }
  else {
        iLastError = GetLastError();
       } 
      }
   if (count==1)
    {
     BuyOrder_3=OrderSend(Order_Symbol, iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_3, "Buy Order",Magic_Number_3, 0,Blue);
      if (BuyOrder_3>0) 
       {      
        count = count - 1;
       }
  else {
        iLastError = GetLastError();                             
        }  
       }
      } 

  if (Sell condition met)
    { 

      //Close Open Buy Orders

        OpenPrice=Bid;
        count=3;                

      double SellOrder_1,SellOrder_2,SellOrder_3;
      dStopLossPrice = NormalizeDouble(OpenPrice + StopLoss * dPip,Digits);                

                dTakeProfitPrice_1 = NormalizeDouble(OpenPrice - TakeProfit_1 * dPip,Digits);
                dTakeProfitPrice_2 = NormalizeDouble(OpenPrice - TakeProfit_2 * dPip,Digits);
                dTakeProfitPrice_3 = NormalizeDouble(OpenPrice - TakeProfit_3 * dPip,Digits);               

      iLastError = 0;
      if (count==3)
       {
        SellOrder_1=OrderSend(Order_Symbol, iOrderType_Sell , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice_1 , "Sell Order",Magic_Number_1, 0,Red);               
          if (SellOrder_1>0) //Checking if the order was opened or not
           {   
            count = count - 1; 
           }
      else {
            iLastError = GetLastError();                             
           } 
          }
      if (count==2)
         {
           SellOrder_2=OrderSend(Order_Symbol, iOrderType_Sell , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice_2 , "Sell Order",Magic_Number_2, 0,Red);             
             if (SellOrder_1>0) //Checking if the order was opened or not
              {    
                count = count - 1; 
              }
         else {
               iLastError = GetLastError();                            
              } 
             }
       if (count==1) 
         {
           SellOrder_3=OrderSend(Order_Symbol, iOrderType_Sell , LotSize,OpenPrice,Slippage ,dStopLossPrice,dTakeProfitPrice_3 , "Sell Order",Magic_Number_3, 0,Red);                
            if (SellOrder_3>0) //Checking if the order was opened or not
              { 
                count = count - 1; 
              }
         else {
               iLastError = GetLastError();                            
              } 
             }
            }
           }

void TrailOrder(double Trailingstart,double Trailingstop)
    {
     int ticket = 0;
      double tStopLoss;
       int cnt;
        double vPoint,vSlippage; 
         double sl;
          int Magic_Number_1,Magic_Number_2,Magic_Number_3;
           Set_Magic_Number();

if (Digits == 3 || Digits == 5)
    {vPoint = Point * 10; vSlippage = Slippage * 10;}
    else
    {vPoint = Point; vSlippage = Slippage;}
RefreshRates();

if(OrdersTotal()>0)
{
 for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
  {       
   if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
                         if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1)
                          {
                           sl = OrderStopLoss(); // Stop Loss. 
                             tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 
                               if(OrderType()==OP_BUY)
                                {
                                  if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits)
                                  && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits))
                                    {
                                     tStopLoss = NormalizeDouble(Bid-TrailingStop*vPoint,Digits);                           
                                       ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue);
                                if (ticket > 0)
                                   {
                                     Print ("TrailingStop #2 Activated: ", OrderSymbol(), ": SL", tStopLoss, ": Bid", Bid);                            
                                   }
                                    else{
                                         iLastError = GetLastError();
                                          }
                                         }//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){
                                        }//end if(OrderType()==OP_BUY){
//-------------------------------------------------------------------------------------------------------------------------------------
                       
 
if (OrderType()==OP_SELL)
                              {
                                 if (Bid < NormalizeDouble(OrderOpenPrice()-TrailingStart*vPoint,Digits)
                                   && (sl >(NormalizeDouble(Ask+(TrailingStop+TrailingStep)*vPoint,Digits)))
                                    || (OrderStopLoss()==0))
                                      {               
                                        sl = NormalizeDouble(Ask+TrailingStop*vPoint,Digits);                              
                                                ticket = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Red);                       
                                    if (ticket > 0)
                                              {
                                               Print ("Trailing #2 Activated: ", OrderSymbol(), ": SL ",sl, ": Ask ", Ask);
                                               }
                                          else{
                                               iLastError = GetLastError();
                                              }
                                             }//end if (Bid < NormalizeDouble(OrderOpenPrice()-TrailingStart*vPoint,Digits)
                                            }//end if (OrderType()==OP_SELL)
                                           }// end if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_1) 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////              
                 if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_2)
                     {
                      sl = OrderStopLoss(); // Stop Loss.
                       tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss.
                        if(OrderType()==OP_BUY)
                         {
                          if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits)
                            && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits))
                             {
                               tStopLoss = NormalizeDouble(Bid-TrailingStop*vPoint,Digits);                           
                                ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue);
               if (ticket > 0)
                              {
                                Print ("TrailingStop #2 Activated: ", OrderSymbol(), ": SL", tStopLoss, ": Bid", Bid);                           
                              }
                          else{
                               iLastError = GetLastError();
                              }
                             }//end if(Ask> NormalizeDouble(OrderOpenPrice()+TrailingStart* vPoint,Digits) && tStopLoss < NormalizeDouble(Bid-(TrailingStop+TrailingStep)*vPoint,Digits)){
                           }//end if(OrderType()==OP_BUY){
//-------------------------------------------------------------------------------------------------------------------------------------
                 if (OrderType()==OP_SELL)
                       {
                         if (Bid < NormalizeDouble(OrderOpenPrice()-TrailingStart*vPoint,Digits)
                             && (sl >(NormalizeDouble(Ask+(TrailingStop+TrailingStep)*vPoint,Digits)))
                               || (OrderStopLoss()==0))
                              {   
                               sl = NormalizeDouble(Ask+TrailingStop*vPoint,Digits);
                                ticket = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Red);                                
                        if (ticket > 0)
                                       {
                                        Print ("Trailing #2 Activated: ", OrderSymbol(), ": SL ",sl, ": Ask ", Ask);                                                          
                                       }
                                   else{
                                        iLastError = GetLastError();                                    
                                       }
                                    }//end if (Bid < NormalizeDouble(OrderOpenPrice()-TrailingStart*vPoint,Digits)
                                   }//end if (OrderType()==OP_SELL)
                                  }// end if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_2)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
              if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_3)
                     {
                       sl = OrderStopLoss(); // Stop Loss.
                         tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss.                          
                           if(OrderType()==OP_BUY)
                               {
                                ticket = OrderModify(OrderTicket(),OrderOpenPrice(),tStopLoss,OrderTakeProfit(),0,Blue);
                if (ticket > 0)
                                {
                                 Print ("Stop Loss Unchanged");                           
                                }
                            else{
                                 iLastError = GetLastError();
                                }
                               }//end if(OrderType()==OP_BUY)                           
//------------------------------------------------------------------------------------------------------------------------------
                if (OrderType()==OP_SELL)                                     
                      {                 
                       sl= OrderStopLoss(); // Stop Loss.
                         ticket = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Red);                               
                      if (ticket > 0)
                                      {
                                       Print ("Trailing #2 Activated: ", OrderSymbol(), ": SL ",sl, ": Ask ", Ask);                                                                         
                                      }
                                  else{
                                       iLastError = GetLastError();                                 
                                      }
                                     }//end if (OrderType()==OP_SELL)
                                    }// end if(OrderSymbol() == Symbol() && OrderMagicNumber() ==Magic_Number_3)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                                  }//end for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
                                }// end if(OrdersTotal()>0)
                               return(0);
                              }// end void TrailOrder(double Trailingstart,double Trailingstop)

 bool closeBuyOrder(int iBuytype)
                              {
                               bool bClosed_;
                                int Magic_Number_1,Magic_Number_2,Magic_Number_3;
                                 Set_Magic_Number();
                                if(OrdersTotal()>0)
                                  {
                                   for(int Counter=OrdersTotal()-1;Counter>=0;Counter--)
                                    {
                                     OrderSelect(Counter,SELECT_BY_POS,MODE_TRADES);
                                      if(iBuytype==OP_BUY && OrderType()==OP_BUY)
                                        {
//------------------------------------------------------------------------------------------------------------------------------------
                                          if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_1)
                                             {
                                              RefreshRates();
                                               OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits), Slippage);
                                             }
//-------------------------------------------------------------------------------------------------------------------------------------
                                                if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_2)
                                                 {
                                                   RefreshRates();
                                                    OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits), Slippage);
                                                 }
//-------------------------------------------------------------------------------------------------------------------------------------
                                                if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_3)
                                                 {
                                                   RefreshRates();                                                    
                                                    Print("Don't Close this Thrid Order");
                                                 }
//-------------------------------------------------------------------------------------------------------------------------------------
                                              }//if(iBuytype==OP_BUY && OrderType()==OP_BUY)
                                           }//for(int Counter=OrdersTotal()-1;Counter>=0;Counter--)
                                       }//if(OrdersTotal()>0)
                                return(bClosed_);
                            }//end bool closeBuyOrder(int iBuytype)
//==========================================================================================
                             bool closeSellOrder(int iSelltype)
                              {
                               bool bClosed_;
                               int Magic_Number_1,Magic_Number_2,Magic_Number_3;
                                Set_Magic_Number();
                                 if(OrdersTotal()>0)
                                  {
                                   for(int Counter=OrdersTotal()-1;Counter>=0;Counter--)
                                   {
                                    if(!OrderSelect(Counter,SELECT_BY_POS,MODE_TRADES)) continue;
                                      if(iSelltype==OP_SELL && OrderType()==OP_SELL)
                                         {
//------------------------------------------------------------------------------------------------------------------------------------                                              
                                          if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_1)
                                             {
                                              RefreshRates();
                                               bClosed_ = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slippage);
                                             }
//-------------------------------------------------------------------------------------------------------------------------------------
                                                if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_2)
                                                 {
                                                   RefreshRates();
                                                    bClosed_ = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slippage);
                                                 }
//-------------------------------------------------------------------------------------------------------------------------------------
                                                if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number_3)
                                                 {
                                                   RefreshRates();
                                                    Print("Don't Close this Thrid Order");
                                                 }
//-------------------------------------------------------------------------------------------------------------------------------------
                                              }//end if(iSelltype==OP_SELL && OrderType()==OP_SELL)
                                             }//for(int Counter=OrdersTotal()-1;Counter>=0;Counter--)
                                           }//end if(OrdersTotal()>0)                                      
                                      return(bClosed_);
                            }//end bool closeSellOrder(int iSelltype)
//==========================================================================================

void Set_Magic_Number()
 {
  int Magic_Number_1,Magic_Number_2,Magic_Number_3;
   if (Order_Symbol=="EURUSD") 
    { 
     Magic_Number_1=1301;
     Magic_Number_2=1302;
     Magic_Number_3=1303; 
    }

   if (Order_Symbol=="GBPUSD") 
    { 
     Magic_Number_1=1601;
     Magic_Number_2=1602;
     Magic_Number_3=1603;
    }

   if (Order_Symbol=="AUDUSD") 
    { 
     Magic_Number_1=8701;
     Magic_Number_2=8702;
     Magic_Number_3=8703;
    }
return (0);
}

I have confusion with Set_Magic_Number() function.

Have I defined it correctly? Also while calling it in other functions, will it work correctly?

Regards

 
Arav007:

I have confusion with Set_Magic_Number() function.

Have I defined it correctly? Also while calling it in other functions, will it work correctly?

Regards

i read here your symbol is not "EURUSD"

you have to use the right symbol

 
deVries:

i read here your symbol is not "EURUSD"

you have to use the right symbol

It's not a problem. The symbol of the broker where I'm testing the EA is EURUSD,GBPUSD....

If I attach the EA to broker where the symbol is EURUSDpro, I'll just add the 'pro'.

Have you reviewed my code?

The minimum profit feature is a 'Failure'.

It's just closing all open trades whenever it's getting executed irrespective of Loss/Profit in the trades!

But my aim is not like this.

I want that if a trade goes into profit zone and then the market starts to turn back, this 'Minimum Profit' feature will ensure

that trade got closed with my desired minimum profit.

And here also I don't want that 'Third' trade to be affected by this feature.

I tried to write something like that but now it's not working.

 
Arav007:

It's not a problem. The symbol of the broker where I'm testing the EA is EURUSD,GBPUSD....

If I attach the EA to broker where the symbol is EURUSDpro, I'll just add the 'pro'.

Have you reviewed my code?

The minimum profit feature is a 'Failure'.

It's just closing all open trades whenever it's getting executed irrespective of Loss/Profit in the trades!

But my aim is not like this.

I want that if a trade goes into profit zone and then the market starts to turn back, this 'Minimum Profit' feature will ensure

that trade got closed with my desired minimum profit.

And here also I don't want that 'Third' trade to be affected by this feature.

I tried to write something like that but now it's not working.


You make it far too complex because you have no idea how to handle this

the more you read and try to program yourself the easier it becomes to make more complex things

but start with simple things if you start to make a program work for one trade then later you try with more trades

you have to learn a lot.

if you start picking a short simple written program and do some changes on that for testing

you might learn how that program is working

Your problem you started

See how i would do it

//+------------------------------------------------------------------+
//|                                                  MACD Sample.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "https://www.mql4.com"

input double TakeProfit    =50;
input double Lots          =0.1;
input int    MagicNumber   =16384;
input int    TakeProfit1   = 15;
input int    TakeProfit2   = 25;
input int    TakeProfit3   = 0;
input int    StopLoss      = 100;   
input double BreakEven     =10;
input double BreakEvenSL   =5;
input double TrailingStop  =30;
input double TrailingStep  =30;
input int    SlippagePips  =3;
input double MACDOpenLevel =3.0;
input double MACDCloseLevel=2;
input int    MATrendPeriod =26;

int count,countbuy,countsell;


//++++ These are adjusted for 5 digit brokers.
int     pips2points;      // slippage  3 pips    3=points    30=points
double  pips2dbl;         // Stoploss 15 pips    0.015      0.0150
int     Digitspips;      // DoubleToStr(dbl/pips2dbl, Digitspips)
int     Slip;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  if(Digits % 2 == 1)  // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
     {pips2dbl = Point*10; pips2points = 10;   Digitspips = 1;}
     else {pips2dbl = Point;    pips2points =  1;   Digitspips = 0;}
     // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl 
  Slip = pips2points * SlippagePips;  //Slippage        
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick(void)
  {
   double MacdCurrent,MacdPrevious;
   double SignalCurrent,SignalPrevious;
   double MaCurrent,MaPrevious;
   int    cnt,ticket,total;
//---
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external 
// variables (Lots, StopLoss, TakeProfit, 
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
//---
   if(Bars<100)
     {
      Print("bars less than 100");
      return;
     }

//---
   if((countbuy>0)||(countsell>0))
     {
      int CMD;
      double SL,TP,price;
      int LastError = 0;
      RefreshRates();
      if (countbuy>0)
           {
            count=countbuy;
            CMD = OP_BUY;
            price = Ask;
            if(StopLoss>0)SL= price-StopLoss*pips2dbl;
            if(count==3 && TakeProfit1>0)TP= price+TakeProfit1*pips2dbl;
            if(count==2 && TakeProfit2>0)TP= price+TakeProfit2*pips2dbl;
            if(count==1 && TakeProfit3>0)TP= price+TakeProfit3*pips2dbl;
           } 
        else 
           {
            count=countsell;
            CMD = OP_SELL;
            price = Bid;
            if(StopLoss>0)SL= price+StopLoss*pips2dbl;
            if(count==3 && TakeProfit1>0)TP= price-TakeProfit1*pips2dbl;
            if(count==2 && TakeProfit2>0)TP= price-TakeProfit2*pips2dbl;
            if(count==1 && TakeProfit3>0)TP= price-TakeProfit3*pips2dbl;
           }             
      ticket=OrderSend(Symbol(), CMD, Lots, price , Slip, SL, TP,"macd sample",MagicNumber,0,Green);
      if (ticket>0) //Checking if the order was opened or not
           { 
            OrderPrint();
            countbuy--;
            countsell--; 
           }
        else {
              LastError = GetLastError();                               
              if(CMD==OP_BUY)Print("Error sending buy order "+count+ ". Error code=  " + LastError);
              if(CMD==OP_SELL)Print("Error sending sell order "+count+ ". Error code=  " + LastError);
             }     
   if((countbuy>0)||(countsell>0))return;
   } 

//--- to simplify the coding and speed up access data are put into internal variables
   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
   MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
   MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
//--- it is important to enter the market correctly, but it is more important to exit it correctly...   
   total=0;
   for(cnt = OrdersTotal()-1; cnt>=0 ; cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)break;
      if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)continue;      
      if(OrderType()<=OP_SELL)    // check for opened position 
        {
         total++;
         //--- long position is opened
         if(OrderType()==OP_BUY)
           {
            //--- should it be closed?
            if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && 
               MacdCurrent>(MACDCloseLevel*pips2dbl))
              {
               //--- close order
               OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Violet);
              }
            //--- check for breakeven  
            if(BreakEven>0)
              {
               if(Bid-OrderOpenPrice()>=pips2dbl*BreakEven)
                 {
                  if(OrderStopLoss()<OrderOpenPrice())
                    {
                     //--- modify order
                     if(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+(BreakEvenSL*pips2dbl),OrderTakeProfit(),0,Green);
                    }
                 }
              }                   
            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if(OrderOpenPrice()<OrderStopLoss())
                 {
                  if(OrderStopLoss()<Bid-pips2dbl*(TrailingStop+TrailingStep))
                    {
                     //--- modify order
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-pips2dbl*TrailingStop,OrderTakeProfit(),0,Green);
                    }
                 }
              }
           }
         else // go to short position
           {
            //--- should it be closed?
            if(MacdCurrent<0 && MacdCurrent>SignalCurrent && 
               MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*pips2dbl))
              {
               //--- close order and exit
               OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Violet);
              }
            //--- check for breakeven  
            if(BreakEven>0)
              {
               if(OrderOpenPrice()-Ask>pips2dbl*BreakEven)
                 {
                  if(OrderStopLoss()>OrderOpenPrice())
                    {
                     //--- modify order
                     if(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-(BreakEvenSL*pips2dbl),OrderTakeProfit(),0,Green);
                    }
                 }
              }                  
            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()>OrderStopLoss())&&(OrderStopLoss()>Point))
                 {
                  if(OrderStopLoss()>(Ask+pips2dbl*(TrailingStop+TrailingStep)))
                    {
                     //--- modify order
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+pips2dbl*TrailingStop,OrderTakeProfit(),0,Red);
                    }
                 }
              }
           }
        }
     }
   
   if(total<1)
     {
      countbuy = 0;
      countsell = 0;
      //--- no opened orders identified
      if(AccountFreeMargin()<(3000*Lots))//3trades*1000
        {
         Print("We have no money. Free Margin = ",AccountFreeMargin());
         return;
        }
      //--- check for long position (BUY) possibility
      if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && 
         MathAbs(MacdCurrent)>(MACDOpenLevel*pips2dbl) && MaCurrent>MaPrevious)
        {
        countbuy = 3;//we can open
        }
      //--- check for short position (SELL) possibility
      if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && 
         MacdCurrent>(MACDOpenLevel*pips2dbl) && MaCurrent<MaPrevious)
        {
        countsell = 3;//we can open
        }      
     }
//---
  }
//+------------------------------------------------------------------+

                                            

not needed different inputs for Symbol()

3 different Magicnumbers..

 
Arav007:

It's not a problem. The symbol of the broker where I'm testing the EA is EURUSD,GBPUSD....

If I attach the EA to broker where the symbol is EURUSDpro, I'll just add the 'pro'.

Have you reviewed my code?

The minimum profit feature is a 'Failure'.

It's just closing all open trades whenever it's getting executed irrespective of Loss/Profit in the trades!

But my aim is not like this.

I want that if a trade goes into profit zone and then the market starts to turn back, this 'Minimum Profit' feature will ensure

that trade got closed with my desired minimum profit.

And here also I don't want that 'Third' trade to be affected by this feature.

I tried to write something like that but now it's not working.


I compiled your code 80 errors 6 warnings

mostly undeclared identifier

i need the code yours with all identifier declared

if the file is too big then attach

compile the file and check the errors you get

Reason: