Fechar a Ordem antes de Abrir outra MQL5 - Bovespa

Para adicionar comentários, por favor Faça o login ou registrar
Cesar
53
Cesar  

Pessoal bom dia,


Estou iniciando em MQL5 e vi que tem muitas coisas em MQL4 mas o código é muito diferente. Depois de apanhar um pouco fiz um robô que analisa duas média e faz a compra e a venda.

O Problema é que o robô esta comprando e vendendo sem ter fechado a ordem anterior aberta.


Exemplo de como esta funcionando:

O Robo comprou hoje PETR3 - R$30,20 - Gerou Ordem 1
O Robo Vendeu PETR3 - R$30,40 - Gerou Ordem 2
O Robo comprou PETR3 - R$31,20 - Gerou Ordem 3
O Robo comprou PETR3 - R$31,25 - Gerou Ordem 4
O Robo comprou  PETR3 - R$31,50 - Gerou Ordem 5
O Robo Vendeu PETR3 - R$32,20 - Gerou Ordem 6

Exemplo que eu gostaria é de não fazer mais de um compra ou venda:

O Robo comprou hoje PETR3 - R$30,20 - Gerou Ordem 1
O Robo Vendeu PETR3 - R$30,40 - Gerou Ordem 2
O Robo comprou PETR3 - R$31,20 - Gerou Ordem 3
O Robo Vendeu PETR3 - R$32,20 - Gerou Ordem 4


Tem como fazer?

claudio garini
43
claudio garini  

ola,

tem sim, como fazer.

posta o codigo , pfv

Cesar
53
Cesar  
claudio garini:

ola,

tem sim, como fazer.

posta o codigo , pfv

//Segue o codigo

  if (compra == true)
         {
            venda = true;
            compra = false;
            trade.Buy(100,NULL,Ask,0,(Ask+100 * _Point), "Teste");

                
         }

   if (venda == true)
         {
           
            venda = false;
            compra = true;
            trade.Sell(100,NULL,Ask-100,0,0, "Venda Teste");
        
         }
         }
Evandro Pinho
38
Evandro Pinho  
Cesar:
         }

você não tem nada verificando se existe posição e ordem aberta? Pois se você deseja que o EA execute apenas uma ordem por vez, é necessário fazer essa verificação.

bool SemPosicao()
{
   bool verificaPos = !PositionSelect(_Symbol);
   return verificaPos;
}

bool SemOrdem()
{  
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      OrderGetTicket(i);
      if(OrderGetString(ORDER_SYMBOL)==_Symbol)
         return false;         
   }
   return true;
}

essas funções você deve utilizar no OnTick() para que a cada atualização do gráfico você verifique se ainda existe ordem aberta/posição aberta.

Para adicionar comentários, por favor Faça o login ou registrar