Robô não abre operações no forex, somente em corretoras brasileiras.

 

Fiz um E.A. para operar no mini indice, ele abre operações apenas nas corretoras brasileiras, quando coloco ele no gráfico na Activtrader, ele não abre nenhuma operação e não reconhece nenhum erro de lógica.


Fiz o teste no EUR/USD é continua a mesma coisa. 

Se alguém puder me ajudar eu agradeço muito. 
Abrs!

Visualize isto! Biblioteca gráfica em linguagem MQL5 como equivalente a plot de R
Visualize isto! Biblioteca gráfica em linguagem MQL5 como equivalente a plot de R
  • www.mql5.com
A exibição visual usando gráficos desempenha um importante papel na exploração e estudo de padrões regulares. Nas populares linguagens de programação entre a comunidade científica, tais como R e Python, a função especial plot é destinada para visualização. Com ela você pode desenhar linhas, gráficos de dispersão e histogramas para visualizar padrões. Em linguagem MQL5 você pode fazer a mesma coisa usando a classe CGraphics.
 
dificil darmos alguma ajuda deste modo, vc precisa nos enviar alguma mensagem de erro que aparece pelo menos
 
leandronetto011:

Fiz um E.A. para operar no mini indice, ele abre operações apenas nas corretoras brasileiras, quando coloco ele no gráfico na Activtrader, ele não abre nenhuma operação e não reconhece nenhum erro de lógica.


Fiz o teste no EUR/USD é continua a mesma coisa. 

Se alguém puder me ajudar eu agradeço muito. 
Abrs!

Coloca aqui o comando que vc está enviando para compra.

E no seu código coloque um Print("Comprar"); e vender nas partes específicas.... Para descobrir se o erro é aí ou se é antes...

Vai colocando print até achar o local do erro.

Sem olhar o código, é o máximo que conseguimos ajudar...
 
leandronetto011:


Olá

consultei aqui minha bola de cristal e ela mandou te perguntar:  LEANDRO vc está usando o preço LAST ? Em FOREX o LAST é sempre 0(ZERO).

 
Rogerio Giannetti Torres #:

Olá

consultei aqui minha bola de cristal e ela mandou te perguntar:  LEANDRO vc está usando o preço LAST ? Em FOREX o LAST é sempre 0(ZERO).

Não aperece nenhuma mensagem erro, coloquei print para procurar erro em todos os comandos de execução,até no indicador. A questão é que o mesmo código funciona nas corretoras br sem nehum problema, já está até rodando na conta real. Eis a dúvida, pois possa ser algo que diferencie ambas corretoras. 
 
Ricardo Branco #:
Coloca aqui o comando que vc está enviando para compra.

E no seu código coloque um Print("Comprar"); e vender nas partes específicas.... Para descobrir se o erro é aí ou se é antes...

Vai colocando print até achar o local do erro.

Sem olhar o código, é o máximo que conseguimos ajudar...
 if( sinalCompra )
           {
            double sl = GetSL(true);
            double tp = GetTP(true);
            //
            bool ok = trade.Buy(Lote,_Symbol,0,sl,tp,"Compra a mercado");
            if(ok)
              {
               if( trade.ResultRetcode()==10008 || trade.ResultRetcode()==10009 )
                 {
                  Print("Posição COMPRADA aberta com sucesso (conta hedge)");
                 }
               else
                 {
                  Print("ERRO - > Retorno inesperado do servidor");
                  return(false);
                 }
              }
            else
              {
               Print("ERRO - > Erro ao enviar trade.Buy");
               return(false);
              }
           }
         
         //---
         if( sinalVenda )
           {
            double sl = GetSL(false);
            double tp = GetTP(false);
            //
            bool ok = trade.Sell(Lote,_Symbol,0,sl,tp,"Venda a mercado");
            if(ok)
              {
               if( trade.ResultRetcode()==10008 || trade.ResultRetcode()==10009 )
                 {
                  Print("Posição VENDIDA aberta com sucesso (conta hedge)");
                 }
               else
                 {
                  Print("ERRO - > Retorno inesperado do servidor");
                  return(false);
                 }
              }
            else
              {
               Print("ERRO - > Erro ao enviar trade.Buy");
               return(false);
              }
           }
        }
     }
   //+------------------------------------------------------------------+
   //| LÓGICA DE FECHAMENTO DE POSIÇÕES BASEADA EM TEMPO                |
   //+------------------------------------------------------------------+
   else
     {
      if( comprado || vendido )
        {
         ulong ticket = (comprado) ? ticketComprado : ticketVendido;
         bool ok = trade.PositionClose(ticket);
         if(ok)
           {
            if( trade.ResultRetcode()==10008 || trade.ResultRetcode()==10009 )
              {
               Print("Posição FECHADA com sucesso (conta hedge)");
              }
            else
              {
               Print("ERRO - > Retorno inesperado do servidor");
               return(false);
              }
           }
         else
           {
            Print("ERRO - > Erro ao enviar trade.PositionClose");
            return(false);
           }
        }
     }
   
   
   
   
   //
   return(true);
  }



