ATR倍率で利確・損切り幅を設計する — 振れ幅とスイング構造から決済ルールを組み立てる

「どこで損切るか」「どこで決済するか」を毎回チャートの見た目で決めていると、判断の再現性が失われます。本記事では、値動きの平均的な振れ幅を示すATR、直近の高値・安値がつくるスイング構造、そしてリスクリワード比という3つの材料を組み合わせて、決済幅を機械的に組み立てる設計を整理します。想定読者は、エントリー条件は決めたものの決済ルールが後回しになっている方、cBotに載せる際の数式を具体化したい方です。特定の倍率が成果を保証するという話ではなく、幅の決め方を言語化することが目的です。

ATRの倍数で置く候補と直近スイング安値で置く候補を比べ、広い方を採用してリスクリワード比で目標値へ変換する模式図

ATRの役割

ATR(Average True Range)は、一定期間の値動きの振れ幅(True Range)を平均した指標で、「この銘柄・この時間足では1本あたりどの程度動くのが普通か」を数値化します。指標そのものの読み方はATRの基礎で解説しています。

決済幅の設計においてATRが担うのは、「通常の揺れ」と「想定外の動き」を区切る物差しという仕事です。ストップをATRの何倍かの位置に置けば、日々の揺れの範囲では触れられにくく、値動きが荒くなった局面では距離が自動的に広がります。固定の値幅にありがちな、静かな相場では遠すぎ荒れた相場では近すぎるという不整合を避けやすくなります。

ただしATR単独には明確な限界があります。ATRは価格の「構造」を一切見ていません。ATRの2倍という距離が、たまたま直近の安値のすぐ手前で止まっていても、ATRはそれを教えてくれないのです。多くの参加者が意識する節目の内側にストップが残れば、その水準を取りに来る動きに巻き込まれやすくなると考えられます。

スイング構造の役割

スイング構造とは、直近の高値・安値がつくる波の形のことです。押し安値や戻り高値は多くの参加者が損切りの目安として見ている水準であり、サポートとレジスタンスの基礎で扱う考え方とも重なります。

決済幅の設計においてスイング構造が担うのは、「そこを抜けたら想定が崩れる」という論理的な境界を示すことです。買いで入った根拠が「直近安値を割らずに切り上がっている」ことであれば、その安値を割った時点で前提そのものが失われます。単なる値幅ではなくシナリオに紐づいている点が強みです。

一方、スイング構造単独の限界は、幅が場面ごとに大きくばらつくことです。直前の安値がすぐ近くにある場面ではストップが極端に近くなり、通常の揺れで触れられてしまいます。逆に大きく下げた直後は安値が遠すぎて、1回あたりのリスクが膨らみます。

リスクリワード比の役割

リスクリワード比(R:R)は、1回のトレードで許容する損失幅に対して、狙う値幅が何倍にあたるかを表す比率です。詳しくはリスクリワード比の基礎にまとめています。

R:Rが担うのは、リスク幅が決まった後に決済目標を導く変換係数という役目です。ATRとスイング構造で損切りまでの距離が確定すれば、その何倍の位置に目標を置くかを決めるだけで目標値が一意に定まります。固定の値幅ではなく比率で持っておくと、銘柄や時間足が変わっても同じルールを使い回せます。

R:R単独の限界も明確で、比率そのものは相場を見ていません。到達しにくい遠方に目標を置けば数字上の比率は大きくなりますが、実際に届く距離なのかは別途確かめる必要があります。

なぜこの組み合わせか

この3つは、**「幅の物差し」「幅の根拠」「幅の変換」**という別々の仕事を分担しています。どれか1つが欠けると、決済ルールのどこかに穴が残ります。

そこで、ストップの位置を2つの候補から求める形が素直な構成になります。ひとつはATRの倍数で置く候補、もうひとつは直近スイングの外側にATR分のバッファを足して置く候補です。この2つを比べて余裕のある方を採用すれば、シナリオ上の境界を、ボラティリティに応じた緩衝帯で包んだ位置に落ち着きます。あとはそのリスク幅にR:Rを掛けて目標値を出せば、決済ルール全体が一本の式として書き下せます。

この構成の利点は、判断の属人性が減り、後から検証できる形になることです。どの候補が採用され、そのときのATRがどの水準だったかを記録しておけば、うまくいかなかった場面の原因を「幅が狭すぎたのか、根拠そのものが違ったのか」に切り分けられます。

注意したいのは、幅を広げれば触れられにくくなる代わりに、同じ金額リスクを保つならロットを減らす必要があるという点です。幅とロットは必ずセットで扱います。切り離すと、幅だけ広げて実質的なリスクが膨らむ本末転倒が起きます。この関係はロットサイズの基礎も参考になります。

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

この設計で決める値は多くありません。それぞれに「正解」があるわけではなく、時間軸と狙う値動きの性質に合わせて調整する領域です。

どの値を採用するかは、必ずバックテストで確認してから決めます。手順はバックテストの基礎にまとめていますが、この設計では「同じ期間・同じエントリー条件のまま、決済パラメータだけを振って比較する」進め方が有効です。エントリーと決済を同時に動かすと、どちらが効いたのか分からなくなります。

cBot化する際の考慮点

決済幅の計算はエントリー判定より地味ですが、実装で足をすくわれやすいのはむしろこちら側です。

判定部分の骨組みを疑似コードで示します。

// OnBar内: ATRとスイング安値から、買いポジションのストップ候補を求める
double atr = Indicators.AverageTrueRange(atrPeriod, MovingAverageType.Exponential).Result.Last(1);
double entry = Symbol.Ask;
double swingLow = Bars.LowPrices.Minimum(swingLookback);   // 直近の安値

double stopByAtr   = entry - atr * atrMultiplier;
double stopBySwing = swingLow - atr * bufferMultiplier;    // 節目の少し外側へ逃がす
double stop = Math.Min(stopByAtr, stopBySwing);            // 余裕のある方を採用

double risk = entry - stop;
if (risk < Symbol.MinStopDistance * Symbol.PipSize) return;  // 幅が狭すぎる場合は見送り

double target = entry + risk * rewardRatio;                // リスク幅を比率で変換

実運用ではここに、建値へストップを引き上げる条件や、トレーリングストップの基礎で扱う追随ロジックを重ねて、細部を詰めていくことになります。

実装の流れ

処理の流れを上流から並べると、次のようになります。

  1. 足の確定: OnBarで確定バーの値のみを使い、判定のブレを防ぎます
  2. 材料の取得: ATRの確定値と、探索範囲内のスイング高値・安値を取り出します
  3. ストップ候補の比較: ATR基準とスイング基準の2候補を求め、余裕のある方を採用します
  4. リスク幅の検査: 最小ストップ距離を下回る、または想定上限を超える場合は見送りに振り分けます
  5. 目標値とロットの算出・記録: リスク幅にR:Rを掛けて目標値を出し、許容リスク額からロットを逆算します。採用候補とATR水準も記録します

足の確定から材料取得、ストップ候補の比較、リスク幅の検査、目標値とロットの算出までの処理フロー図

どう活用するか

「リスク幅を先に確定し、そこから目標値とロットを導く」という骨格は、エントリー条件が何であっても崩れない土台です。自分で組んでみたい方は、Claude Codeを併走させたcBot開発の設計メモとして本記事の構成を使ってみてください。ATR基準のストップが実際どう動くかを目で確かめたい方にはATR Trailing Stop Visualizerの紹介記事も参考になります。作るより相談したいという方は、ai-programming.xyzで個別の開発相談を承っています。体系的に学びたい方に向けては、スクールでこうしたリスク設計を実装しながら学べます。

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