ADXとRSIを組み合わせる考え方 — トレンド強度と過熱感の整合性
ADX(平均方向性指数)とRSI(相対力指数)は、同じ「相場の勢い」というキーワードで括られがちな指標ですが、見ている対象がまったく違います。ADXは値動きが一方向に偏っているかどうか、つまり トレンドの確立度 を測ろうとする指標で、価格がどちらに進んでいるかという方向情報は持ちません。RSIは一定期間の上昇幅と下落幅の比率から 値動きの偏り を数値化したオシレーターです。
両者を併用する狙いは、RSIに表れる「買われすぎ・売られすぎ」という同じ数値情報を、ADXが示す相場環境ごとに別の意味として解釈できるようにすることにあります。本稿では、ADXとRSIを並べて使うときの設計上の考え方と、cBot実装時の落とし穴を整理します。
ADXの役割
ADX(Average Directional Index)はDMI(方向性指数)の派生指標で、+DIと-DIという2系列の方向性データから「方向はどちらでもいいので、どれだけ一方向にきれいに進んでいるか」を0〜100で表現します。20〜25のラインを境にトレンド有無を判定する流派が一般的です。基礎の整理は別記事のADX(平均方向性指数)とはを参照してください。
ADXを単独で使うときに観察される代表的なポイントは以下です。
- 水準そのもの(高い=トレンドが強い、低い=方向感が薄い)
- 上昇/下降の勢い(伸びている=トレンドが立ち上がり中)
- +DI/-DIとの位置関係(方向の手がかり)
ADXの弱点は、方向そのものを直接示さない点と、トレンドが収束したあともしばらく高水準を維持して「トレンドが終わった」ことの検知が遅れる点にあります。「いまトレンドの中にいるか」は判別できても、「どこで終わるか」までは語れない構造です。
RSIの役割
RSIは0〜100の範囲で値動きの偏りを表現します。70以上を買われすぎ、30以下を売られすぎとして観察する古典的な読み方が広く知られています。詳細はRSI(相対力指数)とはにまとめています。
RSIの弱点は、相場環境ごとに同じ数値の意味が変わってしまう点です。レンジ相場ではRSI70/30で反転圧力が観察されやすい一方、強いトレンド相場では70以上や30以下に張り付いたまま反転せず、「反転シグナル」を期待した判定が連続で外れる場面が頻繁に発生します。RSIだけでは「いま自分がレンジにいるのかトレンドにいるのか」が分からないため、外部から環境情報を入れる必要が出てきます。
なぜこの組み合わせか
ADXが「いま、どれだけトレンドに乗っているか」という環境情報を提供し、RSIが「直近の値動きはどちら側に偏っているか」というポジショニング情報を提供する、という分担構造になります。重要なのは、ADXによる環境判定がRSI解釈のスイッチになる という関係です。
例えば、RSIが75まで上昇したとします。この同じ数値に対する解釈は次のように分岐します。
- ADXが30を超える上昇トレンド下なら、過熱は順張り継続の兆候であり、押し目を観察する材料
- ADXが15程度のレンジ下では、レンジ上限での反転圧力が想定される材料
- ADXが20〜25の中間帯では、解釈が定まらず保留にする材料
つまり、RSIだけで「70超えたから売り検討」と一律に処理してしまう設計を、ADXのフィルターで多段化できる点に意義があります。一般論として、誤シグナルの一定割合をフィルタリングするレイヤーが追加される設計と捉えるのが妥当です。
注意点としては、ADXもRSIも遅行性を持つことです。組み合わせれば即座にエッジが生まれる類のものではなく、誤判定の一部を相場環境別に振り分けて減らす、という効果のレイヤーだと理解しておくと運用上の期待値ズレを避けられます。さらに、時間足が変わると両指標の挙動も大きく変わるため、組み合わせ設計と時間足設計は同時に検討するのが基本になります。
パラメータをどう考えるか
万能の数値はなく、自分の時間軸でバックテストして決める前提で、方向性だけ整理します。
ADXの期間: 標準は14です。短くするとトレンド立ち上がりの検知が早くなる代わりに20/25ラインを跨ぐ頻度が増え、長くすると安定する代わりに環境変化への追従が鈍ります。短期運用なら10〜14、スイング寄りなら14〜20が試される範囲です。
RSIの期間: 標準は14。短期化(7〜10)で反応速度が上がり、長期化(14〜21)で滑らかさが増します。
ADXの閾値: 25が一般的な境界ですが、銘柄やセッションごとにADXの分布は異なります。バックテスト時にADXがどの帯域にどれだけ滞在しているかを先に確認し、その分布に対して閾値を決めるアプローチが現実的です。中間帯(20〜25)を「保留」として明示的に扱うか、強引にどちらかへ振り分けるかも設計判断になります。
時間足構成としては、上位足のADXで大局のトレンド有無を確認し、下位足のRSIでタイミング材料を見るマルチタイムフレーム構成も検討に値します。
cBot化する際の考慮点
cTraderのcBotとして実装するときに引っかかりやすいポイントを並べます。
判定タイミングの固定: ADXもRSIも未確定バーでは値が刻々と動くため、未確定バーで閾値判定をすると同一バー内で何度も判定が反転します。ADXによる環境フラグ、RSIによる過熱判定のどちらも、確定足(OnBarイベント)で評価する設計が安定します。
初期化の取り扱い: cTrader APIでは Indicators.DirectionalMovementSystem でADX・+DI・-DIを、Indicators.RelativeStrengthIndex でRSIを取得できます。両者は独立計算なので順序依存はありませんが、起動直後のバー数不足でNaNが返るタイミングがあるため、判定式の手前でnull/NaNを除外する分岐が必須です。
環境フラグのヒステリシス: ADX=25付近の細かい振動でTREND↔RANGEが頻繁に切り替わる設計は、後段のシグナル品質を著しく落とします。実用的には「上抜けは25超で確定、下抜けは20割れで確定」のような二重閾値を組み、フラグ切替のチャタリングを抑えます。20〜25は移行期として明示的にラベルし、シグナル発火を保留する方が結果が読みやすくなります。
状態とシグナルの分離: ADX由来の環境フラグを状態変数として独立に管理し、RSIシグナルはその状態を参照して解釈モードを切り替える、という二層構造で実装しておくと、戦略の改修や検証がしやすくなります。
参考までに、骨格となるコード断片を示します。
// ADXによる環境フラグの確定
var dms = Indicators.DirectionalMovementSystem(14);
var rsi = Indicators.RelativeStrengthIndex(Bars.ClosePrices, 14);
double adxVal = dms.ADX.LastValue;
double rsiVal = rsi.Result.LastValue;
if (double.IsNaN(adxVal) || double.IsNaN(rsiVal)) return;
// 上抜け25 / 下抜け20 のヒステリシスを別途状態変数で管理する想定
string regime = ResolveRegime(adxVal, prevRegime);
// regimeに応じてRSI閾値の意味付け(順張り/反転/保留)を切り替える
検証段階では、各バーのADX値・RSI値・確定したregimeを毎バーログに残しておくと、後から相場画像と突合させて挙動を再現しやすくなります。
実装の流れ
cBotとして組み立てるときの全体像を、データから出力までの順序で並べます。
- データ準備: 監視銘柄・時間足を固定し、
Barsから終値・高値・安値を取得 - 指標計算: ADX(+DI/-DI同梱)とRSIを別系統で計算
- 環境フラグの確定: ADX値と前回フラグからregime(TREND/RANGE/TRANSITION)を解決
- RSI解釈の切替: regimeに応じてRSI閾値の意味を切替(TRENDなら順張り材料、RANGEなら反転材料、TRANSITIONなら保留)
- シグナル候補の出力: regimeと解釈結果を組にして外部に出力(ログ、ダッシュボード、後段ロジック)
ここまでをエントリー判定そのものではなく シグナル候補の前処理レイヤー として組んでおくと、後段にトレンドフォロー戦略を載せても、逆張り戦略を載せても、同じ環境判定を共有できる構造になります。
どう活用するか
本稿の節構造は、用途別に流用できる設計図のつもりで書きました。
自作派の方は、Claude Codeでの実装時にこの記事の節構造をそのままモジュール分割の指針として使ってみてください。委託派の方は、ai-programming.xyzに開発相談を持ち込む際、「ADXで環境を切ってRSI解釈を変えたい」という要件を最初に共有しておくと、設計段階の往復回数が減ります。教育目的では、本稿の環境別解釈ロジックを自分で実装してみる演習が、相場環境と指標解釈の関係を理解する良い題材になります。
ADXとRSIの組み合わせから得られる本質的な学びは、「指標値そのものではなく、それを解釈する文脈を別の指標で固定する」という設計姿勢です。この姿勢はATRやボリンジャーバンドなど他の指標と組み合わせるときの土台にもなります。
本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。