OBVとATRの組み合わせ — 値幅の収縮中に出来高の偏りを読む設計
ATR(平均真の値幅)は、1本の足がどれだけ動いたかを平均し、相場の「揺れの大きさ」を数値にするインジケーターです。OBV(オンバランスボリューム)は、終値が上がった足の出来高を足し、下がった足の出来高を引いて累積し、出来高がどちら向きに積み上がっているかを線で描く指標です。
この2つは、片方が値幅、もう片方が出来高の向きという、重なりの少ない情報を扱います。本記事では「値幅が縮んで静かな局面で、出来高の偏りだけが先に一方向へ進んでいないか」を観察し、その後の値幅拡大がその偏りと同じ向きかどうかを確かめる、という二段構えの設計を整理します。ブレイクアウト系のcBotを作っていてダマシの多さに悩んでいる方や、ボラティリティ指標に別系統の判断材料を足したい方を想定しています。特定の設定が成果を保証するものではなく、設計の考え方の整理として読んでください。
ATRの役割
まず、値幅の側を担うATRがどんな情報を返すのかを確認します。
ATRは、高値と安値の差に前の足の終値からの窓(ギャップ)も含めた「真の値幅」を求め、それを一定期間で平均した値です。詳しい計算はATRとはで解説しています。この組み合わせでATRに期待するのは、相場の状態を「静か」と「動き出し」に分けることです。
- ATRが過去の水準と比べて低い: 値幅が縮み、エネルギーを溜めている可能性がある局面
- ATRが低い水準から立ち上がる: 値幅が拡大し始めた局面
- ATRの絶対値: 損切幅や利確幅を相場の揺れに合わせるための物差し
ただしATRには方向の情報がありません。値幅が広がったことは分かっても、それが上への拡大なのか下への拡大なのかは、ATRだけでは判別できません。また、収縮した値幅がいつ拡大に転じるかも教えてくれません。収縮局面が想定より長く続き、その間に何度も「そろそろ動くはず」という判断を重ねてしまうのは、ATR単独で使う際の典型的なつまずきです。
OBVの役割
次に、出来高の向きを担うOBVの性格を整理します。
OBVは累積値なので、数値そのものではなく傾きや直近の高値・安値との位置関係で読みます。この組み合わせでOBVに求めるのは、値動きが小さい間に、出来高だけが一方向へ積み上がっていないかという観察です。価格が狭い範囲で横ばいでも、上げた足の出来高が下げた足の出来高を継続して上回っていれば、OBVは右肩上がりになります。
OBV単独の弱点は2つあります。1つ目はノイズです。足ごとに出来高を丸ごと加減算するため、わずかな値動きの足でも大きく線が動くことがあります。2つ目はデータの性質です。cTraderのFX・CFD環境で取得できるのは多くの場合ティックボリューム(価格更新の回数)で、取引所の実出来高とは意味が異なります。ティックボリュームは市場が活発な時間帯ほど増えるため、OBVの傾きが時間帯の影響を受けやすい点も意識しておく必要があります。出来高を価格の平均線と組み合わせる使い方はOBVと移動平均の組み合わせで扱っています。
なぜこの組み合わせか
2つの弱点がどう噛み合うのかを、局面ごとに整理します。
ATRは「いつ静かで、いつ動き出したか」を持っていますが、「どちら向きか」を持っていません。OBVは「出来高の偏りの向き」を持っていますが、それが値動きとして表に出るかどうかは示しません。そこで、ATRで局面を区切り、その局面の中でOBVの向きを読む、という役割分担にします。
観察の組み立て例は次のとおりです。
- 収縮局面 + OBVが一方向に傾く: 値動きに先行して出来高が偏っている候補。この段階ではエントリーせず、向きを記録する材料にとどめる
- 収縮局面 + OBVも横ばい: 方向の手がかりが乏しい状態。待機を続ける材料
- 拡大局面 + 価格の抜けた向きとOBVの向きが一致: 値幅の拡大が出来高の偏りに沿っている候補として、採用を検討する材料
- 拡大局面 + 価格の抜けた向きとOBVの向きが逆: 出来高の裏付けが乏しい抜けとして、見送りや様子見を検討する材料
この設計の要点は、OBVを「拡大した瞬間の確認」だけでなく、「拡大の前に記録しておいた向き」との照合に使う点です。拡大した足のOBVだけを見ると、その足自体の出来高に引っ張られて向きが一致しやすく、確認として機能しにくくなります。収縮中の傾きを先に保存しておくことで、ブレイクの向きを別の時間帯のデータで検証する形になり、ダマシを見分ける材料が増えると考えられます。ダマシの一般的な考え方はブレイクアウトとダマシの基礎も参考にしてください。
限界もはっきり書いておきます。ティックボリュームは実出来高の近似にすぎず、収縮中のOBVの傾きが見かけ上のものである可能性は残ります。また、経済指標の発表などで値幅が一気に拡大する場面では、収縮中の出来高の偏りとは無関係に価格が動くことがあります。この組み合わせはブレイクの向きを判定する材料の1つであり、それ単体で判断を完結させるものではありません。
パラメータをどう考えるか
パラメータに唯一の正解はないため、方向性のみを整理します。
ATRは期間14が広く使われています。この組み合わせでは、ATRそのものの期間に加えて「低い水準」の定義が重要です。直近の一定本数におけるATRの最小値付近とみなす方法、ATRの短期平均と長期平均の比で判定する方法、パーセンタイル順位(過去の分布の中で何番目の位置か)で判定する方法などがあります。比較対象の本数を短くすると収縮の判定が頻繁に出て、長くすると判定は減りますが本当に静かな局面だけを拾いやすくなります。
OBVにはパラメータがありませんが、傾きの測り方に設計の余地があります。収縮局面の開始時点と現在のOBVの差を取る、OBVに短期の移動平均をかけて向きを見る、OBVの変化量をATRと同じ本数で合計する、といった方法が考えられます。
時間足については、短い足ほどティックボリュームの時間帯の偏りが強く出る傾向があります。H1以上の足でATRの収縮を判定し、OBVも同じ足で読むと、ノイズを抑えやすくなります。どの設定でも、自分の運用銘柄と時間足でバックテストを行い、収縮判定の頻度や向きが一致したケースと一致しなかったケースの分布を確認してから採用してください。
cBot化する際の考慮点
ここからは、cTraderのcBotに組み込む際の設計上の論点を整理します。
確定足で判定する: ATRもOBVも、未確定の足では値が動きます。判定はOnBarで行い、確定済みの1本前(Last(1))を基準にします。
状態を持たせる: この設計は「収縮中」「拡大を待機中」「拡大を検知」という状態の遷移で成り立っています。収縮に入った時点のOBVを保存し、拡大を検知した時点の値と比較するため、単発の条件判定ではなく状態変数を持たせる設計が必要です。収縮が長く続いた場合に保存値を更新し直すかどうかも、仕様として決めておきます。
ティックボリュームの扱い: 週明けや流動性の低い時間帯はティックボリュームが極端に少なくなります。その時間帯の足がOBVの傾きに与える影響を確認し、必要なら判定対象の時間帯を絞ります。
足が足りないとき: 起動直後はATRや比較用の履歴が揃いません。必要本数に満たない間は判定をスキップする分岐を入れます。
ポジション管理との連携: ATRは損切幅の物差しとしても使えます。拡大を検知した足のATRではなく、収縮中のATRを基準にするのか、拡大後のATRに合わせるのかで損切幅が大きく変わるため、ロット計算と合わせて設計します。
// 例: 確定足ベースで収縮を判定し、収縮開始時のOBVを保存する
var atr = Indicators.AverageTrueRange(14, MovingAverageType.Simple);
var obv = Indicators.OnBalanceVolume(Bars.ClosePrices);
double atrNow = atr.Result.Last(1);
double atrMin = atr.Result.Minimum(lookback); // 直近の最小値
bool squeezed = atrNow <= atrMin * squeezeFactor; // 収縮の判定
if (squeezed && !inSqueeze) { inSqueeze = true; obvAtSqueeze = obv.Result.Last(1); }
double obvDrift = obv.Result.Last(1) - obvAtSqueeze; // 収縮中の出来高の偏り
// 拡大検知時に、価格の抜けた向きと obvDrift の符号を照合して判断材料とする
実装の流れ
全体の処理を、入力から出力までの流れで整理します。
- 入力: 対象銘柄の確定足を
OnBarで受け取る - 計算: ATR、ATRの比較基準(最小値や長期平均)、OBVを取得する
- 状態更新: 収縮の開始・継続・終了を判定し、収縮開始時のOBVを保存する
- 照合: 拡大を検知したら、価格の抜けた向きと収縮中のOBVの傾きを比較する
- 出力: 向きが一致した場合はATRを基準に損切幅とロットを算出し、発注またはログへ渡す。一致しない場合は見送りとしてログに残す
見送ったケースもログに残しておくと、後から「一致しなかった抜けがどう推移したか」を検証できます。値幅・出来高・リスクの各層が分かれていれば、たとえば収縮判定をボリンジャーバンドの幅に差し替えるといった変更も局所的に行えます。
どう活用するか
最後に、立場別の使い方をまとめます。
自作派の方は、「収縮中に向きを記録し、拡大時に照合する」という状態遷移を設計書として、Claude Code を使ったcBot開発の下敷きにしてみてください。状態の切り替わりを足ごとにログ出力しながら検証すると、意図しない遷移に気づきやすくなります。委託派の方は、ai-programming.xyzへの相談時に「ATRの収縮中にOBVの傾きを保存し、拡大時の向きと照合したい」と伝えていただくと、要件のすり合わせが進めやすくなります。教育派の方は、スクールでの状態管理とデータ特性(ティックボリューム)を学ぶ題材として活用できます。
本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。