わたねこコーリング

野良プログラマ発、日々のアウトプット

Pandas 演習としてのテクニカル指標計算 〜 RCI の巻

東証も前代未聞の長いお休みに入った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 のグラフを並べてみます。

f:id:mariyudu:20190429154118p:plain
直近250日の株価と RCI

ついでに、RCI が最小・ゼロ付近・最大の日付について、時系列と株価の順位相関も散布図で見える化して、「うんうん」と納得してみましょー。

f:id:mariyudu:20190429154206p:plain
RCI 散布図

うんうんw。今回も、コード一式と実行結果は Google Colaboratory でどうぞー↓。

colab.research.google.com