Você sabe me dizer por que quando tento preencher uma matriz de indicadores em um loop usando a fórmula Mass[ i ]= Mass[ i+1]+A; onde A é uma variável, a compilação ocorre sem erros, mas quando entro na janela recebo a mensagem array out of range (matriz fora do intervalo)?
Porque o loop deve ser feito levando em conta a célula em que a última entrada será feita. Se o tamanho da matriz Mass[], digamos, for 10, o loop de zero a 9 (esse é o índice da última célula da matriz), então, em i==9, você tentará gravar na célula com o índice 9+1. A matriz não tem a célula 10. Portanto, você obtém uma saída fora da matriz.
E mais uma. Por que devo começar a calcular a partir da barra com o número (prev_calculated - 1), se já calculei o indicador prev_calculated vezes?
Por exemplo, calculei o indicador 5 vezes para as barras 0, 1, 2, 3 e 4. Não preciso calculá-lo novamente na barra 4. Devo continuar a partir da barra 5.
E mais uma. Por que eu deveria começar a calcular a partir da barra com o número (prev_calculated - 1), se já calculei o indicador prev_calculated vezes?
Por exemplo, calculei o indicador 5 vezes para as barras 0, 1, 2, 3 e 4. Não preciso calculá-lo novamente na barra 4. Devo continuar a partir da barra 5.
Certo. Acho que não estou correto aqui, pois a 4ª barra pode ter sido alterada desde meu último cálculo. Portanto, o (prev_calculated - 1) parece correto.
Nicholas!
Você sabe me dizer por que quando tento preencher uma matriz de indicadores em um loop usando a fórmula Mass[ i ]= Mass[ i+1]+A; onde A é uma variável, a compilação ocorre sem erros, mas quando entro na janela recebo a mensagem array out of range (matriz fora do intervalo)?
Nikolay, obrigado. Esse é um ótimo tutorial!
Mas acho que a variável
sempre terá valor zero no código. Isso é importante para o cálculo?
Nikolay, obrigado. É um ótimo tutorial!
Mas acho que essa variável
sempre terá valor zero no código. Isso é importante para o cálculo?
O valor de "begin" será diferente dependendo do indicador aplicado. Se você aplicar o RSI,"begin" será 14, por exemplo.
Se você tentar compilar pela primeira vez, poderá receber um erro de buffer. Portanto, altere a quantidade de buffers:
#property indicator_buffers 2
Posteriormente, você poderá voltar a usar 1 (um) buffer:
#property indicator_buffers 1
Não estou entendendo. Suponha que
rates_total == MA_Period - 1
e essa é a primeira chamada da função, então
prev_calculated == 0
e também begin == 0
então a condição no primeiro if(rates_total < MA_Period - 1 + begin) é avaliada como falsa
então
first = MA_Period - 1 seria executado
mas NÃO haveria CÁLCULOS porque a condição no primeiro loop for é avaliada como falsa.
Acho que a primeira condição if deveria ser
if( rates_total < MA_Period + begin )
Estou perdendo alguma coisa aqui?
E mais uma. Por que devo começar a calcular a partir da barra com o número (prev_calculated - 1), se já calculei o indicador prev_calculated vezes?
Por exemplo, calculei o indicador 5 vezes para as barras 0, 1, 2, 3 e 4. Não preciso calculá-lo novamente na barra 4. Devo continuar a partir da barra 5.
E mais uma. Por que eu deveria começar a calcular a partir da barra com o número (prev_calculated - 1), se já calculei o indicador prev_calculated vezes?
Por exemplo, calculei o indicador 5 vezes para as barras 0, 1, 2, 3 e 4. Não preciso calculá-lo novamente na barra 4. Devo continuar a partir da barra 5.