Discussão do artigo "Indicadores Personalizados no MQL5 para novatos" - página 2

 
serg7771959:

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)?


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.
 
Precisamos de mais tutoriais como este!!!
 

Nikolay, obrigado. Esse é um ótimo tutorial!
Mas acho que a variável

const int begin

sempre terá valor zero no código. Isso é importante para o cálculo?

 
igorsds:

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

 
Como faço para combinar com o fibo ziguezague?
 

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.

 
LRDPRDX #:

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.
 
Os golpes estão na ordem do dia. Bravi