最終更新: 2026年6月
ATR(Average True Range)は、相場のボラティリティ——つまり「価格がどれくらい動きやすいか」——を定量的に示すインジケーターだ。方向性は一切持たず、純粋に値動きの大きさだけを測定する。
なぜATRがEA開発者にとって重要なのか。ひとことで言うと、「損切り幅をマーケットの実態に合わせて動的に決定できる」からだ。固定pipsの損切りでは、ボラティリティが低い局面では過剰なリスクを、高い局面では狭すぎる損切りを設定してしまうことになる。ATRを使えば、この問題を原理的に解決できる。
Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら
ATRの計算式——True Rangeから始まる3ステップ
ATRの計算は「True Range(TR)」の算出から始まる。
True Rangeの算出(3つの候補の最大値)
| 候補 | 計算式 | 意味 | |------|--------|------| | TR1 | 当日高値 − 当日安値 | 通常の値幅 | | TR2 | |当日高値 − 前日終値| | ギャップアップの場合に大きくなる | | TR3 | |当日安値 − 前日終値| | ギャップダウンの場合に大きくなる |
True Range = max(TR1, TR2, TR3)
なぜ前日終値との差分を含むのか。通常の高値−安値だけでは、ギャップ(窓開け)で発生したボラティリティを捉えられないためだ。例えば、前日終値が100円で当日の値動きが99〜99.5円の範囲に収まっていても、ギャップダウン分の1円を無視すると実態と乖離した小さな値幅しか計算されない。
ATRの計算
ATR = TRのn期間移動平均
デフォルト期間はn=14。ワイルダーが最適とした数値であり、MT4/MT5の両プラットフォームで標準設定されている。
具体的な計算例(5日間):
Day1 TR = 0.75、Day2 TR = 0.50、Day3 TR = 0.60、Day4 TR = 0.50、Day5 TR = 0.60
ATR(5) = (0.75 + 0.50 + 0.60 + 0.50 + 0.60) ÷ 5 = 0.59
実際にはRMA(Wilder's Moving Average)を使って指数的に平滑化されるが、本質的な意味は「過去N本のローソク足が平均的にどれくらい動いたか」だ。
MQL5でのiATR実装コード
MQL5でATRを取得する実装は、ADXなどと同じハンドル方式になる。
input int ATRPeriod = 14; // ATR計算期間
input double ATRMultiplier = 1.5; // 損切り倍率
int ATRHandle;
double ATRBuffer[];
int OnInit()
{
ATRHandle = iATR(_Symbol, _Period, ATRPeriod);
if(ATRHandle == INVALID_HANDLE)
{
Print("ATRハンドル取得失敗");
return INIT_FAILED;
}
ArraySetAsSeries(ATRBuffer, true);
return INIT_SUCCEEDED;
}
// ATR値の取得関数
double GetATRValue()
{
if(CopyBuffer(ATRHandle, 0, 0, 3, ATRBuffer) < 3)
return 0.0;
return NormalizeDouble(ATRBuffer[0], _Digits);
}
// ATRベースの損切り幅を計算
double GetStopLossPips()
{
double atr = GetATRValue();
return atr * ATRMultiplier / _Point; // pips換算
}
void OnDeinit(const int reason)
{
IndicatorRelease(ATRHandle); // ハンドルの解放を忘れずに
}
MQL4ではiATR(_Symbol, _Period, ATRPeriod, 0)と直接値が返ってくる設計だが、MQL5ではハンドル管理が必要になる。OnDeinit()でIndicatorRelease()を呼ぶのが重要で、これを忘れるとメモリリークの原因になる。
ATRの4つの主要活用パターン
1. 動的損切り設定(最重要用途)
損切り幅 = エントリー価格 ± (ATR × 倍率)
倍率の目安:
- スキャルピング(1〜5分足): 0.5〜1.0倍
- デイトレード(15分〜1時間足): 1.0〜1.5倍
- スイングトレード(日足以上): 1.5〜3.0倍
筆者の検証では、1.5倍程度の損切りを使うと、ランダムなノイズによる損切り(いわゆる「狩り」)の頻度が有意に減少する傾向があった。ただし、これは通貨ペアと時間足によって最適値が変わる。自分の戦略で必ずバックテストして確認してほしい。
2. ボラティリティフィルター
// ATRが閾値以上の場合のみエントリー(ボラティリティが低すぎる局面を除外)
double atrThreshold = 0.0010; // 10pips相当(USDJPYなら適切に調整)
if(GetATRValue() >= atrThreshold)
{
// エントリーロジック
}
レンジ相場では損切りを何度も刈られやすい。ATRが一定値を下回る局面ではエントリーを見送ることで、レンジ内でのダマシを大幅に削減できる。
3. ポジションサイジング
ロット数 = リスク許容額(円) ÷ (ATR × 倍率 × 通貨換算係数)
例: 資金100万円でリスク1%(1万円)、ATR=50pips、倍率1.5、換算係数=1000円/pip(USDJPY1ロット)の場合: ロット数 = 10,000 ÷ (50 × 1.5 × 1,000) = 0.13ロット
ボラティリティが高い局面では自動的にポジションサイズが縮小され、リスクが一定に保たれる。
4. トレーリングストップへの応用
// 含み益がATRの2倍を超えたらトレーリング開始
double trailStart = GetATRValue() * 2.0;
double trailStep = GetATRValue() * 1.0;
if(currentProfit > trailStart)
{
// トレーリングストップをtrailStep刻みで更新
}
固定pipsのトレーリングストップではボラティリティの変化に対応できないが、ATRベースにすることで相場環境に適応したエグジット管理が実現できる。
ATRの数値を正しく読む方法
ATRはその値単体よりも「文脈」で読むことが重要だ。
ATRが上昇している局面: ボラティリティが拡大中。ブレイクアウトや強いトレンド発生の可能性がある。損切り幅を広めに設定することを検討。
ATRが横ばいの局面: ボラティリティが安定した状態。現在のトレンドが継続しているか、レンジが続いているか。
ATRが低下している局面: ボラティリティが縮小中。大きな動きの前の「静けさ」である可能性もある。コイルが圧縮されているイメージで、次の大きな動きへの準備期間と解釈することもできる。
重要なのは、ATR単体では「次に上がるのか下がるのか」は全く分からない点だ。方向性の判断には他のインジケーターとの組み合わせが必須になる。
期間設定のガイドライン
| トレードスタイル | 推奨ATR期間 | 主な時間足 | |----------------|-----------|-----------| | スキャルピング | 7〜10 | M1〜M5 | | デイトレード | 14(標準) | M15〜H1 | | スイング | 20〜25 | H4〜D1 | | ポジション | 50 | W1〜MN |
短い期間を使うと直近の価格変動に敏感に反応し、損切り幅が頻繁に変化する。長い期間は平滑化効果が強くなり、損切り幅の変動が緩やかになる。
Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら
ATRと他インジケーターの組み合わせ
ATRだけではエントリーシグナルを生成できない。組み合わせのパターンをいくつか示す。
ATR + ADX: ADXでトレンドの強さを確認し、ATRで損切り幅を設定。最も一般的な組み合わせ。
ATR + ボリンジャーバンド: バンド幅がATRに連動して変化するため、スクイーズ(収縮)とエクスパンション(拡大)を複合的に分析できる。
ATR + SuperTrend: SuperTrendの計算にATRが内包されているため、ATRパラメータを通じてSuperTrendのバンド幅を制御できる。
よくある質問(FAQ)
Q: ATRはpipsで表示されますか?
A: MT4/MT5のATR値はポイント単位(基本通貨の最小単位)で表示されます。USDJPY(5桁表示)の場合、ATR=0.500なら50pipsに相当します。EAで計算する際は_Pointで割る換算が必要です。
Q: ATRが0になることはありますか?
A: 理論上は価格が全く動かない場合に0になりますが、FX市場では実際には発生しません。ただし、週末のデータが混入している場合や、流動性が極端に低い時間帯では異常値になることがあります。EAではif(atr <= 0) return;のようなガード処理を入れることを推奨します。
Q: ATR倍率の最適値はどうやって決めますか? A: バックテストで倍率0.5〜3.0をステップ0.1刻みで最適化し、プロフィットファクターと最大ドローダウンのバランスで決定します。ただし1つの期間だけで最適化すると過剰適合のリスクがあるため、複数期間でのアウトオブサンプルテストを行うことが重要です。
Q: ATRとボラティリティの関係を数式で教えてください。 A: ATRは実現ボラティリティの近似値です。年率換算ボラティリティ≈ATR(日足) × √252 / 現在価格という近似式があります。ただしATRは標準偏差ベースの統計的ボラティリティとは異なる概念なので、オプション取引のIVとは別物として扱ってください。
Q: ATRはMT5の標準インジケーターとして使えますか? A: はい。MT4/MT5両方で標準搭載されています。チャート上の「インジケーター」→「オシレーター」→「Average True Range」から追加できます。
著者情報
本記事は金融工学・アルゴリズム取引の実務経験を持つライターが執筆しています。
免責事項: 本記事はFXの教育・情報提供を目的としており、投資勧誘を行うものではありません。FX取引には元本割れリスクがあります。実際の取引は自己責任で行ってください。バックテスト結果は将来の運用成果を保証しません。
