Trailing Stops und Trailing Profit - Seite 6

 
deVries:


OrderComment kann von Ihrem Broker überschrieben werden

Sie wollen... Nun, nach meiner Anforderung, wenn der Preis würde sagen, 7 pip [103,603] im Gewinn, der Stop Loss von

1. und 2. Handel wird sagen wir 1 Pip Gewinn [103,543] und der Stop Loss des 3. Handels bleibt bei 103,386.

make extern int BreakEven = 7

(* 10 ) Korrektur bei 5-stelligem Broker, um den Pipwert zu erhalten


ohh, ja, das ist sicherlich ein Manko. All meine harte Arbeit seit dem Abend ist nun umsonst gewesen!

Ich habe versucht, einen Weg zu finden, um die Trades in Abhängigkeit von der Funktion'order comment' zu unterscheiden und habe einen Code geschrieben.

Wie auch immer, der von Ihnen angegebene Code verschiebt den Stop-Loss-Teil zum BE oder zum gewünschten Punkt, aber mein Problem mit dem "dritten" Handel ist immer noch nicht gelöst.

Ich habe auch diesen BE bewegenden Teil des Codes, aber ich bleibe mit dem nicht bewegenden SL für den dritten Handel stecken.

Ich habe gerade eine andere Idee und versuche es jetzt.

Und war das gültig?

string comment_sell="Sell Order";

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

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

 

Ist dies gültig?

Angenommen, ich habe den EA an ein EURUSD-Chart angehängt.

if (Order_Symbol()==EURUSD)

Wird er vergleichen, ob der aktuelle Chart EURUSD ist oder nicht?

 

Hier ist eine Möglichkeit zur Unterscheidung von Aufträgen über die "magische Zahl", dachte ich.

Klammern sind nicht ausbalanciert.

Ist das möglich?

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
}

auf diese Weise müssen Sie nach 3 verschiedenen magischen Zahlen suchen

Es scheint mir möglich zu sein, Folgendes zu tun

 

Ok, nach einem kontinuierlichen harten Arbeitszauber (zumindest für mich) wurde der EA 'fehlerfrei' gemacht!

Posting der Änderungen in Kürze:

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

Ich habe Verwirrung mit der Funktion Set_Magic_Number() .

Habe ich es richtig definiert? Wird es auch beim Aufrufen in anderen Funktionen korrekt funktionieren?

Grüße

 
Arav007:

Ich habe Verwirrung mit der Funktion Set_Magic_Number().

Habe ich sie richtig definiert? Wird sie auch beim Aufruf in anderen Funktionen korrekt funktionieren?

Mit freundlichen Grüßen

Ich habe hier gelesen, dass Ihr Symbol nicht "EURUSD" ist.

Sie müssen das richtige Symbol verwenden

 
deVries:

Ich habe hier gelesen, dass Ihr Symbol nicht "EURUSD" ist.

Sie müssen das richtige Symbol verwenden.

Das ist kein Problem. Das Symbol des Brokers, bei dem ich den EA teste, ist EURUSD,GBPUSD....

Wenn ich den EA mit einem Broker verbinde, dessen Symbol EURUSDpro ist, füge ich einfach das 'pro' hinzu.

Haben Sie meinen Code überprüft?

Die Funktion des Mindestgewinns ist ein "Fehlschlag".

Es schließt einfach alle offenen Trades, wenn es ausgeführt wird, unabhängig von Verlust/Gewinn in den Trades!

Aber mein Ziel ist nicht so.

Ich möchte, dass, wenn ein Handel in die Gewinnzone geht und dann der Markt beginnt, zurück zu drehen, diese 'Minimum Profit' Funktion sicherstellt

dass der Handel mit meinem gewünschten Mindestgewinn geschlossen wird.

Und auch hier möchte ich nicht, dass der "dritte" Handel von dieser Funktion betroffen ist.

Ich habe versucht, so etwas zu schreiben, aber jetzt funktioniert es nicht mehr.

 
Arav007:

Das ist kein Problem. Das Symbol des Brokers, bei dem ich den EA teste, ist EURUSD,GBPUSD....

Wenn ich den EA mit einem Broker verbinde, dessen Symbol EURUSDpro ist, füge ich einfach das 'pro' hinzu.

Haben Sie meinen Code überprüft?

Die Funktion des Mindestgewinns ist ein "Fehlschlag".

Es schließt einfach alle offenen Trades, wenn es ausgeführt wird, unabhängig von Verlust/Gewinn in den Trades!

Aber mein Ziel ist nicht so.

Ich möchte, dass, wenn ein Handel in die Gewinnzone geht und dann der Markt beginnt, zurück zu drehen, diese 'Minimum Profit' Funktion sicherstellt

dass der Handel mit meinem gewünschten Mindestgewinn geschlossen wird.

Und auch hier möchte ich nicht, dass der "dritte" Handel von dieser Funktion betroffen ist.

Ich habe versucht, so etwas zu schreiben, aber jetzt funktioniert es nicht mehr.


Sie machen es viel zu kompliziert, weil Sie keine Ahnung haben, wie man das macht.

je mehr man liest und versucht, selbst zu programmieren, desto einfacher wird es, komplexere Dinge zu machen

aber fangen Sie mit einfachen Dingen an, wenn Sie ein Programm für einen Handel zum Laufen bringen und es dann später mit mehreren Handelsgeschäften versuchen

müssen Sie eine Menge lernen.

Wenn Sie mit einem kurzen, einfach geschriebenen Programm beginnen und einige Änderungen daran vornehmen, um es zu testen

können Sie lernen, wie das Programm funktioniert.

Ihr Problem, das Sie begonnen haben

Sehen Sie, wie ich es machen würde

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

                                            

nicht benötigte verschiedene Eingaben für Symbol()

3 verschiedene Magicnumbers..

 
Arav007:

Das ist kein Problem. Das Symbol des Brokers, bei dem ich den EA teste, ist EURUSD,GBPUSD....

Wenn ich den EA mit einem Broker verbinde, dessen Symbol EURUSDpro ist, füge ich einfach das 'pro' hinzu.

Haben Sie meinen Code überprüft?

Die Funktion des Mindestgewinns ist ein "Fehlschlag".

Es schließt einfach alle offenen Trades, wenn es ausgeführt wird, unabhängig von Verlust/Gewinn in den Trades!

Aber mein Ziel ist nicht so.

Ich möchte, dass, wenn ein Handel in die Gewinnzone geht und dann der Markt beginnt, zurück zu drehen, diese 'Minimum Profit' Funktion sicherstellt

dass der Handel mit dem von mir gewünschten Mindestgewinn geschlossen wird.

Und auch hier möchte ich nicht, dass der "dritte" Handel von dieser Funktion betroffen ist.

Ich habe versucht, so etwas zu schreiben, aber jetzt funktioniert es nicht mehr.


Ich habe Ihren Code kompiliert 80 Fehler 6 Warnungen

meist nicht deklarierte Bezeichner

Ich brauche den Code mit allen deklarierten Bezeichnern

wenn die Datei zu groß ist, dann anhängen

Kompilieren Sie die Datei und überprüfen Sie die Fehler, die Sie erhalten