Erro MQL.rates e copy.rates

 

Ao utilizar esses recursos para obter os valores de fechamento, abertura, máximo e mínimo de uma barra. Todos os 4 valores valores estão vindo iguais, alguém poderia ajudar?


 MqlTick latest_price;     // Para ser usado para obter cotações de preços recentes/mais recentes 
   MqlTradeRequest mrequest;  // Para ser usado para enviar nossos pedidos de negociação 
   MqlTradeResult mresult;    // Para ser usado para obter nossos resultados de negociação 
   MqlRates mrate[];         // Para ser usado para armazenar os preços, volumes e spread de cada barra
    ZeroMemory (mrequest);     // Inicialização da estrutura mrequest
    
   /*
     Vamos garantir que nossos valores de matrizes para as taxas, valores ADX e valores MA
     é armazenado em série semelhante ao array de séries temporais
*/ 
// os arrays de taxas 
   ArraySetAsSeries(mrate, true );
   // os arrays de valores MA 
   ArraySetAsSeries(maVal, true );
   // os arrays de valores MA 
   ArraySetAsSeries(macdVal, true );
   if(!SymbolInfoTick(_Symbol,latest_price))
     {
      Alert("Erro ao obter a última cotação de preço - erro:",GetLastError(),"!!");
      return;
     }
     if(CopyRates(_Symbol,_Period,0,3,mrate)<0)
     {
      Alert("Error copying rates/history data - error:",GetLastError(),"!!");
      return;
     }
  if(CopyBuffer(macdHandle,1,0,3,macdVal)<0)
     {
      Alert("Erro ao copiar buffer do macd erro:",GetLastError(),"!!");
      return;
     }
   if(CopyBuffer(maHandle,0,0,3,maVal)<0)
     {
      Alert("Erro ao copiar buffer da MA - error:",GetLastError());
      return;
     }       
   //--- não temos erros, então continue 
  //--- Já temos posições abertas? 
    bool Buy_opened=false; // variável para armazenar o resultado da posição de compra aberta 
    bool Sell_opened=false; // variável para manter o resultado da posição aberta de venda 
    
    if ( PositionSelect ( _Symbol ) ==true)   // temos uma posição aberta 
    { if ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_BUY ) 
         { 
            Buy_opened = true;  //É uma compra 
         } else if ( PositionGetInteger
         
          ( POSITION_TYPE ) == POSITION_TYPE_SELL ) 
         { 
            Sell_opened = true; // É uma venda 
         } 
    }
    p_close          =mrate[ 0 ].close;
    p_high          =mrate[ 0 ].high;
    p_low          =mrate[ 0 ].low;
    p_open          =mrate[ 0 ].open;
 
Atualizando: ao trocar a posição de [0] para [1] eu comecei a ter leitura dos valores corretamente, porém, com uma barra de defasagem, alguém poderia ajudar a corrigir??
 
ale_ifet:

Ao utilizar esses recursos para obter os valores de fechamento, abertura, máximo e mínimo de uma barra. Todos os 4 valores valores estão vindo iguais, alguém poderia ajudar?



Segue um exemplo da documentação:

void OnStart()
  {
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,100,rates);
   if(copied>0)
     {
      Print("Barres copiados: "+copied);
      string format="open = %G, high = %G, low = %G, close = %G, volume = %d";
      string out;
      int size=fmin(copied,10);
      for(int i=0;i<size;i++)
        {
         out=i+":"+TimeToString(rates[i].time);
         out=out+" "+StringFormat(format,
                                  rates[i].open,
                                  rates[i].high,
                                  rates[i].low,
                                  rates[i].close,
                                  rates[i].tick_volume);
         Print(out);
        }
     }
   else Print("Falha ao receber dados históricos para o símbolo ",Symbol());
  }
Documentação sobre MQL5: Séries Temporais e Acesso a Indicadores / CopyRates
Documentação sobre MQL5: Séries Temporais e Acesso a Indicadores / CopyRates
  • www.mql5.com
CopyRates - Séries Temporais e Acesso a Indicadores - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5