Expert Advisor funciona somente em um par

 

Criei um robo de cruzamento de médias, ao colocar para funcionar ele funciona apenas em um par . Eu opero forex nos pares  EURUSD, USDJPY, USDCAD, AUDUSD  e ele funciona apenas no USDCAD,  Nas configurações ele está ativo negociçaões permitir notificações real, no metatrader esta ativado negociação automatizada e aparece em cada grafico o emoticon sorrindo que quer dizer que esta funcionando o robo, mas ele esta operando só um par, queria que funcionasse em todos pares que quiser.  Alguem me ajude a configurar  para que funcione em todos os pares , vou postar o codigo aqui, me ajudem. 


I creatred a robot of crossing  of means, when putting to work it works only in a pair. I trade forex  in pairs EURUSD, USDJPY, USDCAD, AUDUSD and  it works only in USDCAD. In the settings it is active trades allow notifications real, in the metatrader this actived automated trading  and appears in each  graph  the smiley emoticon that means that it is working the robbery, but he's only operation on a pair, he wanted  it to work every couple he wants. Someone help me configure it to work on all pairs. I'll post  the code here , help me.



extern int MagicNumber=10001;

extern double Lots =0.02;

extern double StopLoss=20;

extern double TakeProfit=0;

extern int TrailingStop=0;

extern int Slippage=3;

//+------------------------------------------------------------------+

//    expert start function

//+------------------------------------------------------------------+

int start()

{

  double MyPoint=Point;

  if(Digits==3 || Digits==5) MyPoint=Point*10;

  

  double TheStopLoss=0;

  double TheTakeProfit=0;

  if( TotalOrdersCount()==0 ) 

  {

     int result=0;

     if((iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,1)<iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,1))&&(iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,0)>iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,0))) // Here is your open buy rule

     {

        result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);

        if(result>0)

        {

         TheStopLoss=0;

         TheTakeProfit=0;

         if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;

         if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;

         OrderSelect(result,SELECT_BY_TICKET);

         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);

        }

        return(0);

     }

     if((iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,1)>iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,1))&&(iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,0)<iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,0))) // Here is your open Sell rule

     {

        result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);

        if(result>0)

        {

         TheStopLoss=0;

         TheTakeProfit=0;

         if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;

         if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;

         OrderSelect(result,SELECT_BY_TICKET);

         OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);

        }

        return(0);

     }

  }

  

  for(int cnt=0;cnt<OrdersTotal();cnt++)

     {

      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

      if(OrderType()<=OP_SELL &&   

         OrderSymbol()==Symbol() &&

         OrderMagicNumber()==MagicNumber 

         )  

        {

         if(OrderType()==OP_BUY)  

           {

              if((iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,1)>iMA(NULL,0,72,0,MODE_EMA,PRICE_CLOSE,1))&&(iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,0)<iMA(NULL,0,72,0,MODE_EMA,PRICE_CLOSE,0))) //here is your close buy rule

              {

                   OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);

              }

            if(TrailingStop>0)  

              {                 

               if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)

                 {

                  if(OrderStopLoss()<Bid-MyPoint*TrailingStop)

                    {

                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);

                     return(0);

                    }

                 }

              }

           }

         else 

           {

                if((iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,1)<iMA(NULL,0,72,0,MODE_EMA,PRICE_CLOSE,1))&&(iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,0)>iMA(NULL,0,72,0,MODE_EMA,PRICE_CLOSE,0))) // here is your close sell rule

                {

                   OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Red);

                }

            if(TrailingStop>0)  

              {                 

               if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))

                 {

                  if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))

                    {

                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);

                     return(0);

                    }

                 }

              }

           }

        }

     }

   return(0);

}


int TotalOrdersCount()

{

  int result=0;

  for(int i=0;i<OrdersTotal();i++)

  {

     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);

     if (OrderMagicNumber()==MagicNumber) result++;


   }

  return (result);


 
ricardomc93:

Criei um robo de cruzamento de médias, ao colocar para funcionar ele funciona apenas em um par . Eu opero forex nos pares  EURUSD, USDJPY, USDCAD, AUDUSD  e ele funciona apenas no USDCAD,  Nas configurações ele está ativo negociçaões permitir notificações real, no metatrader esta ativado negociação automatizada e aparece em cada grafico o emoticon sorrindo que quer dizer que esta funcionando o robo, mas ele esta operando só um par, queria que funcionasse em todos pares que quiser.  Alguem me ajude a configurar  para que funcione em todos os pares , vou postar o codigo aqui, me ajudem. 

I creatred a robot of crossing  of means, when putting to work it works only in a pair. I trade forex  in pairs EURUSD, USDJPY, USDCAD, AUDUSD and  it works only in USDCAD. In the settings it is active trades allow notifications real, in the metatrader this actived automated trading  and appears in each  graph  the smiley emoticon that means that it is working the robbery, but he's only operation on a pair, he wanted  it to work every couple he wants. Someone help me configure it to work on all pairs. I'll post  the code here , help me.

Você olhou as abas diário e experts para ver se está havendo alguma mensagem de erro tipo Send Order Error? 
 
Vendo agora seu código diria que é sorte ter aberto alguma ordem. Esse evento: start é utilizado quando o EA roda uma vez, se fechar e abrir toda hora, eventualmente abrirá mais ordens e nos pares. Seu código deveria estar em OnTick (se desejar que rode o código a cada tick do mercado) ou Ontimer (a cada segundo) 
 
ricardomc93:

Criei um robo de cruzamento de médias, ao colocar para funcionar ele funciona apenas em um par . Eu opero forex nos pares  EURUSD, USDJPY, USDCAD, AUDUSD  e ele funciona apenas no USDCAD,  Nas configurações ele está ativo negociçaões permitir notificações real, no metatrader esta ativado negociação automatizada e aparece em cada grafico o emoticon sorrindo que quer dizer que esta funcionando o robo, mas ele esta operando só um par, queria que funcionasse em todos pares que quiser.  Alguem me ajude a configurar  para que funcione em todos os pares , vou postar o codigo aqui, me ajudem. 

Por favor utilize a caixa de edição de códigos quando quiser postar trechos de código aqui no fórum MQL5 !!!

Exemplo errado:

for(int i=0;i<OrdersTotal();i++)

  {

     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);

     if (OrderMagicNumber()==MagicNumber) result++;

  }

Exemplo correto:

for(int i=0;i<OrdersTotal();i++)
  {
     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result++;
  }

Abraços,
Malacarne


Razão: