OBVとRSIの見方 過熱感の裏に出来高の勢いが伴うかを確認する設計

組み合わせの概要

RSIは値幅の変化から過熱感を測るオシレーターで、出来高には一切触れません。対してOBVは出来高そのものを終値の上下に応じて足し引きし、その勢いを線として描く指標です。見ている材料が「値動きの角度」と「出来高の積み上がり」とはっきり分かれているため、片方だけでは見落としがちな側面をもう片方が拾える場面があります。本記事ではこの2指標を並べたときに何が読み取れるかを一般論として整理し、cBotに落とし込む際に詰めておきたい実装上のポイントにも触れます。自作を進めたい方、実装依頼の前に考え方を整理したい方の参考になれば幸いです。

RSIパネルとOBVパネルを上下に重ね、過熱感と出来高の勢いを見比べる模式図

RSI の役割

RSIは指定した期間内の値上がり幅の合計と値下がり幅の合計を比較し、0〜100の範囲で現在の値動きの偏りを表します。70付近を上限の目安、30付近を下限の目安として扱う読み方が広く知られており、値幅だけから機械的に過熱感を数値化できる手軽さが特徴です。

計算に使う材料が価格の変化幅だけという点は、そのまま弱点にもつながります。強いトレンドが継続する局面では高い水準・低い水準に線が張り付いたまま動かなくなることがあり、そこだけを見て逆方向を狙うと踏み上げられる展開になりやすくなります。また、値動きが実際にどれほどの参加者・注文量を伴っているのかは、RSIの数式からは一切読み取れません。

OBV の役割

OBVは、当該足の終値が直前の終値より高ければその足の出来高を加え、安ければ差し引くという単純な足し算・引き算を繰り返して作られる線です。数値そのものの大小には意味がなく、線の向き(右肩上がりか右肩下がりか)を見て、出来高がどちら方向に厚く積み上がっているかを判断する使い方が一般的です。

弱点として、傾きをどの程度の幅で判定するかという基準が定まりにくく、見る人によって解釈がぶれやすい点が挙げられます。さらに、値幅の大小をまったく考慮しないため、小さな上下動でも出来高が多ければ線が大きく動き、逆に大きな値動きでも出来高が乏しければ反応が鈍いままになります。単体では「線が伸びている」という事実以上の判断材料を得にくい指標です。

なぜこの組み合わせか

RSIとOBVは、片方が値幅、もう片方が出来高という、参照するデータの種類が根本から異なる指標です。この違いを利用すると、「値動きの過熱感」と「その値動きにどれだけの参加者が伴っているか」を別々の角度から突き合わせる整理ができます。

たとえばRSIが上限の目安付近まで伸びている局面でOBVも右肩上がりを維持していれば、値動きの過熱に出来高の厚みが伴っていると読める場面があり、単なる薄い値動きの跳ね上がりではない可能性を考える材料になります。反対にRSIだけが伸びてOBVが横ばい、あるいは下向きになっている場合は、値幅の割に出来高が乏しい状態として、飛びつきを控える判断材料に使えます。

この関係は、RSI単体の弱点である「参加度が分からない」という部分をOBVが補い、OBV単体の弱点である「大小の判断基準が主観的になりやすい」という部分を、RSIの数値化された水準が補う形になっていると考えられます。ノイズを減らす手がかりの一つになり得ますが、どちらも将来の値動きを言い当てる指標ではなく、あくまで現状把握のための材料である点は変わりません。2つが同じ方向を示したとしても、それは判断材料が増えたというだけで、結果を約束するものではない前提で扱う必要があります。

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

RSIの算出期間は14を初期値とする実装が多く見られますが、これは絶対の基準ではありません。期間を短くすると値動きへの反応が早まる代わりに細かい上下にも反応しやすくなり、長くすると滑らかになる代わりに転換への反応が遅れます。

OBV自体には調整すべきパラメータがほとんどありませんが、傾きを何本分の値動きで判定するかは実装者が決める部分です。短い本数で判定すれば細かな変化を拾いやすくなり、長い本数にすれば大きな流れだけを追う形になります。両者を組み合わせる際は、RSIの反応速度とOBVの傾き判定の本数感覚がかけ離れすぎないよう、同じ時間軸のイメージでそろえておくと解釈がぶれにくくなります。いずれの数値も「これで決まり」という正解はなく、対象とする銘柄・時間足で実際の挙動を確かめながら詰めていく工程が欠かせません。

cBot化する際の考慮点

このセクションは、実装前に押さえておきたい設計上の論点を整理する目的で書きます。まずデータの取得元ですが、cTraderのAPIで出来高として扱われる値はティックボリューム(一定期間内の価格更新回数)であり、株式市場などでいう実出来高とは性質が異なります。この違いを理解した上で、絶対的な水準ではなく相対的な傾きとして扱う設計が無難です。

// 例: 確定足ごとにOBVを更新し、RSIの水準と突き合わせる
private double _obvLine;

private void UpdateOnBar()
{
    double c0 = Bars.ClosePrices.Last(0);
    double c1 = Bars.ClosePrices.Last(1);
    long vol = Bars.TickVolumes.Last(0);

    if (c0 > c1) _obvLine += vol;
    else if (c0 < c1) _obvLine -= vol;

    double rsiNow = _rsi.Result.LastValue;
    bool obvRising = _obvLine > _obvHistory[_obvHistory.Count - 6];
    // rsiNow と obvRising の組み合わせを判定材料として渡す
}

計算順序としては、確定足が来るたびにOBVの線を1本更新し、そのうえでRSIの値と突き合わせる流れが自然です。RSIは価格系列のみで完結するため単独でも計算できますが、OBVは前回の値に対して加減算していく性質上、起動直後で系列が十分に貯まっていない間は判定を見送る実装にしておくと安全です。加えて、早朝や祝日明けなど極端に出来高が薄い時間帯はOBVの傾きが不自然に振れやすく、そうした時間帯を判定対象から外すフィルターを別途用意しておくと挙動が安定しやすくなります。ポジションの決済幅をOBVの傾きに直結させるのは相性が良くないため、利益確定や損切りの幅はボラティリティ系の指標など別の仕組みで設計し、役割を分けておく考え方が扱いやすいと考えられます。

確定足ごとの指標更新から発注管理までの処理フロー図

実装の流れ

処理の骨格としては、まず確定足のタイミングでOBVの線を更新し、同じタイミングでRSIの値を取得します。次にRSIが設定した水準を超えているかどうかを確認し、超えている場合のみOBVの傾きの向きを見て、両者が同じ方向を示しているかを判定します。一致していれば発注検討の対象として扱い、一致していなければ様子見またはログ記録に留める、という流れが考えられます。判定部分と発注部分を分けて実装しておくと、後からしきい値や判定条件だけを差し替えやすくなります。

どう活用するか

自作を検討している方は、まずRSIとOBVをそれぞれ単独でチャート上に表示し、両者がどのタイミングで同じ方向を向くのか、どのタイミングでずれるのかを目視で観察するところから始めると設計の見通しが立てやすくなります。Claude Codeを使ったcTrader cBotの開発では、本記事で触れた計算順序やエッジケースの整理がそのまま設計メモとして流用できます。実装を外部に依頼したい方はai-programming.xyzで個別の実装相談を承っています。指標同士の組み合わせ方を体系的に学びたい方は、スクールのカリキュラムでも近い視点を扱っていますので参考にしてください。

RSIの基礎からおさらいしたい方はRSIの基礎解説記事、出来高を絡めた別の組み合わせ例としてはMFIとRSIの組み合わせ記事もあわせてご覧ください。

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