ROCとRSIの組み合わせ — 似た者同士のモメンタム指標を移動量と一貫性で読み分ける
ROC(Rate of Change、変化率)と RSI(Relative Strength Index、相対力指数)は、どちらも「勢い」を測るモメンタム系の指標です。同じ系統の指標を2つ並べても情報は増えない、とよく言われます。それでも本記事でこの2つを取り上げるのは、計算の中身を分解すると、両者が見ているものが少し違うからです。ROC は「どれだけ動いたか」を、RSI は「どれだけ一方向だったか」を測っています。この差を利用して、値動きの質を分類する設計を整理します。cTrader の cBot 開発を想定した設計メモであり、特定の構成が成果につながることを示すものではありません。
ROC の役割
ROC は、現在の終値が N 本前の終値から何パーセント変化したかを示す指標です。計算に使うのは「いま」と「N 本前」の2点だけで、ゼロを中心にプラス・マイナスへ振れます。上限も下限もありません。
この単純さが強みです。出力は「期間内の正味の移動量」そのものなので、意味の解釈に迷いません。ゼロラインより上か下か、絶対値が大きいか小さいかを見るだけで、直近の値動きの規模を把握できます。
一方で、2点しか見ないことが限界にもなります。途中の経路は一切反映されません。なだらかに進んだ場合も、大きく往復しながらたどり着いた場合も、始点と終点が同じなら ROC は同じ値です。また、N 本前の足がたまたま極端な値だった場合、その足が計算窓から外れた瞬間に、現在の値動きとは無関係に ROC が跳ねることがあります。さらに、値に上下限がないため、銘柄や時間足をまたいで同じ閾値を使い回せません。
RSI の役割
RSI は、期間内の上昇幅の平均と下落幅の平均を比べ、0〜100 の範囲に収めた指標です。基礎はRSIとはで解説しています。
設計の観点で注目したいのは、RSI が実質的に「正味の移動量 ÷ 往復を含めた総移動量」に近いものを測っている点です。上げ下げが打ち消し合っていれば 50 付近に留まり、ほぼ一方向にだけ動いていれば 0 や 100 に近づきます。つまり RSI は、方向の一貫性を表す指標として読めます。値域が固定されているため、銘柄をまたいだ比較もしやすくなります。
限界は、移動の規模が分からないことです。値幅のごく小さい相場でも、小さな陽線が続けば RSI は高い値を示します。70 や 30 といった水準に達していても、それが大きな値動きの結果なのか、静かな相場での片寄りなのかは、RSI だけでは区別できません。加えて、強い一方向の動きが続くと RSI は端に張り付き、情報量が落ちます。
なぜこの組み合わせか
ここまでを整理すると、ROC は「規模は分かるが経路が分からない」、RSI は「経路の一貫性は分かるが規模が分からない」という関係にあります。互いの欠けている情報を、相手が持っている構図です。
この2軸を掛け合わせると、値動きを次の4つに分類できます。
- ROC の絶対値が大きく、RSI が 50 から遠い: 規模があり、経路も一方向だった動き
- ROC の絶対値が大きく、RSI が 50 に近い: 移動量は大きいが、大きな往復を伴っていた動き
- ROC の絶対値が小さく、RSI が 50 から遠い: 小幅ながら一方向に積み上がった動き
- どちらも中立付近: 方向感のない状態
単独では同じ「ROC が大きい」に見える局面を、RSI が2つに分けます。この分類そのものは売買の判断ではなく、後段のロジックへ渡す 環境ラベル として使うのが扱いやすい形です。たとえば、順張りロジックは1番目のラベルのときだけ評価する、往復を伴うラベルのときは損切り幅の設計を変える、といった切り替えの材料になります。
ただし、注意点を先に明記しておきます。両者はどちらも終値だけを材料にしているため、動きは強く連動します。「ROC がプラスで RSI も 50 超」という条件は、独立した2つの確認ではなく、ほぼ同じことを2回確かめているだけです。同系統のオシレーターを二重確認に使う設計はストキャスティクスとRSIの組み合わせでも触れましたが、本記事の構成の価値は「一致」ではなく「食い違い」の側にあります。2番目と3番目のラベルを検出できることが、2つを並べる理由です。
パラメータをどう考えるか
ここで挙げる数値は検証の出発点であり、正解ではありません。
まず検討したいのは、2つの期間をそろえるかどうかです。そろえると「同じ窓の値動きを2つの角度から見る」構成になり、4分類の意味が明確になります。ただし RSI の平滑化は過去の影響を期間より長く引きずるため、厳密に同じ窓にはなりません。ROC の期間を短め、RSI を標準の 14 本にする構成は、短期の移動量と中期の一貫性を比べる形になり、意味合いが変わります。
次に閾値です。RSI は 50 からの距離で判定するため、銘柄をまたいでも基準を共有しやすい傾向があります。難しいのは ROC の側で、値動きの大きい銘柄と小さい銘柄では「大きい」の水準がまったく異なります。固定値を置くよりも、直近の ROC 絶対値の分布に対する相対位置で判定するか、ROCとATRの組み合わせで扱ったようにボラティリティで正規化する方法が検討対象になります。
時間足については、短い足ほど ROC の跳ねが増え、分類が頻繁に入れ替わります。どの設定でも、バックテストで分類ごとの出現頻度を確認し、極端に偏っていないかを見てから先へ進めてください。
cBot化する際の考慮点
実装上の急所を4点挙げます。
確定足で判定する: 形成中の足では ROC も RSI も動き続けるため、分類ラベルが1本の中で何度も変わります。OnBar で1本前の確定値を参照する構成が出発点です。
出力スケールを確認する: ROC の実装には、比率のまま返すものとパーセントに換算して返すものがあります。閾値を置く前に、実際の出力値をログへ書き出して桁を確かめてください。ここを取り違えると、条件が一度も成立しないか、常に成立するかのどちらかになります。
履歴不足への対処: ロード直後は NaN が返ることがあります。また RSI は平滑化の初期値に影響されるため、必要本数ぎりぎりではなく余裕を持たせてから評価を始めます。
境界でのちらつき: 閾値付近では分類が足ごとに入れ替わります。ラベルが切り替わるには一定本数の継続を要求する、あるいは「入る閾値」と「出る閾値」を分けるといった緩衝を検討します。
// 抜粋: 2軸による分類
private PriceROC _roc;
private RelativeStrengthIndex _rsi;
protected override void OnStart()
{
_roc = Indicators.PriceROC(Bars.ClosePrices, RocPeriod);
_rsi = Indicators.RelativeStrengthIndex(Bars.ClosePrices, RsiPeriod);
}
protected override void OnBar()
{
double roc = _roc.Result.Last(1);
double rsi = _rsi.Result.Last(1);
if (double.IsNaN(roc) || double.IsNaN(rsi)) return;
bool largeMove = Math.Abs(roc) >= RocThreshold; // 基準は銘柄ごとに検証
bool consistent = Math.Abs(rsi - 50.0) >= RsiDistance; // 50からの距離
string label = largeMove
? (consistent ? "LargeConsistent" : "LargeChoppy")
: (consistent ? "SmallDrift" : "Neutral");
Print("{0} roc={1:F4} rsi={2:F1}", label, roc, rsi);
}
なお、2つの指標の符号が食い違う場合(ROC はプラスだが RSI は 50 未満など)をどのラベルへ入れるかは、設計時に決めておく必要があります。期間をずらした構成では、この食い違いが珍しくありません。
実装の流れ
処理は、入力・分類・利用の三段に分けて考えます。
- 入力: 確定足の終値から ROC と RSI を取得し、値の妥当性を確認する
- 分類: ROC の絶対値と、RSI の 50 からの距離をそれぞれ基準と比べ、4つのラベルのいずれかを決める
- 利用: ラベルをログや通知へ出力し、必要に応じて別ロジックの実行条件として渡す
最初の段階では、発注につなげず、ラベルをログへ出すだけの構成で走らせることをおすすめします。ラベルごとの出現頻度を記録として眺めることで、閾値が妥当か、この分類が自分の時間軸で意味を持つのかを確かめられます。
どう活用するか
自作する方は、本記事の「2軸で4分類し、ラベルを出力する」という骨格を、そのまま Claude Code への指示書に使えます。開発を委託する方は、ai-programming.xyz への相談時に「ROC の閾値をどう正規化するか」「符号が食い違う場合の扱い」の2点を先に整理しておくと、要件のすり合わせが進めやすくなります。体系的に学びたい方には、同系統の指標を重ねるときに何が重複し、何が新しい情報なのかを切り分ける練習として、スクールの題材にも向いています。
ROC を方向の確認と組み合わせる考え方は、ROCと移動平均の組み合わせで扱っています。あわせて読むと、今回の環境ラベルをどこへ接続するかのイメージがつかみやすくなります。
本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。