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

30 lines
1.1 KiB
Python

class RSI:
def __init__(self, period: int = 14):
super(RSI, self).__init__()
self.close_arr = []
self.period = period
self.diff = []
self.up = []
self.down = []
def add(self, close):
self.close_arr.append(close)
if len(self.close_arr) == 1:
return 50.0
self.diff.append(self.close_arr[-1] - self.close_arr[-2])
if len(self.diff) < self.period:
self.up.append(sum(x for x in self.diff if x > 0)/self.period)
self.down.append(sum(-x for x in self.diff if x < 0)/self.period)
else:
if self.diff[-1] > 0:
upval = self.diff[-1]
downval = 0.0
else:
upval = 0.0
downval = -self.diff[-1]
self.up.append((self.up[-1] * (self.period - 1) + upval) / self.period)
self.down.append((self.down[-1] * (self.period - 1) + downval) / self.period)
rs = self.up[-1] / self.down[-1] if self.down[-1] != 0 else 0
rsi = 100.0 - 100.0 / (1.0 + rs)
return rsi