スムーズADXとは?
スムーズADXは、トレーダーからのリクエストによって開発されたインディケーターです。実際のところ、スムーズADXのアルゴリズムに関する説明を探しても、あまり情報が見つからなかったため、ここではそのコードをシェアします。
コードの入力パラメータ
入力: {入力パラメータの宣言}
Length(14),
ADXTrend(25), alpha1(0.25), alpha2(0.33);
Length(14),
ADXTrend(25), alpha1(0.25), alpha2(0.33);
変数の宣言
変数: {変数の宣言}
DMIPlus(0), DMIMinus(0), DMI(0), ADX(0),
DIPlusLead(0), DIMinusLead(0), DIPlusFinal(0), DIMinusFinal(0),
ADXLead(0), ADXFinal(0);
DMIPlus(0), DMIMinus(0), DMI(0), ADX(0),
DIPlusLead(0), DIMinusLead(0), DIPlusFinal(0), DIMinusFinal(0),
ADXLead(0), ADXFinal(0);
ADX関数の呼び出し
Value1 = DirMovement(H, L, C, Length, DMIPlus, DMIMinus, ADX);
スムージング処理
DIPlusLead = 2*DMIPlus + (alpha1 - 2) * DMIPlus[1] + (1 - alpha1) * DIPlusLead[1];
DIPlusFinal = alpha2*DIPlusLead + (1 - alpha2) * DIPlusFinal[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];
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];
ADXFinal = alpha2*ADXLead + (1 - alpha2) * ADXFinal[1];
チャートへのプロット
Plot1(DIPlusFinal, "DMI+");
Plot2(DIMinusFinal, "DMI-");
Plot3(ADXFinal, "ADX");
Plot2(DIMinusFinal, "DMI-");
Plot3(ADXFinal, "ADX");
スムーズADXの理解
スムーズADXの背後にある深い意味を理解しないと、スムージングは2つの段階に分けられます。まず、数列Pを最小限の遅延でスムージングします。最初の段階では、次の式からP系列の振動関数V(P)を構築します:
- P0は系列の現在値(価格や指標);
- P1は前の系列の値;
- V1は前の振動の値;
- V0は現在の振動の値。
また、別の方法では次のように表現できます:
V0 = (Vol(P) + 3*V1) / 4,
ここで:
Vol(P) = 8*P0 - 7*P1 - Ehlersのバースト(私が考案した用語)です。
第二段階では、単純な加重スムージングを適用します:
W0 = (1*V0 + 2*W1) / (2 + 1);
ここで:
- W0は系列Pの現在のスムーズ値;
- V0はP系列の現在の振動値;
- W1は前のスムーズ値。
スムーズADXでは、このスムージングアルゴリズムが標準のADXの3つのバッファーすべてに適用されるため、スムーズADXと呼ばれます。RSIのスムージングを行う場合は、スムーズRSIと呼ぶことになります。以下の図は、スムーズADXが標準のADXよりも「揺れ」が少ないことを示しています。
