OBVとMACDを組み合わせる考え方 — 出来高の流れと価格モメンタムの整合を確認する設計

価格の勢いが強まっているように見えても、その動きに出来高が伴っているかどうかは、価格系の指標だけでは分かりません。本記事では、出来高の累積を追う OBV(オン・バランス・ボリューム)と、価格の勢いの変化を捉える MACD(マックディー)を並べ、「価格の勢い」と「出来高の流れ」が同じ向きを指しているかを確認する構成を整理します。特徴は、OBV をそのまま眺めるのではなく、OBV の系列に MACD と同じ計算を当てて、二つの勢いを同じ物差しで比べる点です。cTrader の cBot 開発を想定した設計メモであり、特定の構成が成果につながることを示すものではありません。

価格のMACDヒストグラムとOBVに当てたMACDヒストグラムを上下に並べ、向きが揃う区間と食い違う区間を示した模式図

OBV の役割

OBV は、終値が前の足より高ければその足の出来高を加算し、低ければ減算していく累積型の指標です。出来高を「上げた足のもの」と「下げた足のもの」に振り分けて積み上げることで、売買の流れがどちらに偏っているかを一本の線で表します。

単独で使う場合は、OBV の線が価格と同じ方向に進んでいるか、価格だけが先行して OBV が付いてきていないか、といった見比べが中心になります。線の傾きで読む方法はOBVと移動平均線の組み合わせで扱いました。

限界は大きく二つあります。一つ目は、OBV の絶対値に意味がないことです。累積の起点はチャートに読み込まれた最初の足なので、読み込む本数が変われば値そのものが変わります。固定のしきい値を置く使い方には向きません。二つ目は、FX や CFD では取引所の出来高ではなくティックボリューム(価格更新の回数)を使う点です。これは実際の売買数量ではなく、配信元によって数え方も異なります。

MACD の役割

MACD は、短期と長期の指数移動平均(EMA)の差を取り、その差にさらに平均をかけたシグナル線と比べる指標です。差とシグナル線の開きを棒で表したものがヒストグラムで、勢いが増しているのか、鈍っているのかを読む材料になります。基礎はMACDとはで解説しています。

単独運用での限界は、材料が価格だけであることです。値動きが薄い時間帯の小さな動きでも、ヒストグラムの符号は入れ替わります。その動きに参加者が伴っていたのかどうかを、MACD 自身は区別できません。また、平均を重ねる構造上、反応は実際の値動きより遅れて現れます。

なぜこの組み合わせか

二つの指標は、入力にしている情報が異なります。MACD は価格だけ、OBV は価格の方向と出来高の両方です。情報源が違うため、同じ情報を二度数える形になりにくく、互いの確認役として置きやすい関係にあります。

ここで問題になるのが、OBV の読みにくさです。そこで本記事の構成では、OBV の系列そのものに MACD の計算を当てます。これには二つの利点があります。

第一に、起点のずれが打ち消されます。MACD は二本の EMA の差なので、OBV 全体に一定の値が上乗せされていても、差を取った時点で消えます。読み込み本数によって OBV の水準が変わる問題を、計算の構造で避けられます。

第二に、比較の形が揃います。価格の MACD ヒストグラムと OBV の MACD ヒストグラムは、どちらも「ゼロより上か下か」「伸びているか縮んでいるか」で読めます。二つの符号が揃っている区間は、価格の勢いと出来高の流れが同じ向きにあると整理でき、食い違う区間は、価格の動きに出来高側の裏付けが見えていない状態として扱えます。

一般論として、この食い違いをシグナルの見送り条件に使うと、ノイズフィルターとして機能することが期待されます。ただし、符号が揃っていることは、その後の値動きを約束するものではありません。あくまでシグナルの信頼性を判定する材料の一つです。

なお、OBV と価格のずれをオシレーター側で見る考え方はOBVとRSIの組み合わせでも整理しています。

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

ここに正解の数値はありません。検証を始める際の方向性だけを整理します。

価格側の MACD は、12・26・9 の標準設定が出発点になります。OBV 側に当てる MACD も、まずは同じ設定に揃えると、二つのヒストグラムの反応速度が近くなり、比較の意味が明確になります。OBV は出来高の大きな足で段差のように動くことがあるため、ちらつきが気になる場合は OBV 側だけ期間を長めにする選択肢もあります。

時間足については、短い足ほどティックボリュームの偏りが強く出ます。東京・欧州・ニューヨークの時間帯で更新回数そのものが大きく変わるため、短期足では時間帯の影響と流れの変化を見分けにくくなります。短期向けには期間を長めに、長期向けには標準に近い設定から、という程度の方向性に留め、最終的にはバックテストで確認してください。期間を細かく合わせ込むほど、過去データだけに適合した設定になりやすい点にも注意が必要です。

cBot化する際の考慮点

設計上の注意点を四つ挙げます。

確定足で判定します。形成中の足ではティックボリュームが増え続けるため、OBV も足の途中で変化します。OnBar で一本前の確定値を読む構成が出発点です。

計算の依存関係を意識します。OBV の MACD は、OBV の出力を入力に取ります。cTrader の組み込み指標はデータ系列を入力として受け取れるので、OBV の結果をそのまま MACD に渡す形で書けます。

大きさではなく符号で比べます。OBV 側のヒストグラムは出来高の規模に比例するため、銘柄や時間足が変わると桁が変わります。固定のしきい値を置くと使い回せなくなるので、符号や前の足との増減で判定するほうが扱いやすくなります。

配信元の違いを前提にします。ティックボリュームはブローカーごとに異なるため、ある環境で検証した結果が別の環境でそのまま再現するとは限りません。検証と運用は同じ配信元のデータで行います。

// 抜粋: 価格のMACDとOBVのMACDの符号を比べる
private OnBalanceVolume _obv;
private MacdCrossOver _priceMacd;
private MacdCrossOver _obvMacd;

protected override void OnStart()
{
    _obv = Indicators.OnBalanceVolume(Bars.ClosePrices);
    _priceMacd = Indicators.MacdCrossOver(Bars.ClosePrices, 26, 12, 9);
    _obvMacd = Indicators.MacdCrossOver(_obv.Result, 26, 12, 9);
}

protected override void OnBar()
{
    double priceHist = _priceMacd.Histogram.Last(1);
    double obvHist = _obvMacd.Histogram.Last(1);
    if (double.IsNaN(priceHist) || double.IsNaN(obvHist)) return;

    bool aligned = priceHist != 0
        && Math.Sign(priceHist) == Math.Sign(obvHist);

    // aligned のときだけ、価格側のシグナルを候補として扱う
}

読み込み直後は、長期側の EMA が安定するまで値が落ち着きません。NaN の確認に加えて、起動後しばらくは判定を行わない待機本数を設けておくと安全です。

実装の流れ

処理は三段階に分けて考えると整理しやすくなります。

  1. 計算: 確定足ごとに、価格の MACD と OBV の MACD のヒストグラムを取得します
  2. 整合の判定: 二つの符号が揃っているかを確認し、揃っていなければその足は見送ります
  3. 出力: 揃っている場合に限り、価格側の条件(ヒストグラムの符号転換など)を評価し、通知または発注処理へ渡します

損切りや数量の決定は、この判定とは別の部品として持たせます。整合の判定は「候補を通すかどうか」だけを担当させると、後から条件を差し替えやすくなります。また、見送った足も含めて二つのヒストグラムの値をログに残しておくと、フィルターがどの場面で働いたのかを後から確認できます。最初は発注まで行わず、通知だけで動かして挙動を確かめる段階を挟む方法もあります。

確定足での計算から、価格MACDとOBVのMACDの符号の整合判定、価格側条件の評価、通知・発注までの処理フロー図

どう活用するか

自作する方は、「指標の出力を別の指標の入力に渡す」という構造を、Claude Code への指示の中心に据えると開発の参考になります。OBV 以外の累積型の指標にも応用できる型です。開発を委託する方は、ai-programming.xyz への相談時に、どのブローカーのデータで検証するか、整合しない足を見送るのか通知だけ変えるのかを先に決めておくと、要件の整理が進めやすくなります。体系的に学びたい方には、指標同士の依存関係と確定足での判定は、スクールで扱う基本的な設計の題材でもあります。

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