Identificando o primeiro candle do dia

 
Marcelo De Sousa Cunha:

Pessoal, tudo bem?

No meu EA, preciso identificar se o candle atual é o primeiro do dia.

Podem me ajudar?

Olá Marcelo,

bom, existem inúmeras possibilidades, mas a mais simples a meu ver,  é testar se hora do candle atual é menor que a hora do candle anterior.

Att. Rogério

 
Conforme prp
Rogerio Giannetti Torres #:

Olá Marcelo,

bom, existem inúmeras possibilidades, mas a mais simples a meu ver,  é testar se hora do candle atual é menor que a hora do candle anterior.

Att. Rogério

Implementei algo similar ao proposto, segue codigo.

//+------------------------------------------------------------------+
//| RETORNA O TAMANHO DO GAP DE ABERTURA DO DIA CORRENTE             |
//+------------------------------------------------------------------+
double getGAPAberturaEmPips() {

  // SE AINDA NAO CALCULOU O GAP DE ABERTURA - DATA DO CALCULO DE GAP DIFERENTE DA DATA DO DIA ATUAL
  if (TimeToString(dataCalculoGAPAbertura, TIME_DATE) != TimeToString(TimeCurrent(), TIME_DATE)) {
    // LOCAL PARA ARMAZENAR OS DADOS PARA LEITURA POSTERIOR
    MqlRates rates[];
  
    // INVERTE SEQUENCIA ONDE ZERO SENDO ULTIMO CANDLE
    ArraySetAsSeries(rates, true);

    // CARREGA DADOS DAS ULTIMAS 25 HORAS (CASO MERCADO 24H E SISTEMA ABERTO ULTIMA HORA DO DIA)
    CopyRates(Symbol(), PERIOD_H1, 0, 25, rates);

    // PARA CADA CANDLE DO DIA
    for (int i = 0; i < 24; i++) {
      
      // PROCURA PRIMEIRO CANDLE DO DIA (HORARIO ATUAL MENOR QUE HORARIO ANTERIOR)
      if (TimeToString(rates[i].time, TIME_MINUTES) < TimeToString(rates[i + 1].time, TIME_MINUTES)) {
        
        // VALIDA DIFERENCA DE VALORES PARA SEMPRE RETORNAR POSITIVO
        if (rates[i].open > rates[i + 1].close)
          gapAbertura = rates[i].open - rates[i + 1].close;
        else 
          gapAbertura = rates[i + 1].close - rates[i].open;

        // GUARDA ULTIMA VEZ QUE ACHOU O GAP PARA CALCULAR APENAS NO PROXIMO DIA
        dataCalculoGAPAbertura = TimeCurrent();
        
        // GUARDA HORA INICIO PARA USO FUTURO
        horaInicioDia = rates[i].time;
      
        return gapAbertura;
      }
    } 
  } 

  return gapAbertura;
}
 

eu faria algo assim (nao testei o codigo)


int bar_index=iBarShift(NULL,PERIOD_CURRENT,iTime(NULL,PERIOD_D1,0));
MqlRates rates[1];

CopyRates(NULL, PERIOD_CURRENT, bar_index, 1, rates);
Razão: