東証も前代未聞の長いお休みに入った10連休3日目、いかがお過ごしでしょうか。そんな今回は RCI を。順位相関指数と言うやつで、N 日間の株価について昇順に順位を採り、時系列に沿って 1, 2, … N と順当な上昇であれば 100% に、逆に N, N-1, … 1 と下降なら -100% に近づくというものです。直観的で分かりやすいっすよねー。
例によって、日経平均プロフィルさんから株価データ取得のコードは、シリーズ第1回目を参照ください。
株価(終値)の順位計算には、Pandas の Series/DataFrame に rank() というメソッドがあるので、これを活用します。
# 計算期間(日数) RCI_DAYS = 9 # RCI 計算関数 def calc_rci(prices): day_cnt = len(prices) # 日付昇順ランク rank_day = np.arange(day_cnt) + 1 # 株価昇順ランク rank_price = np.array(pd.Series(prices).rank()) rci = 1 - (6 * ((rank_day - rank_price)**2).sum()) / (day_cnt * (day_cnt**2 - 1)) return rci * 100 # パーセント値で返却 # RCI を計算して列追加 df['rci'] = df.close.rolling(RCI_DAYS).apply(calc_rci, raw=True)
直近250日について、株価と RCI のグラフを並べてみます。
ついでに、RCI が最小・ゼロ付近・最大の日付について、時系列と株価の順位相関も散布図で見える化して、「うんうん」と納得してみましょー。
うんうんw。今回も、コード一式と実行結果は Google Colaboratory でどうぞー↓。