AroonとADXを組み合わせる考え方 — トレンドの鮮度と強度を分担して測る

Aroon(アルーン)とADX(平均方向性指数)は、どちらも「トレンド系指標」として一括りにされがちですが、答えている質問は別物です。Aroonは「新しい高値・安値をどれだけ最近つけたか」という 鮮度と方向 を、ADXは「値動きがどれだけ一方向に偏っているか」という 強度 を測ります。方向と鮮度をAroonで、強度をADXで確認する構成にすると、トレンドの入口の検知と持続の確認を2つの指標に分担させる設計になります。本稿では、この組み合わせの理屈と、cBotとして実装する際の設計ポイントを整理します。単独指標のダマシに悩んでいる自作派の方、開発委託を検討している方に向けた内容です。

Aroonが入口で先に反応し、ADXが持続を後から確認する時間差を示す2パネルの模式図

Aroonの役割

Aroonは、直近n期間のうち「最高値をつけてから何本経過したか」をAroon Up、「最安値をつけてから何本経過したか」をAroon Downとして、それぞれ0〜100に換算した指標です。高値更新の直後はAroon Upが100に張り付き、更新が途絶えるほど値が段階的に下がっていきます。一般に70以上を「その方向の動きが新しい」、30以下を「その方向の動きが古い」と読む使い方が知られています。基礎の整理は別記事のAroon(アルーン)インジケーターとはを参照してください。

単独使用時の限界は、鮮度しか測っていない 点にあります。ほんのわずかな高値更新でもAroon Upは100になるため、レンジ内の小さな上抜けと本格的なトレンド発生を数値の上で区別できません。特にレンジ相場ではUp/Downのクロスが頻発し、クロスをそのままシグナル扱いする設計はダマシを量産しがちです。「動きが新しいか」は分かっても、「その動きに力があるか」は別の情報源が必要になります。

ADXの役割

ADX(Average Directional Index)は、+DIと-DIという2系列の方向性データから「値動きがどれだけ一方向に偏っているか」を0〜100で示す指標です。方向の情報は持たず、強度だけを測ります。一般に20〜25を境にトレンドの有無を判定する使い方が知られています。詳細はADX(平均方向性指数)とはにまとめています。

単独使用時の限界は遅行性です。ADXは値動きの偏りが積み上がって初めて上昇するため、トレンドの初動では立ち上がりが遅く、終息の検知も遅れます。また方向を示さないため、ADXが高いと分かっても、単独ではどちら向きの判断材料にもなりません。「確認は得意だが発見は苦手」な指標と言えます。

なぜこの組み合わせか

この組み合わせの核心は、Aroonが「発見」を、ADXが「確認」を担当する という時間差のある分担関係です。

Aroonは高値・安値の更新というイベントに即応して跳ね上がるため、トレンドの入口では反応が早い一方、その動きが本物かどうかは語れません。ADXは反応が遅い代わりに、偏りの蓄積を反映するため「動きが続いている」ことの確認材料として機能します。片方の弱点をもう片方の得意分野が補完する関係になります。

実際の判定は、次の三点確認として組み立てられます。

三つが揃った局面だけをシグナル候補とすることで、レンジ内の小さな更新(方向と鮮度だけ成立)や、勢いは残っているが動きが古いトレンド末期(強度だけ成立)を、機械的に仕分けられます。一般論として、これは新しい優位性を生む仕掛けではなく、誤った文脈でのシグナル発火を減らすノイズフィルターのレイヤーだと捉えるのが妥当です。

トレードオフも明確で、条件を重ねるほどシグナルの発火回数は減ります。また両指標とも過去データから計算される以上、環境が切り替わった直後の判定は実態からずれる点も織り込んでおく必要があります。

パラメータをどう考えるか

正解の数値はなく、時間足と銘柄ごとにバックテストで確かめる前提で、出発点だけ整理します。

Aroonの期間: 原型は25で、14を使う流派もあります。短くすると鮮度判定が敏感になりクロスが頻発し、長くすると大きな波だけを拾うようになります。

