Estou utilizando médias móveis sem a função iMA. Na média simples eu fiz com o código abaixo e funciona perfeitamente:
Porém, na média exponencial estou encontrando dificuldades. Alguém, por favor, poderia me ajudar? O correto seria algo parecido conforme fiz, mostrado abaixo:
Creio que o problema esteja no array da média exponencial anterior, onde não sei como calcular o primeiro valor.
Boa tarde, Victor Hugo.
Consegui localizar dois pontos de atenção no seu código de média móvel exponencial:
1 - Como você disse, é necessário definir o primeiro valor antes de iniciar o cálculo das demais posições. Se você procurar pela média móvel em \Indicators\Examples, vai encontrar o código usado pelo metatrader para gerar o indicador. Ele realiza o cálculo da média duas vezes, sendo que, no primeiro laço, ele utiliza o valor do próprio preço como a primeira posição e, no segundo, os resultados previamente calculados:
void CalculateEMA(int rates_total,int prev_calculated,int begin,const double &price[]) { int i,limit; double SmoothFactor=2.0/(1.0+InpMAPeriod); //--- first calculation or number of bars was changed if(prev_calculated==0) { limit=InpMAPeriod+begin; ExtLineBuffer[begin]=price[begin]; for(i=begin+1;i<limit;i++) ExtLineBuffer[i]=price[i]*SmoothFactor+ExtLineBuffer[i-1]*(1.0-SmoothFactor); } else limit=prev_calculated-1; //--- main loop for(i=limit;i<rates_total && !IsStopped();i++) ExtLineBuffer[i]=price[i]*SmoothFactor+ExtLineBuffer[i-1]*(1.0-SmoothFactor); //--- } //+-
2 - O outro ponto é que na linha 6 do seu código me parece que houve um erro de digitação:
exp_average[i] = rates[i].close * alpha + exp_average[i+1] * (1 - alpha);
Em vez de [i+1]. seria [i-1], caso contrário você estaria utilizar um valor ainda não calculado pelo seu código, possivelmente igual a zero.
Sigo à disposição,
Daniela Reis.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Estou utilizando médias móveis sem a função iMA. Na média simples eu fiz com o código abaixo e funciona perfeitamente:
Porém, na média exponencial estou encontrando dificuldades. Alguém, por favor, poderia me ajudar? O correto seria algo parecido conforme fiz, mostrado abaixo:
Creio que o problema esteja no array da média exponencial anterior, onde não sei como calcular o primeiro valor.