Files
004_comission/kennethmak226/task1/kdj.py
louiscklaw a5027646c7 update,
2025-01-31 21:11:36 +08:00

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)