ADXの期間と閾値: 期間は標準の14が出発点です。閾値25は広く知られた境界ですが、銘柄や時間足によってADXの滞在分布は大きく異なるため、検証時にまずADX値の分布を確認し、その分布に合わせて閾値を置くのが現実的です。

設計上面白いのは両者の期間バランスです。Aroonを短め・ADXを長めにすると「入口は敏感に、確認は厳格に」という非対称な構成になります。どちらに寄せるかは戦略の性格(早乗り重視か、確度重視か)を決める設計判断であり、バックテストで挙動を確かめながら決めることをおすすめします。

cBot化する際の考慮点

cTraderのcBotとして実装するときに引っかかりやすいポイントを並べます。

確定足での評価: AroonもADXも未確定バーでは値が動くため、閾値判定はOnBarイベントで確定足に対して行うのが安定します。

Aroonの階段状の変化: AroonはRSIのような連続値ではなく、バー数のカウントに由来する離散的なステップで動きます。同じ値が何本も続いたあと一気に跳ぶため、「70以上になった瞬間」というイベントと「70以上である」という状態を区別して実装しないと、意図しない多重発火や発火漏れが起きます。

三条件の評価順序: 方向 → 鮮度 → 強度の順にゲートとして直列に評価し、どの段で不成立になったかを毎バーログに残す構成にすると、検証段階で「どの条件が機会を削っているか」を後から分析できます。

ADX境界の振動対策: ADXが25付近で行き来するとフラグが毎バー切り替わります。上抜けと下抜けで別の閾値を持たせる(例: 上抜けは25、下抜けは20)ことで、切り替えの振動を抑えられます。

骨格となるコード断片を示します。

private Aroon _aroon;
private DirectionalMovementSystem _dms;

protected override void OnStart()
{
    _aroon = Indicators.Aroon(25);
    _dms = Indicators.DirectionalMovementSystem(14);
}

protected override void OnBar()
{
    double up = _aroon.Up.Last(1);      // 確定足で評価
    double down = _aroon.Down.Last(1);
    double adx = _dms.ADX.Last(1);
    if (double.IsNaN(up) || double.IsNaN(down) || double.IsNaN(adx)) return;

    bool dirAndFresh = up > 70 && down < 30;  // 方向と鮮度
    bool strong = adx > 25;                   // 強度(実運用では二重閾値を推奨)
    // 全て成立したバーだけをシグナル候補としてログ・後段へ渡す
}

起動直後はバー数不足でNaNが返る期間があるため、判定前の除外分岐は必須です。

実装の流れ

全体の処理は次の5段階に分解できます。

  1. データ取得: OnBarで確定足の高値・安値・終値を取得
  2. 指標計算: Aroon(Up/Down)とADXを独立に計算し、NaNを除外
  3. 方向・鮮度の判定: Aroon Up/Downの位置関係と水準を評価
  4. 強度の判定: ADXの水準と向きを二重閾値つきで評価
  5. シグナル候補の出力: 三条件の成立状況を組にしてログや後段ロジックへ渡す

エントリー執行そのものではなく、環境情報つきのシグナル候補を作る前処理レイヤー として組んでおくと、後段の執行戦略や資金管理を差し替えても、この判定部分をそのまま再利用できます。

方向・鮮度・強度の三段ゲートでシグナル候補を仕分ける処理フロー図

どう活用するか

自作派の方は、本稿の三段ゲート構成をそのままクラス分割の指針として、Claude Codeと対話しながら実装してみてください。委託派の方は、ai-programming.xyzへ開発相談を持ち込む際に「Aroonで入口を検知し、ADXで強度を確認したい」という一文を最初に共有すると、要件整理の往復が減ります。体系的に学びたい方には、「反応の速い指標と遅い指標を役割分担させる」という本稿の題材は、指標の値ではなく文脈を扱う練習として好適です。実装の参考になれば幸いです。

本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。