Trailing Stops y Trailing Profit - página 6

 
deVries:


OrderComment puede ser sobrescrito por su broker

que usted desea... Ahora, de acuerdo a mi requerimiento, cuando el precio sea digamos 7 pip [103.603] de ganancia, el Stop Loss de

1er y 2do comercio se convertirá en digamos 1 pip de ganancia [103.543] y el Stop Loss del 3er comercio se mantendrá en 103.386.

make extern int BreakEven = 7

(* 10 ) corrección en el broker de 5 dígitos para obtener el valor del pip


ohh, Sí, esto es ciertamente un cortocircuito. ¡Todo mi trabajo duro desde la noche se ha ido en vano ahora!

Intenté una manera de distinguir las operaciones dependiendo de la función'order comment' y escribí un código.

De todos modos, su código dado hará el movimiento de la parte de Stop Loss a BE o en el punto deseado, pero todavía mi problema con el 'Tercer' comercio no está resolviendo.

También tengo esta parte del código que se mueve a BE pero me quedé atascado con el SL que no se mueve para la tercera operación.

Acabo de tener otra idea, probando ahora.

¿Y esto es válido?

string comment_sell="Orden de venta";

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

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

 

¿Es esto válido?

Digamos que he adjuntado el EA al gráfico EURUSD.

if (Order_Symbol()==EURUSD)

¿Comparará si el gráfico actual es de EURUSD o no?

 

Aquí hay una forma de distinguir los pedidos a través del "Número Mágico" que pensé.

Las llaves no están equilibradas.

¿Es esto posible?

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
}

de esta manera tienes que buscar 3 números mágicos diferentes

me parece posible hacer

 

Ok, después de un hechizo de trabajo duro continuo (al menos para mí), ¡he hecho que el EA esté 'libre de errores'!

Publicando los cambios en resumen:

 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 );
}

Tengo confusión con la función Set_Magic_Number().

¿Lo he definido correctamente? Además, al llamarlo en otras funciones, ¿funcionará correctamente?

Saludos

 
Arav007:

Tengo una confusión con la función Set_Magic_Number().

¿La he definido correctamente? También al llamarla en otras funciones, ¿funcionará correctamente?

Saludos

leo aquí que tu símbolo no es "EURUSD"

tienes que usar el símbolo correcto

 
deVries:

leo aquí que su símbolo no es "EURUSD"

tienes que usar el símbolo correcto

No es un problema. El símbolo del broker donde estoy probando el EA es EURUSD,GBPUSD....

Si adjunto el EA al broker donde el símbolo es EURUSDpro, sólo añadiré el 'pro'.

¿Has revisado mi código?

La función de ganancia mínima es un 'Fallo'.

Simplemente cierra todas las operaciones abiertas cuando se ejecuta, independientemente de la pérdida / beneficio en las operaciones.

Pero mi objetivo no es este.

Quiero que si una operación entra en la zona de beneficios y luego el mercado empieza a retroceder, esta función de "Beneficio mínimo" asegurará

que la operación se cierre con mi beneficio mínimo deseado.

Y aquí también no quiero que la 'Tercera' operación se vea afectada por esta función.

Traté de escribir algo así pero ahora no funciona.

 
Arav007:

No es un problema. El símbolo del broker donde estoy probando el EA es EURUSD,GBPUSD....

Si adjunto el EA al broker donde el símbolo es EURUSDpro, sólo añadiré el 'pro'.

¿Has revisado mi código?

La función de ganancia mínima es un 'Fallo'.

Simplemente cierra todas las operaciones abiertas cuando se ejecuta, independientemente de la pérdida / beneficio en las operaciones.

Pero mi objetivo no es este.

Quiero que si una operación entra en la zona de beneficios y luego el mercado empieza a retroceder, esta función de "Beneficio mínimo" asegurará

que la operación se cierre con mi beneficio mínimo deseado.

Y aquí también no quiero que la 'Tercera' operación se vea afectada por esta función.

Traté de escribir algo así pero ahora no funciona.


Lo haces demasiado complejo porque no tienes ni idea de cómo manejar esto

cuanto más leas e intentes programar tú mismo más fácil será hacer cosas más complejas

pero empieza con cosas sencillas si empiezas a hacer funcionar un programa para una operación y luego lo intentas con más operaciones

tienes que aprender mucho.

si empiezas a elegir un programa corto y sencillo y haces algunos cambios en él para probarlo

puede aprender cómo funciona ese programa

Tu problema es que empezaste

Mira cómo lo haría yo

//+------------------------------------------------------------------+
//|                                                  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
        }      
     }
//---
  }
//+------------------------------------------------------------------+

                                            

no necesitaba diferentes entradas para Symbol()

3 Magicnumbers diferentes..

 
Arav007:

No es un problema. El símbolo del broker donde estoy probando el EA es EURUSD,GBPUSD....

Si adjunto el EA al broker donde el símbolo es EURUSDpro, sólo añadiré el 'pro'.

¿Has revisado mi código?

La función de ganancia mínima es un 'Fallo'.

Simplemente cierra todas las operaciones abiertas cuando se ejecuta, independientemente de la pérdida / beneficio en las operaciones.

Pero mi objetivo no es este.

Quiero que si una operación entra en la zona de beneficios y luego el mercado empieza a retroceder, esta función de "Beneficio mínimo" asegurará

que la operación se cierre con mi beneficio mínimo deseado.

Y aquí también no quiero que la 'Tercera' operación se vea afectada por esta función.

Intenté escribir algo así pero ahora no funciona.


He compilado tu código 80 errores 6 advertencias

la mayoría son identificadores no declarados

Necesito el código suyo con todos los identificadores declarados

si el archivo es demasiado grande entonces adjuntar

compila el archivo y comprueba los errores que obtienes

Razón de la queja: