最終更新: 2026年6月
「ATRはデフォルトの14期間を使えばよい」——という常識はスキャルピングには当てはまらないケースが多い。M1・M5足で動作するスキャルピングEAにとって、14期間のATRは「14分前〜14本前までの平均値動き」を参照していることになる。相場のボラティリティが数分単位で変化するスキャルピングでは、この参照ウィンドウが長すぎることがある。
筆者がM5足スキャルピングEAでATR期間を5・7・10・14と変えてバックテストを比較した際、損切り幅の設定精度に明確な差が現れた。ただし「どの期間が最良か」は一律には決まらず、戦略の設計思想と通貨ペアの組み合わせに依存する。
本稿ではスキャルピングEA向けのATR期間選択の考え方と、実装上の注意点を解説する。
Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら
なぜスキャルピングでATR14が合わないケースがあるか
ATR(14)は過去14本の平均的な値動きを参照する。時間足ごとに「14本」が示す時間範囲を確認してみる:
| 時間足 | ATR(14)が参照する時間範囲 | |--------|----------------------| | M1 | 過去14分 | | M5 | 過去70分(約1時間10分) | | M15 | 過去210分(3.5時間) | | H1 | 過去14時間 | | H4 | 過去2.3日 | | D1 | 過去14日(約2週間) |
M5足のスキャルピングEAの場合、ATR(14)は「過去70分の平均的な値動き」を損切り幅の基準にしていることになる。スキャルピングでは1トレードの保有時間が5〜30分程度であることが多いため、70分前のボラティリティを参照するのは「相場環境の変化に遅れた損切り設定」になる可能性がある。
スキャルピング向けATR期間の選択基準
短い期間(5〜7)の特徴
メリット:
- 直近のボラティリティ変化に即時対応できる
- ロンドン開場やニューヨーク開場など、ボラティリティが急変するセッション切り替わりに対応しやすい
- 損切り幅がタイトになり、リスクリワード比を改善しやすい
デメリット:
- ATR値が不安定で、損切りラインが頻繁に変動する
- 単発の大きなローソク足(ニュース発表時など)でATRが急上昇し、次の数本で損切りが過大になることがある
中間期間(10〜12)の特徴
スキャルピングとデイトレードの中間に位置する期間設定。M5足での使用では、過去50〜60分のボラティリティを参照する。急激なノイズへの過剰反応と、長期参照による遅延の両方をある程度バランスできる。
推奨アプローチ: 期間の使い分け
input int ATRPeriodShort = 7; // 短期ATR(直近ボラティリティ)
input int ATRPeriodLong = 14; // 長期ATR(参照基準)
int ATRHandleShort, ATRHandleLong;
double ATRBufferShort[], ATRBufferLong[];
int OnInit()
{
ATRHandleShort = iATR(_Symbol, _Period, ATRPeriodShort);
ATRHandleLong = iATR(_Symbol, _Period, ATRPeriodLong);
if(ATRHandleShort == INVALID_HANDLE || ATRHandleLong == INVALID_HANDLE)
return INIT_FAILED;
ArraySetAsSeries(ATRBufferShort, true);
ArraySetAsSeries(ATRBufferLong, true);
return INIT_SUCCEEDED;
}
// ボラティリティ比率の取得
double GetVolatilityRatio()
{
if(CopyBuffer(ATRHandleShort, 0, 0, 3, ATRBufferShort) < 3) return 1.0;
if(CopyBuffer(ATRHandleLong, 0, 0, 3, ATRBufferLong) < 3) return 1.0;
double shortATR = ATRBufferShort[0];
double longATR = ATRBufferLong[0];
if(longATR <= 0.0) return 1.0;
return shortATR / longATR; // 1.0が通常、>1.5で高ボラ、<0.5で低ボラ
}
void OnDeinit(const int reason)
{
IndicatorRelease(ATRHandleShort);
IndicatorRelease(ATRHandleLong);
}
短期ATRと長期ATRの比率(VolatilityRatio)を計算することで、「現在のボラティリティが通常より高いか低いか」をリアルタイムに判定できる。
スキャルピングEAでのATR応用設計
1. 適応型損切り——ボラティリティレジームに基づく倍率切り替え
double GetAdaptiveStopDistance()
{
double atr = GetATRShort();
double ratio = GetVolatilityRatio();
double multiplier;
if(ratio > 1.5)
multiplier = 0.8; // 高ボラ時は倍率を小さく(損切り幅を節約)
else if(ratio < 0.7)
multiplier = 1.5; // 低ボラ時は倍率を大きく(ノイズを避ける)
else
multiplier = 1.0; // 通常時
return atr * multiplier;
}
2. セッションフィルターとATRの組み合わせ
スキャルピングでは取引時間帯の選択が成績に大きく影響する。ATRで時間帯のボラティリティを判定してエントリー許可を制御する:
input double MinATRForEntry = 0.0005; // 最低ボラティリティ閾値
input double MaxATRForEntry = 0.0030; // 最高ボラティリティ閾値
bool IsVolatilityInRange()
{
double atr = GetATRShort();
return (atr >= MinATRForEntry && atr <= MaxATRForEntry);
}
ボラティリティが低すぎる(スプレッドに対してATRが小さい)場合は利益を出しにくく、高すぎる場合はスリッページが増大してバックテストとのギャップが大きくなる。
3. スプレッドとATRの比率チェック
スキャルピングで見落とされがちなのがスプレッドの影響だ:
// ATRに対するスプレッドの比率を確認
double GetSpreadRatio()
{
double spread = SymbolInfoDouble(_Symbol, SYMBOL_SPREAD) * _Point;
double atr = GetATRShort();
if(atr <= 0.0) return 999.0;
return spread / atr;
}
bool IsSpreadAcceptable()
{
// スプレッドがATRの20%以上ならエントリーしない
return (GetSpreadRatio() < 0.20);
}
スプレッドがATRの20%を超える局面では、スキャルピングの優位性が著しく低下する。バックテストでは固定スプレッドを使っていても、実運用では変動スプレッドになるため、この比率チェックは実用上重要だ。
ATR期間別バックテスト比較の進め方
M5足スキャルピングEAでATR期間を変えた場合の検証設計:
| テスト | ATR期間 | 損切り倍率 | 評価指標 | |--------|--------|----------|--------| | Test1 | 5 | 1.0倍 | PF、DD、シャープ比 | | Test2 | 7 | 1.0倍 | 同上 | | Test3 | 10 | 1.0倍 | 同上 | | Test4 | 14 | 1.0倍 | 同上 |
まず損切り倍率を1.0倍に固定してATR期間だけを変え、純粋な参照ウィンドウの影響を見る。次に最良の期間を固定して倍率を最適化するという二段階設計が、過剰最適化リスクを低減しやすい。
一般的な傾向として、M5足ではATR(7〜10)が、H1足ではATR(14〜20)が損切り設定の参照として機能しやすいことが複数のEA開発者のレポートで指摘されている。ただしこれは統計的傾向であり、全ての戦略に当てはまるわけではない。
バックテストとリアル運用のATRギャップ
バックテストとリアル取引でATRベース損切りの効果が乖離する主な原因:
1. スプレッド変動: バックテストの固定スプレッドに対し、リアルでは流動性の低い時間帯にスプレッドが拡大する。
2. スリッページ: 急激な価格変動時にSL注文が意図した価格で執行されない。特にATR急上昇時(ニュース直後)に顕著。
3. データ品質: バックテストに使用するティックデータの精度(ブローカーのヒストリカルデータの品質)によって結果が変わる。
Claudeと会話しながらインジケータが作れるhedgrow-fxはこちら
よくある質問(FAQ)
Q: M1足スキャルピングEAには何期間のATRが適していますか? A: M1足では5〜7期間が一般的に試されますが、M1足のATRは個別ティックのノイズに非常に敏感です。M1足スキャルピングでは固定pips損切りとATRベース損切りを比較検証して、自分の戦略に合う方を選ぶことを推奨します。
Q: ATR期間を短くしすぎると何が起きますか? A: ATR(3)程度まで短くすると、単一の大きなローソク足(ニュース発表時など)が次の数本で損切り幅を大きく引き上げてしまい、損切り設定が不安定になります。最低でもATR(5)以上を推奨します。
Q: ゴールドや指数のスキャルピングEAでもATR期間の考え方は同じですか? A: 基本的な考え方は同じですが、ゴールドや株価指数はFXより大きなATR値を持ちます。倍率や閾値の設定値はFXとは別にキャリブレーションが必要です。
Q: リアルタイムでATR期間を自動切り替えするEAは設計できますか? A: 技術的には可能です。VolatilityRatioやセッション時間帯に基づいてATR期間を動的に変更する設計も実装できます。ただし複雑さが増すほど最適化パラメーターが増え、過剰適合リスクが高まります。シンプルな設計から始めることを推奨します。
著者情報
本記事は金融工学・アルゴリズム取引の実務経験を持つライターが執筆しています。
免責事項: 本記事はFXの教育・情報提供を目的としており、投資勧誘を行うものではありません。FX取引には元本割れリスクがあります。バックテスト結果は将来の運用成果を保証しません。実際の取引は自己責任で行ってください。
