Primeiro candle do dia - página 2

 

Dei uma mexida no codigo, ja que na conta REAL o candle de 1 dia vem com a data meia noite, optei por puxar os 25 ultimos candles e procurar pela hora se a hora é menor que a anterior. Assim sei que mudou o dia. Sendo assim consigo pegar o GAP corretamente e consigo tambem saber o horario que o mercado abriu esse dia. Terei que testar amanha se o candle de pre-abertura nao vai atrapalhar o calculo do GAP, hoje de manha notei que pegou errado, pode ser que tinha alguma informacao de candles de leilao tambem. Terei que debugar isso em tempo real.

double gapAbertura = 0;
datetime dataCalculoGAPAbertura;
datetime horaInicioDia;

//+------------------------------------------------------------------+
//| 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;
}
 
Christopher De Siqueira #:

Dei uma mexida no codigo, ja que na conta REAL o candle de 1 dia vem com a data meia noite, optei por puxar os 25 ultimos candles e procurar pela hora se a hora é menor que a anterior. Assim sei que mudou o dia. Sendo assim consigo pegar o GAP corretamente e consigo tambem saber o horario que o mercado abriu esse dia. Terei que testar amanha se o candle de pre-abertura nao vai atrapalhar o calculo do GAP, hoje de manha notei que pegou errado, pode ser que tinha alguma informacao de candles de leilao tambem. Terei que debugar isso em tempo real.

Decidi usar o candle de hora para trafegar menos candles, nao ser algo gigante em termos de processo e normalmente os mercados comecam em horas cheia/inteira. Teste no backtest e na conta real e foi bem. Amanha quero ver se tem algum candle lixo de abertura que ele possa trazer errado.