概要
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