copipe Python | pandasでRCIを計算する。

概要

pd.Series(x).rank()によって価格順位を取得し、rci=1-6*d/(日数*(日数^2-1)), d=(日付順位-価格順位)^2を計算することで、pandasでRCI(順位相関係数)を求めることができる。

コード

import pandas as pd
import numpy as np

def iRCI(x):
    n = len(x)
    d = ((np.arange(1,n+1)-np.array(pd.Series(x).rank()))**2).sum()
    rci = 1-6*d/(n*(n**2-1))
    return rci*100

df = pd.DataFrame([109.83, 110.35, 110.73, 110.61, 110.70, 110.18, 109.73, 109.84, 109.63], columns=["close"])
df['RCI'] = df["close"].rolling(5).apply(iRCI)
print(df)

結果

    close   RCI
0  109.83   NaN
1  110.35   NaN
2  110.73   NaN
3  110.61   NaN
4  110.70  70.0
5  110.18 -30.0
6  109.73 -90.0
7  109.84 -80.0
8  109.63 -90.0