RSIストラテジーはどのように計算されるのか
直接的な答え
RSI(Relative Strength Index:相対力指数)は、価格の時系列から計算されます。各期間の値上がり(gain)または値下がり(loss)を、選んだルックバックウィンドウ(見ている期間)にわたって「平均の上昇幅(average gains)」と「平均の下落幅(average losses)」という2つの移動平均に変換します。これら2つの平均は、相対力(relative-strength)の比率に変換され、その後0から100の範囲のオシレーター値としてマッピングされます。
メカニズムと定義
RSIが測ろうとするもの
RSIは、直近の価格上昇の強さが、直近の価格下落と比べてどれくらい強いかを表現しようとします。そのためには、段階的な価格変化(たとえば、期間ごとの終値から終値への変化)を必要とします。各期間の変化は次のように分けられます。
- Gain(上昇幅):前の期間からの増加。変化がマイナスなら0。
- Loss(下落幅):前の期間からの減少。正の数として表す。変化がプラスなら0。
コアとなる材料(入力)
RSIを一貫して計算するには、次が必要です。
- 定義された頻度の価格系列(例:1本のバーにつき1つの値)。RSIは「魔法の数」ではありません。あなたが与える系列から計算されます。
- ルックバックウィンドウの長さ(N)。多くのチャート文脈では一般に14期間です。
- 平均の上昇幅と下落幅のための平滑化手法(RSI実装間の違いの大きな原因になります)。
- 最初の平均のための慣習(初期化)。最も初期のRSI値は、平均の開始方法に依存します。
よく使われるRSIの計算式の構造
RSIは次の中間値を使います。
- ルックバックウィンドウにおける Average Gain(平均の上昇幅)
- ルックバックウィンドウにおける Average Loss(平均の下落幅)
- Relative Strength(RS) = (Average Gain) / (Average Loss)
その後、RSIは次のようにマッピングされます。
- RSI = 100 − (100 / (1 + RS))
この構造は、平均の上昇幅が平均の下落幅を上回っているとRSIが高くなり、平均の下落幅が平均の上昇幅を上回っているとRSIが低くなることを意味します。
Wilderの平滑化(よくあるバリアント)
多くのプラットフォームでは、各期間ごとに平均を更新するためにWilderの平滑化を使います。このアプローチでは、すでに前の平均の上昇幅と平均の下落幅がある場合、現在のgain/lossと前の平均を使って更新します。
大まかには、更新は次のパターンに従います。
- 新しい平均の上昇幅は、前の平均の上昇幅と現在の上昇幅の混合で、ルックバックウィンドウで重み付けされます。
- 新しい平均の下落幅は、前の平均の下落幅と現在の下落幅の混合で、ルックバックウィンドウで重み付けされます。
正確な算術更新は実装に依存しますが、重要な考え方は同じです。毎ステップで単純平均を最初から作り直すのではなく、上昇幅と下落幅を平滑化します。
「RSIストラテジー」と計算の関係
「RSIストラテジー」とは、RSIの値を使うあらゆるルールセットを指し得ます(たとえば、RSIがある水準より上または下にある条件、あるいはRSIがある水準をクロスする条件など)。重要な切り分けは次の通りです。
- 計算:RSIは、価格データ、N、平滑化/初期化の選択から決定論的に計算されます。
- ストラテジーのロジック:どんなトレードスタイルのルールでも、RSIの値を解釈します。同じRSI計算でも、異なる意思決定ルールと組み合わせることができます。
RSIを独立に検証したい場合は、計算手順に注目し、データソースやソフトウェアで使われているRSI設定(正確な設定)と一致していることを確認してください。
証拠または例(明確な前提つき)
例のセットアップと前提
異なるRSI実装は違い得るため、この例では前提を明示します。
- 期間ごとの終値から終値への価格系列を使います。
- ルックバックウィンドウN = 14を選びます。
- Wilder型の平滑化と概念的に整合する平滑化アプローチを使います。
- 次の方法でgainとlossを計算します:gain = max(change, 0) および loss = max(-change, 0)。
再現できるステップごとの構造
- 変化を計算:change[t] = price[t] − price[t−1]。
- 上昇幅と下落幅に分割:
- gain[t] = max(change[t], 0)
- loss[t] = max(−change[t], 0)
- Nをカバーするのに十分な期間が存在する地点で、平均の上昇幅と平均の下落幅を初期化します。
- よくある初期化は、最初のN個の上昇幅と最初のN個の下落幅に対する単純平均です。
- 選んだ平滑化手法を使って、各新しい期間ごとに平均を更新します。
- RSを計算:RS = averageGain / averageLoss。
- RSIに変換:RSI = 100 − (100 / (1 + RS))。
確認すべき重要なエッジケース
平均の下落幅が 0 になった場合、RSは未定義、または実装に応じて実質的に無限大になります。多くのRSI実装では、極端な値としてRSI値を割り当てることでこれを扱います(たとえば、平均化ウィンドウ内に下落がない場合はRSIが100になる、など)。RSIの出力を検証するときは、平均の下落幅が0のケースであなたのツールがどう扱うかを確認してください(同様に、平均の上昇幅が0の場合にどうなるかも確認してください)。
制限とリスク(何がうまくいかない可能性があるか)
1) 初期化と初期の値
系列の開始時点のRSI値は初期化に依存します。異なるプラットフォームでは次のように異なり得ます。
- 最初のaverageGain/averageLossに単純平均を使う、
- 別のウォームアップ手法を使う、
- あるいは平滑化のシード(初期値)に別の方法を選ぶ。
そのため、初期のRSI値は、後半の値が収束しても異なる可能性があります。
2) バリアントの違い(平滑化と入力定義)
Nが同じでも、実装が異なるためRSIは変わり得ます。違いの例は次の通りです。
- 平滑化手法(Wilder型 vs 単純平均 vs その他のアプローチ)、
- 入力が終値なのか、典型価格なのか、あるいは別の価格フィールドなのか、
- 期間の定義(時間軸の整合、欠けたバー)。
つまり「RSIの値」は、正確な計算バリアントと正確な入力系列を指定して初めて適切に定義されます。
3) データ依存性と非予測的な性質
RSIは、過去の価格変化の変換です。過去の変換は、将来のRSIがどう振る舞うかを保証しません。また、同じRSI値が単一の結果を意味するわけでもありません。さらに、コストや執行の詳細(RSI計算には含まれないもの)が、実務上の結果を支配することもあります。
4) 検証は不一致の設定によって損なわれ得る
よくある失敗パターンは、デフォルトのRSI設定が、再現に必要な設定と一致していると仮定してしまうことです。独立に検証するには、次を一致させる必要があります。
- 正確なN、
- 平滑化/平均化のバリアント、
- 使用する価格系列、
- エッジケースの扱い。
検証と次の質問
RSI計算を独立に検証する方法
どのシステムでもRSI値を検証するには、同じ入力と設定でRSIを再計算します。
- ツールが使っているのと同じ価格系列をエクスポートするか、再作成します。
- Nを正確に一致させます。
- 平滑化/平均化の手法と初期化を一致させます。
- gain/lossの分割を再計算し、次に平均の上昇幅/下落幅、次にRS、そしてRSIへのマッピングを行います。
- ウォームアップ期間の後を含め、複数のポイントでツールのRSI出力と比較します。
値が一致しない場合、原因は通常、平滑化バリアント、初期化、または入力価格定義の違いです。