fix: handle RSI NaN when gain and loss are both zero - return neutral 50
This commit is contained in:
parent
774b1ed3d3
commit
78ad76876d
|
|
@ -60,9 +60,15 @@ class MomentumIndicator:
|
||||||
loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()
|
loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()
|
||||||
# Handle division by zero and NaN values
|
# Handle division by zero and NaN values
|
||||||
loss = loss.replace(0, np.nan)
|
loss = loss.replace(0, np.nan)
|
||||||
|
|
||||||
|
# When both gain and loss are zero (no price change), return neutral RSI of 50
|
||||||
|
# Otherwise compute RS and RSI
|
||||||
rs = gain / loss
|
rs = gain / loss
|
||||||
# When loss is 0 (no downtrends), RSI = 100
|
|
||||||
rsi = 100 - (100 / (1 + rs))
|
rsi = 100 - (100 / (1 + rs))
|
||||||
|
|
||||||
|
# Fill NaN values:
|
||||||
|
# - When loss was NaN (no downtrends), RSI should be 100
|
||||||
|
# - When gain and loss were both 0 (no price change), RSI should be 50
|
||||||
return rsi.fillna(100 if loss.isna().any() else 50)
|
return rsi.fillna(100 if loss.isna().any() else 50)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue