Trailing Stops e Trailing Profit - pagina 6

 
deVries:


OrderComment può essere sovrascritto dal vostro broker

che vuoi... Ora, secondo la mia richiesta, quando il prezzo sarà di 7 pip [103.603] in profitto, lo Stop Loss di

1° e 2° trade diventeranno 1 pip di profitto [103.543] e lo Stop Loss del 3° trade rimarrà a 103.386.

fare extern int BreakEven = 7

(* 10 ) correzione a 5 cifre broker per ottenere pipvalue


ohh, sì, questo è certamente un difetto. Tutto il mio duro lavoro dalla sera in poi è diventato vano ora!

Ho provato un modo per distinguere i trade a seconda della funzione'order comment' e ho scritto un codice.

Comunque, il tuo codice farà lo spostamento della parte di Stop Loss al BE o al punto desiderato ma ancora il mio problema con il 'Terzo' trade non si sta risolvendo.

Ho anche questa parte di codice che sposta il BE ma sono rimasto bloccato con lo SL non mobile per il terzo trade.

Ho appena avuto un'altra idea e la sto provando ora.

E questo era valido?

string comment_sell="Sell Order";

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

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

 

È valido?

Diciamo che ho allegato l'EA al grafico EURUSD.

se (Order_Symbol()==EURUSD)

Confronterà se il grafico corrente è di EURUSD o no?

 

Ecco un modo di distinguere gli ordini tramite il 'Numero Magico' che ho pensato.

Le parentesi non sono bilanciate.

È possibile?

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
}

in questo modo devi cercare 3 magicnumbers diversi

mi sembra possibile fare

 

Ok, dopo un incantesimo di duro lavoro continuo (almeno per me), ha reso l'EA "senza errori"!

Pubblicare le modifiche in breve:

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

Ho confusione con la funzione Set_Magic_Number() .

L'ho definito correttamente? Anche mentre lo chiami in altre funzioni, funzionerà correttamente?

Saluti

 
Arav007:

Ho confusione con la funzione Set_Magic_Number().

L'ho definita correttamente? Anche quando la chiamo in altre funzioni, funzionerà correttamente?

Saluti

Ho letto qui che il tuo simbolo non è "EURUSD".

devi usare il simbolo giusto

 
deVries:

Ho letto qui che il tuo simbolo non è "EURUSD".

devi usare il simbolo giusto

Non è un problema. Il simbolo del broker dove sto testando l'EA è EURUSD,GBPUSD....

Se collego l'EA al broker dove il simbolo è EURUSDpro, aggiungo solo il "pro".

Hai rivisto il mio codice?

La funzione di profitto minimo è un 'Failure'.

Sta solo chiudendo tutti i trade aperti ogni volta che viene eseguito, indipendentemente dalla perdita/profitto nei trade!

Ma il mio obiettivo non è questo.

Voglio che se un'operazione va in zona di profitto e poi il mercato comincia a tornare indietro, questa funzione 'Profitto minimo' assicurerà

che il trade venga chiuso con il mio profitto minimo desiderato.

E anche qui non voglio che il 'Terzo' trade sia influenzato da questa funzione.

Ho provato a scrivere qualcosa del genere ma ora non funziona.

 
Arav007:

Non è un problema. Il simbolo del broker dove sto testando l'EA è EURUSD,GBPUSD....

Se collego l'EA al broker dove il simbolo è EURUSDpro, aggiungo solo il 'pro'.

Hai rivisto il mio codice?

La funzione di profitto minimo è un 'Failure'.

Sta solo chiudendo tutti i trade aperti ogni volta che viene eseguito, indipendentemente dalla perdita/profitto nei trade!

Ma il mio obiettivo non è questo.

Voglio che se un'operazione va in zona di profitto e poi il mercato comincia a tornare indietro, questa funzione 'Profitto minimo' assicurerà

che il trade venga chiuso con il mio profitto minimo desiderato.

E anche qui non voglio che il 'Terzo' trade sia influenzato da questa funzione.

Ho provato a scrivere qualcosa del genere ma ora non funziona.


Lo rendete troppo complesso perché non avete idea di come gestire la cosa

più leggi e provi a programmare da solo, più facile diventa fare cose più complesse

ma inizia con cose semplici, se inizi a far funzionare un programma per un solo trade e poi più tardi provi con più trade

devi imparare molto.

Se inizi a scegliere un breve programma scritto in modo semplice e fai alcune modifiche su quello per i test

potresti imparare come funziona quel programma

Il tuo problema è iniziato

Vedi come lo farei io

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

                                            

non servono input diversi per Symbol()

3 diversi Magicnumbers...

 
Arav007:

Non è un problema. Il simbolo del broker dove sto testando l'EA è EURUSD,GBPUSD....

Se collego l'EA al broker dove il simbolo è EURUSDpro, aggiungo solo il 'pro'.

Hai rivisto il mio codice?

La funzione di profitto minimo è un 'Failure'.

Sta solo chiudendo tutti i trade aperti ogni volta che viene eseguito, indipendentemente dalla perdita/profitto nei trade!

Ma il mio obiettivo non è questo.

Voglio che se un'operazione va in zona di profitto e poi il mercato comincia a tornare indietro, questa funzione 'Profitto minimo' assicurerà

che il trade venga chiuso con il mio profitto minimo desiderato.

E anche qui non voglio che il 'Terzo' trade sia influenzato da questa funzione.

Ho provato a scrivere qualcosa del genere ma ora non funziona.


Ho compilato il tuo codice 80 errori 6 avvertimenti

per lo più identificatore non dichiarato

Ho bisogno del tuo codice con tutti gli identificatori dichiarati

se il file è troppo grande allora allega

compila il file e controlla gli errori che ottieni

Motivazione: