O Indicador ADX Suavizado foi desenvolvido a pedido de um visitante em um fórum, e a sua criação não foi muito complicada. No entanto, a busca por uma descrição clara do algoritmo do ADX suavizado não trouxe resultados. Por isso, vou compartilhar aqui o código que foi fornecido:
Entradas: {definindo entradas}
Length(14), ADXTrend(25), alpha1(0.25), alpha2(0.33);
Variáveis: {definindo variáveis}
DMIPlus(0), DMIMinus(0), DMI(0), ADX(0),
DIPlusLead(0), DIMinusLead(0), DIPlusFinal(0), DIMinusFinal(0),
ADXLead(0), ADXFinal(0);
{agora chamando as funções internas do ADX, para que não precisemos calculá-las}
Value1 = DirMovement(H, L, C, Length, DMIPlus, DMIMinus, ADX);
{esta parte é a suavização do indicador ADX original, as linhas DI+, DI- e ADX são suavizadas}
DIPlusLead = 2*DMIPlus + (alpha1 - 2) * DMIPlus[1] + (1 - alpha1) * DIPlusLead[1];
DIPlusFinal = alpha2*DIPlusLead + (1 - alpha2) * DIPlusFinal[1];
DIMinusLead = 2*DMIMinus + (alpha1 - 2) * DMIMinus[1] + (1 - alpha1) * DIMinusLead[1];
DIMinusFinal = alpha2*DIMinusLead + (1 - alpha2) * DIMinusFinal[1];
ADXLead = 2*ADX + (alpha1 - 2) * ADX[1] + (1 - alpha1) * ADXLead[1];
ADXFinal = alpha2*ADXLead + (1 - alpha2) * ADXFinal[1];
{Plotando no gráfico}
Plot1(DIPlusFinal, "DMI+");
Plot2(DIMinusFinal, "DMI-");
Plot3(ADXFinal, "ADX");
De fato, se você não se aprofundar no sentido subjacente do texto inicial sobre o ADX suavizado, essa suavização pode ser dividida em duas etapas. Suponha que temos uma sequência numérica P e precisamos suavizá-la com o mínimo de atraso. Para isso, construímos na primeira etapa a função V(P) da oscilação da sequência P a partir da seguinte fórmula:
V0 = (8*P0 - 7*P1 + 3*V1) / 4,
onde:
- P0 é o valor atual da sequência (um preço ou um indicador);
- P1 é o valor anterior da sequência;
- V1 é o valor anterior da oscilação;
- V0 é o valor atual da oscilação.
Ou, de outra forma:
V0 = (Vol(P) + 3*V1) / 4,
onde:
Vol(P) = 8*P0 - 7*P1 - explosão de Ehlers (o termo foi inventado por mim).
Na segunda etapa, aplicamos a suavização ponderada simples:
W0 = (1*V0 + 2*W1) / (2 + 1).
onde:
- W0 é o valor suavizado atual da sequência P;
- V0 é o valor atual da oscilação da sequência P;
- W1 é o valor suavizado anterior.
No ADX Suavizado, esse algoritmo de suavização é aplicado a todos os três buffers do indicador padrão ADX. É por isso que o indicador obtido é chamado de ADX Suavizado. Se estivéssemos suavizando o indicador RSI, o chamaríamos de RSI Suavizado, e assim por diante. A figura abaixo mostra que o ADX Suavizado, de fato, não é tão "tremido" quanto o ADX original, padrão (Average Directional Movement Index).

Publicações relacionadas
- EquiPeak Drawdown Tracker: Controle Eficiente para Seus EAs no MetaTrader 5
- Índice de Caminhada Aleatória: Um Indicador Essencial para MetaTrader 5
- EURX: O Índice do Euro para MetaTrader 4 - Como Utilizar
- Níveis Históricos: O Indicador Essencial para MetaTrader 5
- Índice de Volatilidade Chaikin com Seleção de Algoritmo de Suavização para MetaTrader 5