1.はじめに
どうも、趣味でデータ分析している猫背なエンジニアです。
今回は、前回に引き続き兆しシリーズのロジックについて考えたので記録していきます。
2. RSI(Relative Strength Index : 相対力指数)
■ 概要
以前の記事で以下のような画像のスクリーニング1号機を作り内部ロジックで「ボリンジャーバンド」を入れましたが、今回は「RSI」というロジックも試しに入れてみようと思っています。

■ RSI
RSI(相対力指数)は、オシレーター系のテクニカル指標の代表で、人気ある指標の一つ。数多くのテクニカル指標を生み出したJ.W.ワイルダー(米国)が考案し、現在の相場の相対的な強弱(過熱感)を表す指標。
特徴としてボックス相場が続いているときの的中率は高いものの、上下に強いトレンドが出ると、売買シグナルが出ていたとしても、トレンドの勢いが止まらずに、結局ダマシに終わることがある。
$$
\mathrm{RSI} = 100 - \frac{100}{1 + RS}
$$
※ RSは以下の式で示す。
$$
RS = \frac{\text{Average Gain}}{\text{Average Loss}}
$$
■ コーディング
以下のようにRSIを実装しました。買いシグナルがあるものをピックアップする式にしているので、一般的なソースとは別かもしれません。
def screen_rsi(df):
df = df.copy()
diff = df["Close"].diff()
gain = diff.where(diff > 0, 0)
loss = -diff.where(diff < 0, 0)
df["RSI"] = 100 - 100 / (1 + gain.rolling(14).mean() / loss.rolling(14).mean())
last = df.iloc[-1]
# --- 買いシグナル ---
rsi_flag = False
if last["RSI"] < 30:
rsi_flag = True
return rsi_flag
■ 実行結果
SMA乖離率のスクリーニングの際に1/10まで削れて、そこからさらにボリンジャーバンドを通過、残りをRSIで抽出していることから、スクリーニング率はあまり高くないですが、10銘柄ほど削れていることがわかります。

4.おわりに
今回は兆しシリーズのKK-FinancialEaterの一号機を進めていきました。前回に引き続きスクリーニングできていることが確認できますね。
今回作成したRSIに関してですが、種別として、テクニカル分析の中のオシレータ分析に該当するもので、1号機とはまた別の方法かもしれないと思いだしました。
近いうちに2号機に移そうと思いますが、とりあえずはこのまま運用を続けたいと思います。
📈 KK-FinancialEater
■ 原点(KK-Adam)
■ その1:プロトタイプ編
■ その2:収集器強化編
■ その3-番外編:グランビルの法則 - 設計編
■ その3:グランビルの法則
■ その4:移動平均乖離率
■ その5:ボリンジャーバンド
参考文献