33 lines
916 B
Python
33 lines
916 B
Python
def calculate_kdj(high, low, close, n):
|
|
# Calculate RSV
|
|
true_range = [max(high[i] - low[i], abs(high[i] - close[i-1]), abs(low[i] - close[i-1])) for i in range(len(high))]
|
|
rsv = [0]*len(close)
|
|
for i in range(n, len(close)):
|
|
avg_true_range = sum(true_range[i-n:i]) / n
|
|
if avg_true_range == 0:
|
|
rsv[i] = 0
|
|
else:
|
|
rsv[i] = (close[i] - min(low[i-n:i])) / avg_true_range * 100
|
|
|
|
# Calculate K, D, J
|
|
k = [rsv[n]]
|
|
d = []
|
|
j = []
|
|
for i in range(n+1, len(close)):
|
|
k.append((2*k[-1]+rsv[i])/3)
|
|
d.append((2*d[-1]+k[-1])/3)
|
|
j.append(3*k[-1]-2*d[-1])
|
|
|
|
return k, d, j
|
|
|
|
|
|
high = [...] # historical high prices
|
|
low = [...] # historical low prices
|
|
close = [...] # historical closing prices
|
|
n = 9 # period parameter for KDJ calculation
|
|
|
|
k, d, j = calculate_kdj(high, low, close, n)
|
|
print("K:", k)
|
|
print("D:", d)
|
|
print("J:", j)
|