ADXの計算方法は?
直接的な回答:ADXの計算を1つのチェーンで
ADX(平均方向性指数)は、価格変動から層状に構築されます:(1) 各期間の方向性の動きと真の範囲を計算し、(2) それらのシリーズを滑らかにし、(3) 方向性指標(+DIと−DI)を計算し、(4) その関係からDXを計算し、(5) DXを滑らかにしてADXを得ます。
一般的な標準的な定義では、頻繁にn(しばしば14)と記される過去の期間の長さを使用します。ADXの値は、選択したnと実装で使用される滑らかさのルールによって異なります。
メカニズム:定義とステップバイステップのフォーミュラ
生データを前提としないで計算を説明するために、時間順に並べられたローソク足/バーのシーケンスがあると仮定します。各バーtには、その高値、安値、および終値(または少なくとも以下で定義された高値/安値/終値)が必要です。
1) 真の範囲(TR)を計算
真の範囲は、ギャップを含む動きの大きさを捉えます。バーtはt−1に対して:
- TR(t) = max( High(t) − Low(t), |High(t) − Close(t−1)|, |Low(t) − Close(t−1)| )
この定義は、現在の範囲が広い場合や価格が前回の終値を超えるギャップがある場合にTRを大きくします。
2) 方向性の動き:+DMと−DMを計算
方向性の動きは、上昇動きを下降動きから分離します:
- UpMove(t) = High(t) − High(t−1)
- DownMove(t) = Low(t−1) − Low(t)
典型的なルールは:
- +DM(t) = UpMove(t) if UpMove(t) > DownMove(t) and UpMove(t) > 0, else 0
- −DM(t) = DownMove(t) if DownMove(t) > UpMove(t) and DownMove(t) > 0, else 0
この「どちらか一方」の構造により、各ステップで優勢な方向のみが寄与します。
3) TR、+DM、および−DMを滑らかにする
ADXは、各バーの生のTRとDMから計算されません;滑らか化ステップを使用します。多くの実装では、ワイルダー式の滑らか化(一般的なアプローチ)を使用します。これは特定の再帰的移動平均に相当します。
**SmoothedTR(t)**を滑らかなTRとし、**Smoothed+DM(t)およびSmoothed−DM(t)**と同様にします。
期間nのワイルダー式の滑らか化では、再帰は通常次のようになります:
- SmoothedTR(t) = SmoothedTR(t−1) − (SmoothedTR(t−1) / n) + TR(t)
- Smoothed+DM(t) = Smoothed+DM(t−1) − (Smoothed+DM(t−1) / n) + +DM(t)
- Smoothed−DM(t) = Smoothed−DM(t−1) − (Smoothed−DM(t−1) / n) + −DM(t)
初期化は重要です:実装は通常、初期の和または平均をn期間にわたって確立するのに十分なバーが描画された後に滑らかなシリーズを開始します。
4) +DIと−DIを計算
方向性指標は、滑らかな方向性の動きを滑らかなTRに対する値に変換します:
- +DI(t) = 100 × Smoothed+DM(t) / SmoothedTR(t)
- −DI(t) = 100 × Smoothed−DM(t) / SmoothedTR(t)
5) DX(方向性指数)を計算
DXは、一方の方向が他方をどれだけ強く支配しているかを説明します:
- DX(t) = 100 × |+DI(t) − −DI(t)| / (+DI(t) + −DI(t))
**+DI(t) + −DI(t)**がゼロ(フラットまたは方向性のない動きと特定のデータ/開始条件で可能)の場合、実装はゼロ除算を処理する必要があります。
6) DXを滑らかにしてADXを得る
最後に、ADXはDXの滑らかな移動平均(再び、一般的にワイルダー式)です:
- ADX(t) = smoothed average of DX(t) over the chosen length n
実際には、最初のADX値はウォームアップ領域(しばしば十分なDXポイントを蓄積した後)が生成されます。異なるプラットフォームは、わずかに異なる初期化の慣習を選択することがあり、小さな不一致を引き起こします。
証拠:小さな計算例(明示的な仮定付き)
リアルタイムデータがないため、完全な数値例は任意になります。代わりに、自分のOHLCバーに適用できるコンパクトな計算テンプレートを示します。
連続するバーを選択し、期間nを選択するとします。2番目のバーから始まる各バーについて:
- High(t)、Low(t)、およびClose(t−1)から**TR(t)**を計算します。
- 高値と安値の差から**+DM(t)と−DM(t)**を計算します。
- 選択した滑らか化ルールと正しい初期化を使用して、SmoothedTR(t)、Smoothed+DM(t)、**Smoothed−DM(t)**を構築します。
- **+DI(t)と−DI(t)**を計算します。
- **DX(t)**を計算します。
- **DX(t)を滑らかにしてADX(t)**を形成します。
独立して確認する際に明示する必要がある重要な前提:データソース(正確なOHLC値)、選択したn、および滑らか化ルールは、確認している実装と一致する必要があります。フォーミュラが「標準」であっても、ウォームアップと滑らか化の詳細が異なることがあります。
2つのシステムが同じADXを計算していることを確認したい場合は、同じOHLCシリーズをエクスポートし、同じnを適用し、同じTR/DM定義を使用し、中間シリーズ(+DM/−DM、+DI/−DI、DX)を確認してから、最終的なADXを比較してください。
限界と失敗モードを考慮する
ADXは「トレンドの強さ」の尺度としてよく説明されますが、その解釈には限界があります。主な問題は、データの感度と方向性の動きの挙動から生じます。
1) ADXは滑らか化と初期化に依存
ADXは滑らかなTR/DMと滑らかなDXを使用するため、結果は以下の場合に異なることがあります:
- nを変更した場合、
- 滑らか化方法(または初期化の慣習)を変更した場合、または
- プラットフォームがエッジケースを異なる方法で処理する場合(例:初期バー、ゼロ除算)。
これは、プロバイダー間で数値を比較する際の主要な失敗モードです。
2) 高い値は方向性の優位性を保証しない
ADXは方向性の優位性の大きさから計算され、保証された方向から計算されるわけではありません。一方の方向が一貫して優勢であっても、広範な環境が後で変化する場合、ADXは相対的に高くなることがあります。
これは重要です。方向性の動きの後で方向性が変化すると、過去のADXの挙動が情報提供性が低くなることがあります。
3) 乱高下またはレンジ相場は誤った強さの読み取りを生成する可能性がある
方向性の動きの定義は、小さく不規則な動きで繰り返し優勢を生成することがあります。ある「横ばいだがボラティリティの高い」状況では、ADXが上昇することがありますが、持続的で安定したトレンド構造はありません。
これは、ADXを単独の決定ルールとして扱うのではなく、動きの特性を示す指標として扱うのが最適であることを意味します。
確認:ADXの計算を独立して確認する方法
上記のフォーミュラチェーンを使用してADXを自分で確認するには:
- 特定のnを選択し、記録します。
- 一貫したOHLCデータセットを使用し、High、Low、Closeが時間で整列していることを確認します。
- 同じ条件ロジックでTR、+DM、および−DMを正確に計算します。
- 参照で使用されている同じ滑らか化ルールと初期化を適用します。
- +DI、−DI、DXを計算し、DXをADXに滑らかにします。
- まず中間出力を比較します。それらが一致すれば、最終的なADXは非常に一致している可能性が高いです。