ERRO "ARRAY OUT OF RANGE"

 

Bom dia pessoal! Estou com um problema com um indicador... Quando insiro ele pela primeira vez no gráfico e depois mudo para um timeframe qualquer ele apresenta o seguinte erro: array out of range in 'Delta Agressão HeatMap.mq5'.

Só que, quando eu mudo para outro timeframe e volto para o anterior o erro some e o indicador funciona normalmente... Me parece que na mudança de timeframe o MT5 não atualiza o index das barras a tempo para o indicador.

Problema "simples"... Primeira vez que é inserido apresenta o erro mas na segunda vez funciona normalmente.

O indicador lê uma base de dados de arquivos .bin com os valores do delta da agressão do dia. O código de leitura dos valores do arquivos funciona normalmente e testei printando os valores. Problema está na hora de inserir os valores no array de dados.

O arquivo .bin contem: 2020.11.01 10:59:00 (datetime da barra de M1) + 5679 (valor da agressão que ocorreu na barra de M1)

Estou tentando buscar a posição do index do array de dados através da função iBarShift passando o datetime para ele buscar a barra que condiz com o valor de data.

Shift = Barras totais do timeframe - 1 - (shift passado pela função iBarShift).

Lembrando: Funciona normalmente após sair do timeframe e voltar para ele de novo. Mas Assim que abrimos o MT5 pela primeira vez e inserimos o indicador no gráfico ele não funciona.

OBS: O indicador mostra até o penúltimo dia. O ultimo dia (dia atual) ele não mostra. Isso eu já estou ciente que está acontecendo e é proposital.

Erro na linha:

agressao[shift] = agressao[shift] + agressaoDelta;
while(!FileIsLineEnding(fileHandle) && !FileIsEnding(fileHandle))
{
	int shift = iBars(Symbol(), Period()) - 1 - iBarShift(Symbol(), Period(), datetime(FileReadLong(fileHandle)));
                 
        long agressaoDelta = FileReadLong(fileHandle);
       
        agressao[shift] = agressao[shift] + agressaoDelta;
}

Com Erro (Primeira vez inserido).

Sem Erro (Saiu e volto para o timeframe).

Arquivos anexados:
 
Hawllysson Almeida:

Bom dia pessoal! Estou com um problema com um indicador... Quando insiro ele pela primeira vez no gráfico e depois mudo para um timeframe qualquer ele apresenta o seguinte erro: array out of range in 'Delta Agressão HeatMap.mq5'.

Só que, quando eu mudo para outro timeframe e volto para o anterior o erro some e o indicador funciona normalmente... Me parece que na mudança de timeframe o MT5 não atualiza o index das barras a tempo para o indicador.

Problema "simples"... Primeira vez que é inserido apresenta o erro mas na segunda vez funciona normalmente.

O indicador lê uma base de dados de arquivos .bin com os valores do delta da agressão do dia. O código de leitura dos valores do arquivos funciona normalmente e testei printando os valores. Problema está na hora de inserir os valores no array de dados.

O arquivo .bin contem: 2020.11.01 10:59:00 (datetime da barra de M1) + 5679 (valor da agressão que ocorreu na barra de M1)

Estou tentando buscar a posição do index do array de dados através da função iBarShift passando o datetime para ele buscar a barra que condiz com o valor de data.

Shift = Barras totais do timeframe - 1 - (shift passado pela função iBarShift).

Lembrando: Funciona normalmente após sair do timeframe e voltar para ele de novo. Mas Assim que abrimos o MT5 pela primeira vez e inserimos o indicador no gráfico ele não funciona.

OBS: O indicador mostra até o penúltimo dia. O ultimo dia (dia atual) ele não mostra. Isso eu já estou ciente que está acontecendo e é proposital.

Erro na linha:


Você não pode confiar na execução plena de qualquer extração de Dados via MQL5...'e po isso que vc está apanhando...
Razão: