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)