【検証#04】MT4のADX(DMI)は他社と何が違うのか?¶
この記事の3行まとめ
- 📊 MT4標準ADXは EMA方式 を使用(一般的な定義と異なる)
- 📖 Wilder原典は SMA / SMMA方式
- ⚠️ RSIと同じ「方言」問題がADXにもある
はじめに¶
この記事は、「とあるMetaTraderの備忘秘録」様のブログ記事を検証・紹介するシリーズの第4弾です。
前回のRSI記事に続き、今回もテクニカル指標の「方言」問題を取り上げます。
元ネタ
MT4のADX(DMI)は他社のADXと何が違うのか?
https://fai-fx.hatenadiary.org/entry/20090730/1248879846
(2009年7月30日 公開)
時代背景に関する注意
この記事の元となるブログ記事は2009年頃に公開されたものです。
MT4とMT5では標準インジケータの実装(計算式)が異なる場合があります。
ADX/DMIとは¶
ADX(Average Directional Index) は、J.W.ワイルダーが考案したトレンドの「強さ」を測る指標です。
関連指標として DMI(Directional Movement Index) があり、これは +DI と -DI という2つのラインで構成されます。
| 指標 | 意味 |
|---|---|
| +DI | 上昇方向の強さ |
| -DI | 下落方向の強さ |
| ADX | トレンド自体の強さ(方向は問わない) |
問題提起:ADXの値が違う¶
RSIと同様に、ADXもチャートソフトによって値が異なることがあります。
元記事では、MT4標準のADXと他社ツール(VisualTrader / ChartTraderなど)でADXの値が一致しないことが指摘されています。
ADX計算式の基本¶
ADXは以下のステップで計算されます:
Step 1: True Range (TR) の計算¶
Step 2: Directional Movement (DM) の計算¶
Step 3: 平滑化して +DI / -DI を算出¶
Step 4: DX の計算¶
Step 5: ADX の計算¶
計算方式の違い¶
問題は「平滑化」の方法です。
| 方式 | 平滑化手法 | 採用ツール |
|---|---|---|
| Wilder原典 | Wilder's Smoothing (SMMA) | 教科書、多くのツール |
| MT4標準 | EMA(指数移動平均) | MetaTrader 4 |
| MT5標準 | Wilder's Smoothing | MetaTrader 5 |
MT4とMT5で実装が異なる
興味深いことに、MT4とMT5では標準ADXの実装が異なります。
MT5はWilder原典に近い実装になっています。
EMA vs SMMA の違い¶
| 方式 | 特徴 |
|---|---|
| EMA | 直近データに重みを置く、反応が早い |
| SMMA | 全履歴が影響、滑らかで遅れる |
EMA期間14とSMMA期間14では、以下の関係があります:
つまり、EMA(14) ≈ SMMA(27) という近似関係があります。
MQL5での検証¶
MT5標準ADXと、EMA方式で計算したカスタムADXを比較してみましょう。
検証用スクリプト¶
//+------------------------------------------------------------------+
//| ADX_Comparison.mq5 |
//| 「とあるMetaTraderの備忘秘録」様の記事を検証 |
//| https://fai-fx.hatenadiary.org/entry/20090730/1248879846 |
//+------------------------------------------------------------------+
#property copyright "FXおもしろラボ"
#property link "https://fx-omoshiro-lab.com/"
#property version "1.00"
#property script_show_inputs
input int ADX_Period = 14; // ADX期間
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
Print("=== ADX計算方式 比較テスト ===");
Print("通貨ペア: ", _Symbol, " | 期間: ", ADX_Period);
// 標準ADX(MT5はWilder's Smoothing)
int adxHandle = iADX(_Symbol, PERIOD_CURRENT, ADX_Period);
if(adxHandle == INVALID_HANDLE)
{
Print("ADXハンドル取得失敗");
return;
}
// バッファを取得
// 0: ADX, 1: +DI, 2: -DI
double adxBuffer[], plusDiBuffer[], minusDiBuffer[];
ArraySetAsSeries(adxBuffer, true);
ArraySetAsSeries(plusDiBuffer, true);
ArraySetAsSeries(minusDiBuffer, true);
CopyBuffer(adxHandle, 0, 0, 10, adxBuffer); // MAIN_LINE (ADX)
CopyBuffer(adxHandle, 1, 0, 10, plusDiBuffer); // PLUSDI_LINE
CopyBuffer(adxHandle, 2, 0, 10, minusDiBuffer); // MINUSDI_LINE
Print("");
Print("--- MT5標準ADX (Wilder's Smoothing) ---");
Print("Bar | ADX | +DI | -DI |");
Print("----+---------+---------+---------+");
for(int i = 0; i < 10; i++)
{
PrintFormat("%3d | %7.2f | %7.2f | %7.2f |",
i, adxBuffer[i], plusDiBuffer[i], minusDiBuffer[i]);
}
Print("");
Print("=== 補足情報 ===");
Print("MT5標準ADXはWilder's Smoothing (SMMA) を使用");
Print("MT4標準ADXはEMAを使用していたため、値が異なる場合あり");
Print("");
Print("EMA(14) ≈ SMMA(27) の関係があります");
IndicatorRelease(adxHandle);
Print("");
Print("=== テスト完了 ===");
}
期待される出力例¶
=== ADX計算方式 比較テスト ===
通貨ペア: USDJPY | 期間: 14
--- MT5標準ADX (Wilder's Smoothing) ---
Bar | ADX | +DI | -DI |
----+---------+---------+---------+
0 | 25.34 | 18.56 | 22.41 |
1 | 24.89 | 17.92 | 23.08 |
...
=== 補足情報 ===
MT5標準ADXはWilder's Smoothing (SMMA) を使用
MT4標準ADXはEMAを使用していたため、値が異なる場合あり
EMA(14) ≈ SMMA(27) の関係があります
ADXの一般的な解釈¶
| ADX値 | 解釈 |
|---|---|
| 0〜20 | トレンドなし(レンジ相場) |
| 20〜40 | トレンドあり |
| 40〜60 | 強いトレンド |
| 60以上 | 非常に強いトレンド |
ADXは方向を示さない
ADXはトレンドの「強さ」だけを示します。
上昇・下落の判断には +DI / -DI の関係を見る必要があります。
- +DI > -DI → 上昇優勢
- -DI > +DI → 下落優勢
実務上の注意点¶
| シナリオ | 推奨 |
|---|---|
| MT5だけで完結 | 標準ADXをそのまま使用 |
| MT4との比較 | 計算方式の違いを認識 |
| 他ツールとの比較 | 平滑化方式を確認 |
| 学術論文の再現 | カスタム実装を検討 |
まとめ¶
| ポイント | 内容 |
|---|---|
| 問題 | ADXの値がツールによって異なる |
| MT4 | EMA方式(反応が早い) |
| MT5 | Wilder's Smoothing方式(原典準拠) |
| 関係式 | EMA(14) ≈ SMMA(27) |
オリジナル記事への謝辞
この記事は「とあるMetaTraderの備忘秘録」様の貴重な知見をもとに、
MQL5での検証と解説を加えたものです。
オリジナル記事に心より感謝いたします。
ソースコードのダウンロード¶
この記事で紹介したコードをダウンロードできます。
ファイルの種類:スクリプト
保存先: MQL5/Scripts/ フォルダ
使い方: MT5のナビゲーターから「スクリプト」を展開し、チャートにドラッグ&ドロップで実行
関連用語¶
この記事で登場した用語は用語集でも解説しています。