KDJ指标由三部分组成:K值、D值、J值,主要用于分析股票市场的超买超卖状态及股价波动的趋势。博主记录学习编写KDJ指标线
import numpy as np
def calculate_kdj(close_prices, n=9, m1=3, m2=3):
"""
计算KDJ指标
:param close_prices: 收盘价序列,np.array 或列表
:param n: RSV计算周期,默认9天
:param m1: K的平滑天数,默认3天
:param m2: D的平滑天数,默认3天
:return: K, D, J值序列
"""
# 计算RSV(未成熟随机值)
delta = close_prices.diff(n-1)
gain = np.where(delta > 0, delta, 0)
loss = np.abs(np.where(delta < 0, delta, 0))
avg_gain = gain.rolling(n).sum() / n
avg_loss = loss.rolling(n).sum() / n
rs = avg_gain / avg_loss
rsv = 100 * (avg_gain / (avg_gain + avg_loss))
# 初始化K, D, J
k = np.zeros_like(rsv)
d = np.zeros_like(rsv)
j = np.zeros_like(rsv)
# 计算第一日的K值
k[:m1] = rsv[:m1]
d[:m2] = k[:m2]
# 计算后续的K, D, J值
for i in range(m1, len(rsv)):
k[i] = (2/3) * k[i-1] + (1/3) * rsv[i]
d[i] = (2/3) * d[i-1] + (1/3) * k[i]
j[i] = 3 * k[i] - 2 * d[i]
return k, d, j
# 示例数据:假设我们有一系列收盘价
close_prices = np.random.uniform(10, 100, 30).cumsum() # 生成示例收盘价序列
k_values, d_values, j_values = calculate_kdj(close_prices)
print("K值:", k_values[-1])
print("D值:", d_values[-1])
print("J值:", j_values[-1])
这段代码首先定义了一个calculate_kdj函数,用于计算给定收盘价序列的KDJ指标。请注意,为了实际应用这段代码,我们需要替换close_prices变量是实际股票或金融产品的历史收盘价数据。此外,根据我们也可以根据具体的需求,对接到实时数据源或调整参数n、m1、m2来优化指标的表现。
写这段代码段假设我们已经安装好的Python开发环境,也成功安装了Numpy库。如果没有安装,可以通过运行pip install numpy来安装。这段代码是一个起点,根据实际需求,我们可能还需要添加错误处理、数据验证等逻辑,并考虑如何在实际交易环境中集成和测试此指标。