Início Indicador técnico Postagem

Oscilador Estocástico com Redução de Ruído para MetaTrader 4

Anexo
9279.zip (2.09 KB, Baixar 0 vezes)

Descrição:

Oscilador Estocástico Padrão com recurso de sensibilidade.

Esse indicador possui os mesmos parâmetros que um Estocástico padrão, mas conta com um parâmetro adicional de "sensibilidade" (Sens na janela de parâmetros).

Isso permite considerar oscilações apenas abaixo de um limite pré-definido, especificado em pontos. Dessa forma, podemos reduzir significativamente os sinais falsos.

O clássico Estocástico de Lane posiciona o preço atual entre um preço máximo e um mínimo ao longo de um determinado número de barras, definido pelo valor de %K (Kperiod), e não distingue a diferença entre os extremos, como por exemplo 1 ponto ou 100 pontos. Para essas duas situações, os resultados serão os mesmos, e teremos os sinais de sobrecompra/sobrevenda.

No entanto, utilizando um limite, conseguimos considerar apenas oscilações significativas.

Na Figura 1 (EURUSD, 1M), apresentamos o gráfico de preços, o estocástico padrão e o indicador proposto.

Imagem:

Fig 1.

Os campos do indicador são os mesmos do iStochastic, com a diferença de que há um parâmetro adicional Sens - sensibilidade.

Os buffers de saída são os mesmos: 0 - valor do Estocástico em si, 1 - linha de sinal.

double iCustom(string symbol, int timeframe, "_StochNR", int %Kperiod, int %Dperiod, 
int slowing, int method, int price_field, int mode, int shift); // StochNR adiciona novo Sens campo

double iStochastic(string symbol, int timeframe, int %Kperiod, int %Dperiod, 
int slowing, int method, int price_field, int mode, int shift) // estocástico padrão 

Para um uso prático, é possível chamá-lo conforme especificado acima, mas é melhor fazê-lo de outra maneira. Basta adicionar algum código à sua função Stoch:

double Stoch(int Kperiod, int Slowing, int PriceFild, double sens, int i) {  
   // preços máximos e mínimos
   double max,min,c;
   for(int j=i; j<i+Slowing; j++) {
      if(PriceFild==1) { // pelo Close
         max+=Close[ArrayMaximum(Close,Kperiod,j)];
         min+=Close[ArrayMinimum(Close,Kperiod,j)];
        }
      else { // pelo High/Low
         max+=High[ArrayMaximum(High,Kperiod,j)];
         min+=Low[ArrayMinimum(Low,Kperiod,j)];
        }
      c+=Close[j];
     }
   
   double delta=max-min;
   if(delta<sens) {
      sens/=2;
      max+=sens; min-=sens;
     }
   delta=max-min;
   if(delta==0) double s0=1;
   else s0=(c-min)/delta;

   return(100*s0);
  }

É claro que, se você precisar de uma linha de sinal, precisará de uma média móvel adicional de seu valor. Outra forma é obtê-la do primeiro buffer do iCustom, mas isso será mais lento.

Como você pode ver, agora o nome é mais informativo, há um tipo de cálculo de preço. Se a sensibilidade for definida como maior que 0, seu valor é adicionado ao nome do oscilador.


Nota do Editor:

Observe que esta é uma tradução espelhada da versão original em russo.

Se você tiver alguma dúvida para o autor, sugestões ou comentários, é melhor postá-los .

Se você achou este código útil para negociação ou fins educacionais, não se esqueça de agradecer ao autor.

Publicações relacionadas

Comentário (0)