RSI(相対力指数)の計算と可視化 - Python実装
りく
はじめに
RSI(Relative Strength Index、相対力指数)は、価格の変動の強さを測るオシレーターです。
「株価が上がりすぎたか、下がりすぎたか」を数値化し、**30以下(過売い)や70以上(過買い)**を売買のタイミングとして使います。
この記事では、RSIの計算式を理解し、Pythonでゼロから実装します。
RSIとは?
基本的な考え方
RSIは、過去n日間の値上がり幅と値下がり幅の比率を表します。
$$RSI = 100 - \frac{100}{1 + RS}$$ここで、$RS$(Relative Strength)は:
$$RS = \frac{過去n日間の平均値上がり幅}{過去n日間の平均値下がり幅}$$解釈の仕方
| RSI値 | 状態 | トレーディングの意味 |
|---|---|---|
| 70以上 | 過買い(Overbought) | 売りのサイン |
| 50 | 中立 | トレンドの転換点 |
| 30以下 | 過売い(Oversold) | 買いのサイン |
計算ステップ
- 前日比の変化を計算
- 値上がり/値下がりに分類
- 平均値上がり幅・平均値下がり幅を計算(通常は14日)
- RSを計算
- RSIを計算
Pythonでの実装
Step 1: データ取得
| |
Step 2: RSIの計算
| |
精度向上版:指数移動平均を使用
上記の単純移動平均(SMA)版RSIは簡単ですが、**指数移動平均(EMA)**を使う方が一般的です。
| |
Step 3: 可視化
| |
トレーディングシグナルの生成
基本シグナル
| |
シグナルの可視化
| |
RSIの応用テクニック
1. RSIのダイバージェンス検出
**ダイバージェンス( Divergence)**とは、価格とRSIの動きが逆方向に進む現象です。
| |
2. RSIの移動平均
| |
よくあるエラーと解決法
エラー1: RSIがNaNになる
原因: データが不足している
解決法:
| |
エラー2: RSIが100や0で固定される
原因: 長期間同じ方向に価格が動き続けた
対策:
| |
まとめ
この記事では、RSIの計算とPython実装を学びました。
キーポイント:
- RSI = 100 - (100 / (1 + RS))
- 30以下は過売い(買い)、70以上は過買い(売り)
- EMA版のRSIが一般的に使用される
- ダイバージェンス検出でより精度を上げられる
注意点:
- RSIは強いトレンド中に長期間過買い/過売いのままになることがある
- 単独では使わず、他の指標と組み合わせることが重要
関連記事:
参考リンク: