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 lá.
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
- iMFISignAlert: O Indicador para MetaTrader 5 que Gera Alertas
- Calendário Econômico: Monitoramento e Cache para Testes de Estratégia no MetaTrader 5
- Bandas Quantílicas: Entenda Esse Indicador para MetaTrader 5
- Buffers Horários para Coleta de Dados no MetaTrader 5
- EquiPeak Drawdown Tracker: Controle Eficiente para Seus EAs no MetaTrader 5