ADX・DMI:トレンドの強さと方向を測る
- +DI>−DIの間だけ持つ売買(期間14日)は、233回の取引・PF1.31・最大下落率−32.9%、年率3.1%だった
- ADX25以上の時だけ買うと、負けた取引は172回から38回に減り、PFは1.72に上がる。ただし年率は3.1%から2.7%に下がった
- #001の50日×200日線に同じフィルターをかけると、負けは10回から6回に減る一方、年率は6.5%から4.8%に落ちた
DMIは「上げの力」と「下げの力」の綱引き
DMI(方向性指数)は、J・W・ワイルダーが考案した指標です。毎日の値動きを「上への伸び」と「下への伸び」に分けて数え、どちらの力が強いかを比べます。出発点は、前日と今日のローソク足2本だけです。
−DI = −DMの14日平滑 ÷ ATR(14) × 100
DX = |+DI − −DI| ÷(+DI + −DI)× 100
ADX = DXの14日平滑
平滑化には、ワイルダーの平均(RMA、1/14ずつ新しい値を取り込む移動平均)を使います。+DIが−DIより上なら上げの力が優勢、下なら下げの力が優勢です。約19年分の日経平均では、+DMが立った日が47.5%、−DMが42.2%、両方0の日が10.3%でした。
ADXは「向き」ではなく「強さ」
ADXは+DIと−DIの差の大きさを、さらにならしたものです。差が開くほど大きくなるので、上昇でも下落でも、一方向に強く動いていればADXは上がります。0〜100の値を取り、一般に25以上が「トレンドあり」、20未満が「もみ合い」の目安とされます。2007年4月以降、ADX(14)が25を超えていた日は34.1%、中央値は21.4でした。
「ADXが高い=上昇トレンド」ではありません。ADXには向きの情報がなく、急落の最中にも高くなります。実際、−DI優勢でADXが40以上の日(88日)の20営業日後の平均リターンは+2.90%と、すべての日の+0.75%を大きく上回りました。強い下げのあとは、むしろ戻りやすかったのです。
実際の日経平均で見てみる
2025年4月の急落では、4月7日(終値31,136円)に−DIが57.7まで上がり、+DIは7.9まで沈みました。ADXは4月9日に42.0で、直近500営業日の最高値です。ただし、このときのADXは「下げが強い」ことを示していただけです。4月11日には33,585円まで戻り、5月13日(38,183円)には+DIが40.1、−DIが18.1と立場が逆転しました。
その後の上昇局面でも、ADXは2025年10月10日に41.3、2026年5月14日に39.5と、何度も高い値を付けています。一方、2026年10月2日(68,309円)は+DIが36.6、−DIが21.3と上げの力が優勢ながら、ADXは15.5と低い水準です。直近500営業日で+DIと−DIのクロスは43回、ADXが25を超えていた日は40.0%でした。
検証①:+DI/−DIで売買、ADXフィルターの有無
ルール:+DIが−DIより上の間だけ保有する(期間14日)。これに「ADXが25を超えている時だけ新しく買う(売りは+DIが−DIを下回った時)」版と、「ADXが25超かつ+DI>−DIの間だけ保有する」版を比べました。条件は共通の検証ルールのとおりです。
| 戦略 | 最終資産 | 年率 | 最大下落率 | 取引 | 勝率 | PF | 保有率 |
|---|---|---|---|---|---|---|---|
| 買い持ち | 3.93倍 | 7.3% | −61.4% | — | — | — | 100% |
| +DI>−DIの間保有 | 1.80倍 | 3.1% | −32.9% | 233 | 26% | 1.31 | 52% |
| ADX>25の時だけ新規に買う | 1.68倍 | 2.7% | −22.9% | 63 | 40% | 1.72 | 24% |
| ADX>25かつ+DI>−DIの間保有 | 1.46倍 | 2.0% | −21.6% | 72 | 40% | 1.53 | 19% |
フィルターなしの+DI>−DIは、平均10.5日で売買を繰り返し、勝率はわずか26%です。それでもPFが1.31あるのは、負けの平均が−1.48%と小さく、勝ちの平均が+5.48%と大きいからです。典型的な「小さく負けて大きく勝つ」順張りの形です。コストをゼロにすると年率5.57%・PF1.57まで戻るので、往復0.2%のコストも大きく響いています。
ダマシの「回数」は減った。1回あたりは重くなった
負けた取引を「ダマシ」と数えると、ADX25のフィルターで172回から38回に減りました。負けの割合も74%から60%に下がっています。ただし取引そのものが233回から63回に減っており、勝ちも61回から25回に減りました。しかも負けの平均は−1.48%から−2.22%に悪化しています。ADXが25を超えるのは、すでにある程度動いた後です。遅れて乗るぶん、反転したときの損も大きくなります。
25という線の引き方にも結果が強く左右されます。閾値を変えると、次のように大きくばらつきました。
| ADX>○の時だけ新規に買う | 年率 | 最大下落率 | 取引 | 勝率 | PF | 保有率 |
|---|---|---|---|---|---|---|
| ADX>20 | 6.1% | −20.9% | 90 | 42% | 2.57 | 32% |
| ADX>25 | 2.7% | −22.9% | 63 | 40% | 1.72 | 24% |
| ADX>30 | 1.9% | −17.8% | 29 | 41% | 2.14 | 13% |
ADX>20は年率6.1%と目を引きますが、結果を見てから閾値を選ぶのは過剰最適化そのものです。20・25・30で年率が6.1%→2.7%→1.9%と動くこと自体が、「25」に特別な意味がないことを示しています。
検証②:#001のゴールデンクロスにADXフィルター
ルール:#001の「50日線が200日線より上の間保有」に、「ADX(14)が25を超えている時だけ新しく買う(売りは50日線が200日線を下回った時)」を加えます。取引回数を補うため、5日×25日のクロスでも同じことをしました。条件は共通の検証ルールのとおりです。
| 戦略 | 最終資産 | 年率 | 最大下落率 | 取引 | 勝率 | PF | 保有率 |
|---|---|---|---|---|---|---|---|
| 買い持ち | 3.93倍 | 7.3% | −61.4% | — | — | — | 100% |
| SMA50×200(#001) | 3.41倍 | 6.5% | −36.7% | 15 | 33% | 2.51 | 61% |
| SMA50×200+ADX25 | 2.50倍 | 4.8% | −41.0% | 13 | 54% | 1.99 | 54% |
| SMA5×25 | 1.99倍 | 3.6% | −37.2% | 129 | 33% | 1.43 | 58% |
| SMA5×25+ADX25 | 1.90倍 | 3.4% | −33.9% | 51 | 41% | 1.82 | 30% |
50日×200日線では、負けた取引が10回から6回に減り、勝率は33%から54%に上がりました。ダマシは確かに減っています。ところが年率は6.5%から4.8%に下がり、最大下落率は−36.7%から−41.0%に悪化しました。勝ちの平均が+31.30%から+15.74%へと半減したのが原因です。
ゴールデンクロスが起きた日のADXを見ると、理由がわかります。2016年10月13日(ADX12.0)、2020年7月17日(11.9)、2024年12月2日(10.1)など、15回のうち10回はADXが25未満でした。長期線のクロスは、もみ合いからゆっくり上がり始めた時点で起きることが多く、ADXが25を超えるのを待つと、上昇の前半を取り逃がします。5日×25日でも、負けは87回から30回に減ったものの、年率は3.6%から3.4%とわずかに下がりました。
読み解き
- +DI>−DIの間保有は、取引数・PF・下落率のバランスが取れている。取引233回、PF1.31、最大下落率−32.9%。後半(2016年10月〜)の年率4.37%は前半1.71%を上回った。ただし年率3.1%は買い持ち7.3%の半分以下。
- ADXフィルターは「ダマシの回数」を減らすが、「成績」は上げない。DMIでは負けが172回→38回、#001では10回→6回に減った。一方で年率はどちらも下がった。トレンドを確認してから乗るぶん、上昇の初動を失い、1回の負けも重くなる。
- ADXの効果は閾値しだいで、安定しない。閾値20・25・30で年率は6.1%・2.7%・1.9%。ADXが25〜30の局面は20日後リターンが+0.06%と全日平均より低く、「25超え」そのものに優位性は見られなかった。
成績のまとめ(+DI>−DIの間保有・期間14日)
取引233回・PF1.31・最大下落率−32.9%と、回数と下落の抑え方は一定の水準にある。ただし余裕はほとんどない。期間を11日にすると年率0.27%・PF1.07、17日でも年率1.50%・PF1.20まで落ちる。期間14日がたまたま良かった可能性は残る。ADX25フィルター版はPF1.72・最大下落率−22.9%と中身は良くなるが、取引は19年で63回と少なめ。
自分で試す(TradingView)
//@version=6
indicator("DMI・ADXフィルター", overlay = false)
len = input.int(14, "期間")
th = input.float(25, "ADXの閾値")
[diPlus, diMinus, adx] = ta.dmi(len, len) // ワイルダー方式(RMAで平滑化)
plot(diPlus, "+DI", color = color.green)
plot(diMinus, "−DI", color = color.red)
plot(adx, "ADX", color = color.blue, linewidth = 2)
hline(th, "ADX閾値", color = color.orange)
// 主ルール:+DI > −DI の間保有
bull = diPlus > diMinus
bgcolor(bull ? color.new(color.green, 90) : na, title = "+DI優勢")
// フィルター版:ADX > 閾値 の時だけ新規に買う
var bool inPos = false
if not inPos and bull and adx > th
inPos := true
else if inPos and not bull
inPos := false
plotshape(inPos and not inPos[1], "フィルター版 買い", shape.triangleup, location.bottom, color.green, size = size.tiny)
plotshape(not inPos and inPos[1], "フィルター版 売り", shape.triangledown, location.top, color.red, size = size.tiny)

