Expert Advisor "sai do gráfico"

 

Olá, 

Estou aprendendo a linguagem MQL5 com alguns tutoriais no YouTube e segui os passos desse vídeo: https://www.youtube.com/watch?v=o4jVeJdYTkM

Porém, quando vou fazer o backtest ele só modela 1 barra e para, clico em "iniciar" e quase instantaneamente vem o aviso que foi finalizado, outros EA funcionam normalmente. Tentei também colocar ele para rodar em uma conta DEMO, entretanto, eu coloco ele no gráfico e quando o preço atualiza ele simplesmente sai.

Alguém pode me ajudar?

O código é esse:

#include <Trade\Trade.mqh>

//Cria uma instância CTrade
//Create a CTrade instance
CTrade trade;

input double Lots     =0.1;   // Lots
input int    Take    =100;    // Take Profit (in pips)
input int    Stop    =50;     // Stop Loss (in pips)

void OnTick()
  {
   //Cria uma string vazia
   //Create an empty string
   string entry = "";
   
   //Lê o preço Ask
   //Get the Ask price
   double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
  
   //Lê o preço Bid
   //Get the Bid price
   double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   
   //Cria uma matriz para o preço
   //Create an array for the price
   MqlRates PriceInfo[];
   
   //Classifica a matriz de preços da vela atual para trás
   //Sort the price array form the current candle downwards
   ArraySetAsSeries(PriceInfo,true);
  
   //Preenche a matriz com os dados do preço
   //Fill the array with the price data
   int PriceData =CopyRates(Symbol(),Period(),0,0,PriceInfo);
   
   //Cria uma matriz para vários preços
   //Create an array for several prices
   double UpperBandArray[];
   double LowerBandArray[];
   
   //Classifica a matriz de preços da vela atual para trás
   //Sort the price array from the current candle downwards
   ArraySetAsSeries(UpperBandArray,true);
   ArraySetAsSeries(LowerBandArray,true);
   
   //Define as Bandas de Bollinger
   //Define Bollinger Bands
   int BollingerBandsDefinition =iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);
   
   //Copie os preços dentro da matriz
   //Copy price info into the array 
   CopyBuffer(BollingerBandsDefinition,1,0,3,UpperBandArray);
   CopyBuffer(BollingerBandsDefinition,2,0,3,LowerBandArray);
   
   //Calcula o EA para a vela atual
   //Calculate EA for the current candle
   double myUpperBandValue=UpperBandArray[0];
   double myLowerBandValue=LowerBandArray[0];
   
   //Calcula o EA para a vela anterior
   //Calculate EA for the candle before
   double myLastUpperBandValue=UpperBandArray[1];
   double myLastLowerBandValue=LowerBandArray[1];
   
      if ( 
            //Verifica se tem uma reentrada abaixo
            //Check if have a re-entry from below
            (PriceInfo[0].close>myLowerBandValue)
         && (PriceInfo[1].close<myLastLowerBandValue)
         )
            {
            entry="buy";
            }
             
      if ( 
            //Verifica se tem uma reentrada acima
            //Check if have a re-entry from above
            (PriceInfo[0].close>myUpperBandValue)
         && (PriceInfo[1].close<myLastUpperBandValue)
         )
            {
            entry ="sell";
            }
            
      //Compra 10 micro lotes
      //Buy 10 micro lots 
      if (entry =="buy" && PositionsTotal()<1)
         trade.Buy(Lots,NULL,Ask,(Ask-Stop*_Point),(Ask+Take*_Point),NULL);

      //Vende 10 micro lotes
      //Sell 10 micro lots 
      if (entry =="sell" && PositionsTotal()<1)
         trade.Sell(Lots,NULL,Bid,(Stop+50*_Point),(Bid-Take*_Point),NULL);                       
   
      //Saída para o gráfico do EA atual
      //Chart output of the current EA
      Comment ("Entry Signal: ",entry);

  }
MQL5 TUTORIAL - SIMPLE STANDALONE BOLLINGER BANDS EXPERT ADVISOR
MQL5 TUTORIAL - SIMPLE STANDALONE BOLLINGER BANDS EXPERT ADVISOR
  • www.youtube.com
https://mql5tutorial.com/?s=bollinger With MQL5 for Metatrader 5 we create an automated trading Expert Advisor for the Bollinger Bands indicator. This was ac...
 

O problema está ao usar o MqlRates. Eu, particularmente, não uso, acho desnecessariamente complexo. Ao invés disso uso as funções iOpen, iClose, iHigh e iLow.

No caso da linha 69, por exemplo, ao invés de se usar (PriceInfo[0].close>myLowerBandValue) poderia se usar (iClose(_Symbol, _Period, 0) > myLowerBandValue).

 
Thiago Duarte:

O problema está ao usar o MqlRates. Eu, particularmente, não uso, acho desnecessariamente complexo. Ao invés disso uso as funções iOpen, iClose, iHigh e iLow.

No caso da linha 69, por exemplo, ao invés de se usar (PriceInfo[0].close>myLowerBandValue) poderia se usar (iClose(_Symbol, _Period, 0) > myLowerBandValue).

Entendi!

Realmente só segui o tutorial do YouTube haha, muito obrigado mesmo.

 
Thiago Duarte:

O problema está ao usar o MqlRates. Eu, particularmente, não uso, acho desnecessariamente complexo. Ao invés disso uso as funções iOpen, iClose, iHigh e iLow.

No caso da linha 69, por exemplo, ao invés de se usar (PriceInfo[0].close>myLowerBandValue) poderia se usar (iClose(_Symbol, _Period, 0) > myLowerBandValue).

Funcionou perfeitamente, muito obrigado!

 
Thiago Duarte:

O problema está ao usar o MqlRates. Eu, particularmente, não uso, acho desnecessariamente complexo. Ao invés disso uso as funções iOpen, iClose, iHigh e iLow.

No caso da linha 69, por exemplo, ao invés de se usar (PriceInfo[0].close>myLowerBandValue) poderia se usar (iClose(_Symbol, _Period, 0) > myLowerBandValue).

Aproveitar para sanar mais uma dúvida, como eu poderia para colocar para ele fechar a operação em caso de sinais contrários, quero retirar o StopLoss e usar esta opção.