计算n日kdj值
1 周期(n日、n周等)的RSV值
n日rsv = (Cn -Ln)/ (Hn-ln) x 100
rsv为未成熟随机指标值;
Cn为第n日收盘价;
Ln为n日内的最低价;
Hn为n日内的最高价
2 计算K值与D值
当日K值=2/3×前一日K值+1/3×当日RSV
当日D值=2/3×前一日D值+1/3×当日K值
若无前一日K 值与D值,则可分别用50来代替。
J值=3*当日K值-2*当日D值
kdj指标中,k值和d值的取值范围都是0—100,而j值的取值范围可以超过100和低于0。通常就敏感性而言,j值最强,k值次之,d值最慢,而就安全性而言,j值最差,k值次之,d值最稳。
low_list=df['low'].rolling(window=9).min()
low_list.fillna(value=df['low'].expanding().min(), inplace=True)
high_list = df['high'].rolling(window=9).max()
high_list.fillna(value=df['high'].expanding().max(), inplace=True)
rsv = (df['close'] - low_list) / (high_list - low_list) * 100
df['KDJ_K'] = rsv.ewm(com=2).mean()
# pd.Series.ewm(rsv, com=2).mean()
df['KDJ_D'] = df['KDJ_K'].ewm(com=2).mean()
# pd.Series.ewm(stock_datas['K'], com=2).mean()
df['KDJ_J'] = 3 * df['KDJ_K'] - 2 * df['KDJ_D']