ATR(平均トゥルー・レンジ)はどのように計算される?
計算する前に「ATR」が意味するもの
ATRはAverage True Range(平均トゥルー・レンジ)の略です。これはTrue Range(TR)という考え方から作られるボラティリティ指標で、1つの期間から次の期間へ移る際に起こり得るギャップも含めて、その期間の中で価格がどれくらい動くかを捉えようとします。
ATRは予測ではなく、方向性のシグナルでもありません。**直近の実現された変動(realized variability)**を要約します。条件が変わると、同じATR水準でも異なる環境を表すことがあります。
中核となる式(TRとATR)
ほとんどのATR計算は、次の構造に従います。
- 各期間ごとにTrue Range(TR)を計算する ある期間 t におけるTRは、次の3つの量の最大値です:
- レンジ: (High_t - Low_t)
- 前の終値に対するギャップ(上方向の動き): (|High_t - Close_{t-1}|)
- 前の終値に対するギャップ(下方向の動き): (|Low_t - Close_{t-1}|)
つまり: [ TR_t = \max\big((High_t - Low_t),\ |High_t - Close_{t-1}|,\ |Low_t - Close_{t-1}|\big) ]
- ルックバック区間でTRを平均してATRを得る ルックバック期間の長さを N 期間とします。これらの期間におけるATRは平均として計算できます: [ ATR_t = \frac{1}{N} \sum_{i=0}^{N-1} TR_{t-i} ]
一部のシステムでは、**平滑化/直近重み付け(smoothing/recency weighting)**の方法でATRを計算しますが、重要なデータ依存関係は同じです。つまり、高値・安値・前の終値に基づくTR値です。
必要な入力と前提
ATRを計算するには、一貫した時間軸のOHLCデータ(始値・高値・安値・終値)が必要です。あるいは少なくとも、連続する期間について高値・安値・終値が必要です。
必要なパラメータ:
- 時間軸/期間の定義(例:日足、1時間足)。ATRは「1つの期間」が何を意味するかに依存します。
- ルックバック期間の長さ N(例:実務では14期間がよく使われますが、計算にはいずれかのNを選ぶことだけが必要です)。
- Close_{t-1} を現在の期間の High_t と Low_t に合わせる方法。前の終値は、データセット内の直前の期間から取得する必要があります。
計算時に必ず明示すべき前提:
- OHLC価格は、同じ銘柄(同じインストゥルメント)で、同じ取引セッションのルールに基づいている。
- 比較対象のシステムと同じ丸め/精度ルールを使用している。
- 最初の期間を慎重に扱う必要がある:最初に計算可能な期間のTRには Close_{t-1} が必要なので、前の終値がないとTRを計算できません。
明確な前提つきの小さな例
ある期間 t のTRを、前の期間 t−1 を使って計算していると仮定します。
仮定:
- 前の終値 (Close_{t-1} = 1.1000)
- 現在の高値 (High_t = 1.1080)
- 現在の安値 (Low_t = 1.1020)
3つの候補を計算します:
- (High_t - Low_t = 1.1080 - 1.1020 = 0.0060)
- (|High_t - Close_{t-1}| = |1.1080 - 1.1000| = 0.0080)
- (|Low_t - Close_{t-1}| = |1.1020 - 1.1000| = 0.0020)
すると: [ TR_t = \max(0.0060, 0.0080, 0.0020) = 0.0080 ]
ルックバックが N = 3 なら、時間 t におけるATRを得るために (TR_t)、(TR_{t-1})、(TR_{t-2}) を平均します。
制限事項とよくある失敗パターン
-
ATRは大きさを測り、方向は測らない ATRは価格が上がっているのか下がっているのかを教えてくれません。同じATRでも、方向や構造が異なる2つの期間があり得ます。
-
ATRは選択した時間軸に大きく依存する 期間の長さを変える(たとえば日足の代わりに1時間足を使う)と、TRの系列が変わり、その結果ATRも変わります。この違いを調整せずに、時間軸をまたいでATRの値を比較することはできません。
-
ルックバック期間の長さが「反応性」を変える 短い N はTRの直近の変化により速く反応し、長い N はそれらをなめらかにします。比較のためにATRを使うなら、同じもの同士で比較する必要があります:同じ時間軸、同じ N、同じTR定義。
-
データ品質とセッションの整合がTRを歪めることがある TRはHigh、Low、そして前のCloseを使うため、バーの作り方に不整合がある(欠けた期間、休日によるギャップ、異なるセッションクロージング時刻など)と、人工的なギャップが生まれてTRが膨らむことがあります。
-
過去のATR水準は将来の挙動を保証しない 過去にATRが上がったり下がったりしていても、そのパターンが将来の似た変化を保証するわけではありません。ATRは構造的なルールではなく、直近の実現された変動を反映しています。
ATRを独立に検証する方法
ATRの計算を検証するには、同じOHLC入力から独立に再現できます:
- 特定の時間軸とルックバック期間の長さ N を選ぶ。
- 各期間について、3つの候補の最大値として (TR_t) を正確に計算する。
- 直近の N 個のTR値を平均する(または参照しているプラットフォームが使うのと同じ平滑化手法を適用する)。
- エッジ処理を確認する:Close_{t-1} を必要とする最初のTR値、そして十分なTR観測が必要な最初のATR値。
計算したATRが、チェックしているツールの値と異なる場合、最もよくある原因は、時間軸の不一致、N の不一致、TR定義のバリアントの違い(まれだが可能)、または平滑化/初期化の選択の違いです。
次に考えるべき1つの質問
異なるソース間でATRを比較するときは、次を尋ねてください:両方の計算が同じ時間軸、同じルックバック期間の長さ、そして(もしあれば)同じ平滑化方法を使っていますか?
DOCUMENT END