Python实现KDJ指标计算:股票技术分析的利器系列(3)

本文详细介绍了如何使用Python实现KDJ技术指标,包括计算LLV(最低价最小值)、HHV(最高价最大值)、RSV、SMA(简单移动平均线),以及K、D和J值的计算过程。并给出了KDJ指标的基本用法和在股票市场中的信号解读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


介绍

先看看官方介绍:

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;
  1. RSV(Raw Stochastic Value):原始随机值。RSV是根据最近N个交易日内的收盘价,计算其相对于最高价和最低价的位置比例。公式为:RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100。其中LLV代表最低价的最小值,HHV代表最高价的最大值。

  2. LLV(Lowest Value):最低价的最小值。LLV函数用于计算最近N个交易日内的最低价的最小值。

  3. HHV(Highest Value):最高价的最大值。HHV函数用于计算最近N个交易日内的最高价的最大值。

  4. SMA(Simple Moving Average):简单移动平均线。SMA是一种用于平滑数据的常见方法,通过计算一段时间内数据的平均值来观察价格的长期趋势。

KDJ指标中的K、D、J分别代表:

  • K:代表快速随机值,是RSV的平滑移动平均线,常用于观察价格的短期波动情况。
  • D:代表慢速随机值,是K的平滑移动平均线,用于观察价格的中期趋势。
  • J:代表J值,是根据K和D计算得出的一个值,常用于观察价格的长期趋势和判断超买超卖情况。

在KDJ指标中,通常会设定两个参数M1和M2,分别用于计算K和D的移动平均值。

代码

rolling函数介绍

rolling 函数通常与其他函数(如 meansumstd 等)一起使用,以计算滚动统计量,例如滚动均值、滚动总和等。

以下是 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: 窗口类型,例如 Noneboxcartriang 等,默认为 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)

计算结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盗理者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值