Obs: Como disse, não aparece nenhum erro e na b3 ele já até está operandop na conta real. 

 
Rogerio Giannetti Torres #:

Olá

consultei aqui minha bola de cristal e ela mandou te perguntar:  LEANDRO vc está usando o preço LAST ? Em FOREX o LAST é sempre 0(ZERO).

Vou consultar se alguma função está com o preço LAST. vlw 
 
Ricardo Branco #:
Coloca aqui o comando que vc está enviando para compra.

E no seu código coloque um Print("Comprar"); e vender nas partes específicas.... Para descobrir se o erro é aí ou se é antes...

Vai colocando print até achar o local do erro.

Sem olhar o código, é o máximo que conseguimos ajudar...
 default :
        {
         double tickSize = SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
         if(isBuy)
           {
            tp = NormalizeDouble(tick.ask + TP+tickSize,_Digits);
           }
         else
           {
            tp = NormalizeDouble(tick.bid - TP+tickSize,_Digits);
           }
         break;
        }

     }



To suspeitando que o erro está na lógica de tp e sl 


 
leandronetto011 #:
 if( sinalCompra )
           {
            double sl = GetSL(true);
            double tp = GetTP(true);
            //
            bool ok = trade.Buy(Lote,_Symbol,0,sl,tp,"Compra a mercado");
            if(ok)
              {
               if( trade.ResultRetcode()==10008 || trade.ResultRetcode()==10009 )
                 {
                  Print("Posição COMPRADA aberta com sucesso (conta hedge)");
                 }
               else
                 {
                  Print("ERRO - > Retorno inesperado do servidor");
                  return(false);
                 }
              }
            else
              {
               Print("ERRO - > Erro ao enviar trade.Buy");
               return(false);
              }
           }
         
         //---
         if( sinalVenda )
           {
            double sl = GetSL(false);
            double tp = GetTP(false);
            //
            bool ok = trade.Sell(Lote,_Symbol,0,sl,tp,"Venda a mercado");
            if(ok)
              {
               if( trade.ResultRetcode()==10008 || trade.ResultRetcode()==10009 )
                 {
                  Print("Posição VENDIDA aberta com sucesso (conta hedge)");
                 }
               else
                 {
                  Print("ERRO - > Retorno inesperado do servidor");
                  return(false);
                 }
              }
            else
              {
               Print("ERRO - > Erro ao enviar trade.Buy");
               return(false);
              }
           }
        }
     }
   //+------------------------------------------------------------------+
   //| LÓGICA DE FECHAMENTO DE POSIÇÕES BASEADA EM TEMPO                |
   //+------------------------------------------------------------------+
   else
     {
      if( comprado || vendido )
        {
         ulong ticket = (comprado) ? ticketComprado : ticketVendido;
         bool ok = trade.PositionClose(ticket);
         if(ok)
           {
            if( trade.ResultRetcode()==10008 || trade.ResultRetcode()==10009 )
              {
               Print("Posição FECHADA com sucesso (conta hedge)");
              }
            else
              {
               Print("ERRO - > Retorno inesperado do servidor");
               return(false);
              }
           }
         else
           {
            Print("ERRO - > Erro ao enviar trade.PositionClose");
            return(false);
           }
        }
     }
   
   
   
   
   //
   return(true);
  }



Obs: Como disse, não aparece nenhum erro e na b3 ele já até está operandop na conta real. 

Em algum momento sinal de compra está ficando true?
 
Ricardo Branco #:
Em algum momento sinal de compra está ficando true?

Não está. Descobrir mais ou menos o erro, a regra de stop e take não está batendo com o lavor colocado no input, está despropocional. 

Por ex: se eu coloco 30pts de take a ondem é aberta com 100pts. 

 
leandronetto011 #:

Não está. Descobrir mais ou menos o erro, a regra de stop e take não está batendo com o lavor colocado no input, está despropocional. 

Por ex: se eu coloco 30pts de take a ondem é aberta com 100pts. 

Deve ter a ver com o spread.

Ou com a conversão de pips para pontos.

Razão: