コンテンツにスキップ

ADX / DMI(平均方向性指数)

ADX / DMI は、相場にトレンドが出ているか、出ているならどちらの方向か、その強度はどれくらいかを分けて数値化する指標群です。レンジ相場とトレンド相場でエントリー戦略を切り替えるためのレジーム判定軸として使います。単体のシグナルではなく、上位足の ADX と下位足のセットアップを組み合わせるのが実践的です。

価格の下に+DI、-DI、ADXのサブパネルを表示したイメージ。ADXが25を超えるとトレンドが強い。

架空データによるイメージ図(実際の相場データではありません)。下段が +DI、-DI、ADX。トレンド期に ADX が 25 を超え、レンジで低下する例。

定義

DMI(Directional Movement Index)は J. Welles Wilder Jr. が1978年の New Concepts in Technical Trading Systems で発表した指標群です。方向性の有無(+DM / -DM)、方向性の強度(+DI / -DI)、方向性の総合強度(ADX)の3段階で構成されます。

Directional Movement(+DM / -DM)

前日比の高値差、安値差から、当日の方向性ムーブを取り出します。

UpMovet=HtHt1\text{UpMove}_t = H_t - H_{t-1}

DownMovet=Lt1Lt\text{DownMove}_t = L_{t-1} - L_t

  • +DM:UpMove(ただし UpMove > DownMove かつ UpMove > 0 のとき)、それ以外は 0
  • -DM:DownMove(ただし DownMove > UpMove かつ DownMove > 0 のとき)、それ以外は 0

インサイドバー(HtHt1H_t \le H_{t-1} かつ LtLt1L_t \ge L_{t-1})では +DM も -DM も 0 になります。両方が正になることはありません(排他条件)。

True Range(TR)

Wilder は TR を DMI の分母に使います。定義は ATR と同じです。

TRt=max(HtLt, HtCt1, LtCt1)\text{TR}_t = \max(H_t - L_t,\ |H_t - C_{t-1}|,\ |L_t - C_{t-1}|)

Wilder 平均(平滑化)

Wilder の平滑は α=1/n\alpha = 1/n の EMA と数学的に等価です。

X~t=X~t1+XtX~t1n\tilde{X}_t = \tilde{X}_{t-1} + \frac{X_t - \tilde{X}_{t-1}}{n}

初期値は最初の nn 個の単純合計(または算術平均)を使います。pandas の ewm(alpha=1/n, adjust=False) が最も近い挙動です。

Directional Indicator(+DI / -DI)

+DIt=100+DM~tTR~t+\text{DI}_t = 100 \cdot \frac{\widetilde{+DM}_t}{\widetilde{TR}_t}

DIt=100DM~tTR~t-\text{DI}_t = 100 \cdot \frac{\widetilde{-DM}_t}{\widetilde{TR}_t}

+DI と -DI はそれぞれ 0 から 100 の範囲を取り、上下方向のムーブがどれだけ強いかを表します。

Directional Index(DX)

DXt=100 +DItDIt  +DIt+DIt \text{DX}_t = 100 \cdot \frac{|\ +\text{DI}_t - -\text{DI}_t\ |}{\ +\text{DI}_t + -\text{DI}_t\ }

DX は方向を持ちません(上下 DI の乖離度)。片側 DI が支配的な期間ほど DX は高くなります。

Average Directional Index(ADX)

DX を Wilder 平均で平滑した値が ADX です。ADX が本来の目的関数になります。

ADXt=DX~t\text{ADX}_t = \widetilde{DX}_t

  • ADX は 0 から 100
  • 方向を持たない(上下どちらのトレンドでも高くなる)
  • ADX の「レベル」と「傾き」を別々に読む

パラメータと期間

パラメータ標準意味
n14Wilder 平均の期間(+DM / -DM / TR / DX すべて)
平均法Wilderpandas では ewm(alpha=1/n, adjust=False)
価格H/L/C高値、安値、終値。始値は使わない

Wilder の原典設定(14)は今も業界標準です。派生として次を使うこともありますが、意識される値の主流は 14 です。

時間足ADX 期間主な用途
5分14短期ブレイク後の追随判定(東京仲値通過後の 5〜15 分)
15分14デイトレのレジーム判定(レンジ / トレンド切り分け)
1時間14当日方向の骨格。上位足フィルタとして
4時間14スイング環境のトレンド強度
日足14週次以上の方向感

シグナル

ADX 閾値

Wilder 原典と現代実務での使い分けです。

ADX 帯状態実務判断
< 20レンジ逆張り優位。トレンドフォロー系は待機
20〜25移行期エントリー保留。方向確定待ち
25〜40明確なトレンドトレンドフォロー最適。押し目、戻り目狙い
> 40強トレンド追随可だが過熱、巻き戻し警戒
> 50〜60過熱逆張りではなく利確、追随の縮小

Wilder 自身は「ADX > 25 = trending」を提唱しましたが、通貨ペアと時間足で閾値は変わります。USD/JPY 日足では ADX が 30 を超える局面は年に数回程度です。

+DI / -DI クロス

+DI が -DI を上抜けたら買い、下抜けたら売り、というのが古典的な使い方です。ただし単体では騙しが多くなります。

  • +DI > -DI かつ ADX 上昇:上方向のトレンド発生、継続
  • -DI > +DI かつ ADX 上昇:下方向のトレンド発生、継続
  • +DI が -DI をクロスするだけで ADX 低位(< 20)なら騙し多発

ADX の傾き

レベル以上に傾きが重要です。

  • ADX 上昇かつ高い水準:トレンド継続
  • ADX 下降かつ高い水準からの下落:トレンド終盤、巻き戻し
  • ADX 低位横ばい:レンジ継続
  • ADX 低位からの上昇初動:ブレイク候補

極端値からの反転

ADX が 40〜50 の高値圏から明確に下降するのは、トレンド終了の初期兆候になります。トレンドフォローポジションの利確を検討するタイミングです。

USD/JPY での使いどころ

USD/JPY は時間帯によりトレンド発生の場所が変わります。ADX のレベルは時間足で解釈を変えます。

東京時間(JST 09:00〜15:00)

東京時間は基本レンジです。日足 ADX が低位の局面が長く続きます。

  • 15分足 ADX < 20 が典型。レンジトレード優位
  • 東京仲値(09:55)前後の急変で 5分足 ADX が一時的に跳ねるが、通過後に沈静化することが多い
  • 東京時間だけ見て ADX 低位を「トレンドなし」と結論しない。ロンドン以降で反転することがある

ロンドンオープン(JST 16:00)

ロンドン勢の参入で東京レンジが破れます。ADX が低位から急上昇するタイミングです。

  • 15:30〜16:30 に 15分足 ADX が 20 から 25 へ上昇するのがブレイク初動候補
  • +DI / -DI どちらが優勢かで方向を確認する
  • ADX が既に高い(> 30)状態でロンドン入りするなら、東京中に方向が付いていた継続シナリオ
  • ロンドン序盤の初動を逆張りしない(ADX 上昇局面)

NYオープン(JST 22:30)

NY オープンは指標発表と重なることが多くなります。ADX の解釈は指標の有無で分かれます。

  • 指標なしの日:ロンドン時間の方向を継続することが多い
  • 指標日:発表前は ADX 低下、発表後に急上昇
  • 指標直後の +DI / -DI クロスだけで判断しない。次の 15分足終値を確認する
  • ロンドンから NY への連続トレンドが続いている場合、ADX > 30 でも押し目狙いは有効

日足レベルの ADX

日足 ADX は月次の相場環境として機能します。

  • 日足 ADX < 20:レンジ相場(2週間から数か月続くことがある)
  • 日足 ADX > 25:明確な週次トレンド。トレンドフォロー戦略が回りやすい環境
  • 日足 ADX > 40:稀。強い一方向の展開(介入警戒、ファンダ材料が強い局面など)
  • 日足 ADX と下位足の ADX を組み合わせ、「上位足でトレンド、下位足で押し目」の重なりを作る

落とし穴

  • +DI / -DI クロス単体でのエントリー:ADX 低位でのクロスは騙し多発。ADX が 20 を超えているかを必ず確認する
  • Wilder 平均と単純平均の混同:SMA や EMA(α=2/(n+1)\alpha = 2/(n+1))で計算すると別物になる。Wilder は α=1/n\alpha = 1/n。pandas なら ewm(alpha=1/n, adjust=False) を使う
  • 初期値の欠落:Wilder 平均は最初の nn 期間で確定値にならない。実装時に最初の n×2n \times 2 期間は使わない(warm-up 期間)
  • 閾値 25 を絶対視する:25 は原典由来だが、通貨ペア、時間足、時代で最適点は異なる。USD/JPY 日足では 22〜28 の間で運用検討
  • ADX 高値圏だからエントリー:ADX が既に高いときは終盤に近い可能性がある。傾き(下降し始めていないか)を確認する
  • DX 計算での 0 割れ:+DI と -DI の和が非常に小さい(ほぼ 0)期間があると DX 計算が不安定になる。実装で分母 0 の保護を入れる
  • 異なる時間足でパラメータをそろえない:15分足で n=14n=14、日足で n=14n=14 を使うと物理的な意味(期間)が異なる。時間足ごとに用途を分ける
  • レンジ判定の遅れ:ADX は Wilder 平均後の Wilder 平均なので、実際のレジーム変化から数本遅れる。エントリー確認には他指標との重なりが必要
  • 多通貨ペアでの一律運用:EUR/USD と USD/JPY では ADX の普通の水準が異なる。ペアごとに過去分布を確認する
  • 教科書シグナルの実データ有意性:検証では ADX フィルタは移動平均系ルールで有意な改善を出さなかった。ADX はレジーム判定の補助として使い、エントリーシグナルとして単体依存しない

Python 実装スケッチ

import numpy as np
import pandas as pd
def wilder_smoothed(series: pd.Series, n: int) -> pd.Series:
"""Wilder 平均 (α = 1/n) を pandas の ewm で表現。"""
return series.ewm(alpha=1.0 / n, adjust=False, min_periods=n).mean()
def adx_dmi(
high: pd.Series,
low: pd.Series,
close: pd.Series,
n: int = 14,
) -> pd.DataFrame:
up_move = high.diff()
down_move = -low.diff()
plus_dm = np.where((up_move > down_move) & (up_move > 0), up_move, 0.0)
minus_dm = np.where((down_move > up_move) & (down_move > 0), down_move, 0.0)
prev_close = close.shift(1)
tr = pd.concat(
[
(high - low),
(high - prev_close).abs(),
(low - prev_close).abs(),
],
axis=1,
).max(axis=1)
plus_dm_s = wilder_smoothed(pd.Series(plus_dm, index=high.index), n)
minus_dm_s = wilder_smoothed(pd.Series(minus_dm, index=high.index), n)
tr_s = wilder_smoothed(tr, n)
plus_di = 100.0 * plus_dm_s / tr_s.replace(0.0, np.nan)
minus_di = 100.0 * minus_dm_s / tr_s.replace(0.0, np.nan)
di_sum = plus_di + minus_di
dx = 100.0 * (plus_di - minus_di).abs() / di_sum.replace(0.0, np.nan)
adx = wilder_smoothed(dx, n)
return pd.DataFrame(
{
"plus_di": plus_di,
"minus_di": minus_di,
"dx": dx,
"adx": adx,
}
)

adjust=False を明示することで、pandas の EMA を Wilder 平均に一致させます。min_periods=n で warm-up 期間を NaN として残します。分母 0 は replace(0.0, np.nan) で保護します。

参考

  • J. Welles Wilder Jr., New Concepts in Technical Trading Systems, Trend Research, 1978
  • Investopedia — “Average Directional Index (ADX)”
  • Investopedia — “Directional Movement Index (DMI)”
  • StockCharts — “ADX: The Trend Strength Indicator”
  • pandas documentation — pandas.Series.ewm