Files
chan.py/Math/KDJ.py
T
2025-06-10 01:16:09 +08:00

35 lines
924 B
Python

class KDJ_Item:
def __init__(self, k, d, j):
self.k = k
self.d = d
self.j = j
class KDJ:
def __init__(self, period: int = 9):
super(KDJ, self).__init__()
self.arr = []
self.period = period
self.pre_kdj = KDJ_Item(50, 50, 50)
def add(self, high, low, close) -> KDJ_Item:
self.arr.append({
'high': high,
'low': low,
})
if len(self.arr) > self.period:
self.arr.pop(0)
hn = max([x['high'] for x in self.arr])
ln = min([x['low'] for x in self.arr])
cn = close
rsv = 100 * (cn - ln) / (hn - ln) if hn != ln else 0.0
cur_k = 2 / 3 * self.pre_kdj.k + 1 / 3 * rsv
cur_d = 2 / 3 * self.pre_kdj.d + 1 / 3 * cur_k
cur_j = 3 * cur_k - 2 * cur_d
cur_kdj = KDJ_Item(cur_k, cur_d, cur_j)
self.pre_kdj = cur_kdj
return cur_kdj