Fechamento de Ordens Sucessivas em Atingir Stop Loss ou Take Profit

 

Boa noite,


Sou iniciante no EA do MT5, e estou com problema na DEMO onde ordens são fechadas sem atingir o SL ou TP. Alguém pode ajudar?? Eu testei em ações e nao percebi esse erro.

No relatório do Backtest saiu isso:

- 2020.10.05 19:00:55.489    Core 2    2020.09.28 14:51:25   failed exchange buy 1 WDOX20 at 5663.500 sl: 5645.500 tp: 5668.500 [Invalid stops].

No caso estava SL=20 e TP=5. Se for somar os valores seriam: SL: 5643.5 e TP: 5668.5


Ativo WDOX20

    //+------------------------------------------------------------------+
      //| LOGICA DE ROTEAMENTO                                             |
      //+------------------------------------------------------------------+
      //--- zerado
      ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
      bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);   
      
      if( !comprado && !vendido && HoraNegociacao() )
        {
         //--- sinal de compra
         if( sinalCompra )
          {
           trade.Buy(LOTE,_Symbol,0,ask-L, ask+G ,"Compra a mercado");
          }
         //--- sinal de venda
         if( sinalVenda )
          {
           trade.Sell(LOTE,_Symbol,0 , bid+L,bid-G,"Venda a mercado");
          }
        }
        
       
    
  }

 

Voce nao pode fazer essa operação ask+g, ask-l, etc diretamente na ordem de compra ou venda. Você deve normalizar os valores antes.

 
Claudio Oliveira:

Voce nao pode fazer essa operação ask+g, ask-l, etc diretamente na ordem de compra ou venda. Você deve normalizar os valores antes.

Claudio obrigado pe;a pronta resposta.

Fiz assim mas o problema persiste. Tou achando que nao utilizei a funcao de checar se tinha posicao aberta


  //+------------------------------------------------------------------+
      //| LOGICA DE ROTEAMENTO                                             |
      //+------------------------------------------------------------------+
      //--- zerado
      ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
      bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);   
      
      if( !comprado && !vendido && HoraNegociacao() )
        {
         //--- sinal de compra
         if( sinalCompra )
          {
            double SL = ask -L;
            double TP = ask +G;
           trade.Buy(LOTE,_Symbol,0,SL, TP ,"Compra a mercado");
          }
        
       
         //--- sinal de venda
         if( sinalVenda )
          {
            double SL = bid +L;
            double TP = bid -G;
           trade.Sell(LOTE,_Symbol,0 , SL, TP,"Venda a mercado");
          }
        }
        
       
    
  }

 

Voce continua sem normalizar os valores.

Dê uma olhada na função NormalizeDouble (https://www.mql5.com/pt/docs/convert/normalizedouble).

Documentação sobre MQL5: Funções de Conversão / NormalizeDouble
Documentação sobre MQL5: Funções de Conversão / NormalizeDouble
  • www.mql5.com
Valores calculados de StopLoss, TakeProfit, e valores de preços de abertura para ordens pendentes devem ser normalizados com a precisão obtida através de Digits(). Favor notar que ao imprimir no Diário usando a função...
 

Olá pessoal,


como fazer para que o robo só entre em uma operaçao por candle???

 
P -los  na MT5??
 
1972Jesus:
P -los  na MT5??

Olá  THIRDAWESOME, você precisa multiplicar a posição por _Point e deve resolver esse problema

THIRDAWESOME
THIRDAWESOME
  • 2020.10.06
  • www.mql5.com
Perfil do Trader