OBVと移動平均の組み合わせ — 出来高の裏付けでトレンドを二重確認する
OBV(オンバランスボリューム)と移動平均は、参照するデータの種類がはっきり異なる 2 つの指標です。移動平均は価格の平均線でトレンドの「方向」を整理し、OBV は出来高を終値の上下方向で累積することで、その値動きに「参加度」の裏付けがあるかを見ます。片方が方向、もう片方がその方向を支える出来高、という役割分担になっているのが特徴です。
本記事では、この 2 つを組み合わせると何が見えてくるのか、そして cBot として実装する際の設計上の論点を整理します。あくまで「設計の参考」としての位置づけであり、特定の数値設定が成果を保証するものではありません。
OBV の役割
OBV は、終値が前の足より上がったらその足の出来高を加算し、下がったら減算する、という単純な累積ルールで作られる指標です。名前のとおり「出来高を価格の方向に沿って足し引きした残高(バランス)」を線として描くイメージで、線が右肩上がりなら買い方向に出来高が積み上がっている、右肩下がりなら売り方向に積み上がっている、と読みます。
単独利用時に見えてくるのは、値動きに出来高の裏付けがあるかどうかです。たとえば価格が上昇していても OBV が伸び悩んでいれば、「値は上がっているが出来高の後押しは弱い」というダイバージェンス(価格と指標の方向のズレ)の手がかりになります。
単独利用時の限界として、OBV は絶対値そのものに意味がなく、あくまで傾きや直近の高安との相対関係で読む指標である点が挙げられます。累積のスタート地点によって水準が変わるため、「いくつだから買われすぎ」といった読み方はできません。さらに、cTrader を含む FX/CFD 環境では実出来高が取得できず、ティックボリューム(値動きの回数)で代用するケースが多い点にも注意が必要です。ティックボリュームは実出来高の近似であって同一ではないため、株式などの出来高とは意味合いが少し異なります。
移動平均の役割
移動平均 は、一定期間の価格を平均してなめらかな線にした指標で、トレンドの方向や相場環境を整理する目的で広く使われます。価格が移動平均より上にあれば上方向のバイアス、下にあれば下方向のバイアス、という形で、現在の局面をシンプルに把握する材料になります。
単独利用時には、価格と移動平均の位置関係や、期間の異なる移動平均どうしのクロスから、方向感を読み取れます。傾きの向きや角度は、トレンドの勢いをおおまかに捉える手がかりにもなります。
単独利用時の限界としては、移動平均が過去の価格を平均する構造上、どうしても反応にラグ(遅れ)が生じる点があります。また、レンジ相場では価格が移動平均を何度も上下にまたぐため、方向を示すシグナルがダマシになりやすい傾向があります。そして何より、移動平均は価格だけを見ており、その値動きに市場参加者の出来高が伴っているかどうかまでは教えてくれません。
なぜこの組み合わせか
移動平均と OBV は、参照しているデータがそもそも別物です。移動平均は「価格」を、OBV は「出来高」を素材にしており、片方は値動きの方向、もう片方はその方向を支える参加度を担当しています。同じ現象を別の角度から測っている VWAP とボリンジャーバンドのような組み合わせと比べても、こちらは価格系と出来高系という、より独立性の高い 2 レイヤーになっているのが特徴です。
この役割分担を活かすと、「移動平均が示す方向に、OBV の出来高裏付けがついてきているか」を切り分けて整理しやすくなります。たとえば、価格が移動平均の上にあって上方向のバイアスが出ていて、同時に OBV も切り上がっているなら、「方向と参加度の向きがそろっている」状態と読めます。逆に、価格は移動平均の上にあるのに OBV が横ばいや切り下がりなら、「方向は上だが出来高の後押しが弱い」というダイバージェンス的なニュアンスになります。
このズレをフィルターとして使うと、移動平均だけでは拾いにくい「勢いの弱い上抜け」を保留する材料になります。移動平均の弱点であるレンジ相場でのダマシに対して、OBV の傾きを補助確認に回すことで、シグナルの信頼性を多角的に判定する材料が増える、という補完関係です。
ただし、OBV は移動平均に比べてノイズが乗りやすく、短い足では細かく上下します。OBV 自体を短期移動平均でならして傾きを見る、といった前処理を挟むと扱いやすくなる場合があります。また、トレンドの強さそのものは ADX のような別系統の指標で補うと、判断の輪郭がより安定しやすくなります。
パラメータをどう考えるか
移動平均のパラメータは期間と種類が中心です。反応を速めたい短期向けには期間を短く、ノイズを減らしたい長期向けには期間を長くする、という方向性が知られています。単純移動平均(SMA)か指数移動平均(EMA)かでも反応の速さが変わり、EMA のほうが直近の価格に敏感に反応する傾向があります。
OBV 側は、指標そのものにはパラメータがありません。調整するとすれば、「OBV の傾きを何本ぶんで判定するか」「OBV を平滑化する移動平均を何期間にするか」といった、読み取り側の設定になります。ここを短くすると細かいズレに反応し、長くすると大きな流れだけを見る形になります。
両者を組み合わせる際は、移動平均の期間と OBV の傾き判定期間を、同じ時間軸の感覚でそろえておくと整合が取りやすくなります。どの設定が正解という性質のものではないため、対象銘柄ごとにバックテストとフォワード検証で挙動を確認してから本運用に組み込む流れが安全です。特に出来高の質は銘柄・時間帯で大きく変わるため、薄商いの時間帯での挙動は個別に点検しておく価値があります。
cBot化する際の考慮点
cBot として組み込む場合、出来高データの扱いと計算順序が特に意識すべきポイントになります。
まず、cTrader で OBV に使う出来高は Bars.TickVolumes から取得できますが、これはティックボリュームであり実出来高ではありません。銘柄やブローカーによって値の性質が異なるため、判定ロジックを絶対値ではなく「傾き」や「直近高安との相対」で組み立てる設計が安全です。累積値そのものを条件に使うと、起動タイミングによって挙動が変わってしまいます。
次に、計算順序としては、確定足ごとに OBV を 1 本ぶん更新してから、その OBV 系列と価格系列に対して移動平均を評価する、という依存関係になります。OBV は前の値に加減算していく累積指標なので、途中の足を飛ばしたり二重に加算したりしないよう、更新を確定足(OnBar)に一本化する設計が無難です。
エッジケースとして、起動直後は OBV の履歴が十分に貯まっておらず、傾き判定に必要な本数が確保できていない場合があります。データ不足時は判定をスキップする実装が安心材料になります。また、週末ギャップや流動性の薄い時間帯では出来高が極端に偏り、OBV の傾きが実勢以上に振れることがあるため、ATR など別系統のフィルターで異常局面をガードする設計も検討に値します。
// 例: 計算順序のイメージ(OnBar 確定足で更新)
double closeNow = Bars.ClosePrices.Last(1);
double closePrev = Bars.ClosePrices.Last(2);
double vol = Bars.TickVolumes.Last(1); // ティックボリューム(実出来高ではない点に注意)
if (closeNow > closePrev) _obv += vol;
else if (closeNow < closePrev) _obv -= vol;
_obvSeries[index] = _obv;
// 方向レイヤー(価格の移動平均)と参加度レイヤー(OBVの傾き)を別々に評価
double ma = _priceMa.Result.Last(1);
bool aboveMa = closeNow > ma;
bool obvRising = _obvSeries.Last(1) > _obvSeries.Last(5);
ポジション管理側では、利食い・損切りを OBV に依存させるのは相性が良くありません。OBV はエントリーの「参加度確認」に向く一方、決済幅の設計には ATR ベースなど別系統を使い分けると、相場特性の変化に強い構成になりやすい傾向があります。
実装の流れ
戦略全体の流れを大まかに整理すると、次のような形になります。
- 環境認識: 上位足のトレンド方向や ADX で、いまがトレンド継続向きなのかレンジ寄りなのかを切り分け
- データ更新: OnBar で確定足を受け取り、OBV を 1 本ぶん加減算して系列に反映
- 並列計算: 価格の移動平均と、OBV の傾き(または OBV の平滑線)を同じバーで算出
- 整合判定: 「価格が移動平均の上か下か」と「OBV が切り上がりか切り下がりか」を組み合わせ、方向と裏付けがそろっているかを分類
- フィルター: 経済指標前後、スプレッド異常、出来高が極端に薄い時間帯、保有ポジション数などを確認
- 発注・管理: 条件がそろった場合に、リスク管理ルールに沿ってロット計算・利食い・損切り条件を監視
この骨格は 移動平均と RSI を組み合わせる記事 の流れとも共通しており、補助側の指標が変わっても流用しやすい設計です。
どう活用するか
自分で cBot を作る方は、Claude Code を活用した実装の参考にしてください。OBV と移動平均は「方向レイヤー + 出来高裏付けレイヤー」という構造がはっきりしているため、複数レイヤーの整合を取るロジックの設計練習として手を動かしやすい題材です。
実装に時間が取れない、自分の戦略の前段に組み込みたい方は、ai-programming.xyz で個別の実装相談を承っています。
体系的に学びたい方は、スクールで判定ロジックの組み立てやバックテスト・フォワード検証の進め方を、実際の開発フローに沿って学ぶことができます。
本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。