Python实现KDJ指标计算:股票技术分析的利器系列(3)
- 介绍
- 算法解释
- 代码
- rolling函数介绍
- 计算LLV(最低价最小值)和HHV(最高价最大值)
- 计算RSV
- 计算SMA(简单移动平均)
- 完整代码
- 计算结果
介绍
先看看官方介绍:
KDJ(随机指标)
用法
1.D指标>80 时,回档机率大;D指标<20时,反弹机率大;
2.K在20左右向上交叉D时,视为买进信号;
3.K在80左右向下交叉D时,视为卖出信号;
4.J>100 时,股价易反转下跌;J<0 时,股价易反转上涨;
5.KDJ 波动于50左右的任何信号,其作用不大。
算法解释
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,M1,1);
D:SMA(K,M2,1);
J:3*K-2*D;
-
RSV(Raw Stochastic Value):原始随机值。RSV是根据最近N个交易日内的收盘价,计算其相对于最高价和最低价的位置比例。公式为:RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100。其中LLV代表最低价的最小值,HHV代表最高价的最大值。
-
LLV(Lowest Value):最低价的最小值。LLV函数用于计算最近N个交易日内的最低价的最小值。
-
HHV(Highest Value):最高价的最大值。HHV函数用于计算最近N个交易日内的最高价的最大值。
-
SMA(Simple Moving Average):简单移动平均线。SMA是一种用于平滑数据的常见方法,通过计算一段时间内数据的平均值来观察价格的长期趋势。
KDJ指标中的K、D、J分别代表:
- K:代表快速随机值,是RSV的平滑移动平均线,常用于观察价格的短期波动情况。
- D:代表慢速随机值,是K的平滑移动平均线,用于观察价格的中期趋势。
- J:代表J值,是根据K和D计算得出的一个值,常用于观察价格的长期趋势和判断超买超卖情况。
在KDJ指标中,通常会设定两个参数M1和M2,分别用于计算K和D的移动平均值。
代码
rolling函数介绍
rolling
函数通常与其他函数(如 mean
、sum
、std
等)一起使用,以计算滚动统计量,例如滚动均值、滚动总和等。
以下是 rolling
函数的基本语法:
DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
window
: 用于计算统计量的窗口大小。min_periods
: 每个窗口最少需要的非空观测值数量。center
: 确定窗口是否居中,默认为False
。win_type
: 窗口类型,例如None
、boxcar
、triang
等,默认为None
。on
: 在数据帧中执行滚动操作的列,默认为None
,表示对整个数据帧执行操作。axis
: 执行滚动操作的轴,默认为0
,表示按列执行操作。closed
: 确定窗口的哪一端是闭合的,默认为None
。
计算LLV(最低价最小值)和HHV(最高价最大值)
# 定义函数计算LLV(最低价最小值)和HHV(最高价最大值)
def calculate_llv_high_low(high, low, n):return low.rolling(window=n).min(), high.rolling(window=n).max()
计算RSV
# 定义函数计算RSV
def calculate_rsv(close, llv_low, hhv_high):return (close - llv_low) / (hhv_high - llv_low) * 100
计算SMA(简单移动平均)
# 定义函数计算SMA(简单移动平均)
def calculate_sma(data, window):return data.rolling(window=window).mean()
完整代码
import pandas as pd# 定义函数计算LLV(最低价最小值)和HHV(最高价最大值)
def calculate_llv_high_low(high, low, n):return low.rolling(window=n).min(), high.rolling(window=n).max()# 定义函数计算RSV
def calculate_rsv(close, llv_low, hhv_high):return (close - llv_low) / (hhv_high - llv_low) * 100# 定义函数计算SMA(简单移动平均)
def calculate_sma(data, window):return data.rolling(window=window).mean()# 示例数据
data = {'CLOSE': 填每日收盘的数据,'HIGH': 填每日最高的数据,'LOW': 填每日最低的数据
}
df = pd.DataFrame(data)# 设置参数
N = 9
M1 = 3
M2 = 3# 计算LLV和HHV
df['LLV_LOW'], df['HHV_HIGH'] = calculate_llv_high_low(df['HIGH'], df['LOW'], N)# 计算RSV
df['RSV'] = calculate_rsv(df['CLOSE'], df['LLV_LOW'], df['HHV_HIGH'])# 计算K
df['K'] = calculate_sma(df['RSV'], M1)# 计算D
df['D'] = calculate_sma(df['K'], M2)# 计算J
df['J'] = 3 * df['K'] - 2 * df['D']print(df)