This commit is contained in:
2026-04-20 21:29:22 +02:00
parent 53dd49612d
commit 89fc0119f3
25 changed files with 3744 additions and 134 deletions
+43
View File
@@ -0,0 +1,43 @@
package indicators
// RSI calcule le Relative Strength Index (Wilder's smoothing, période 14).
// Retourne NaN si pas assez de données.
func RSI(closes []float64, period int) float64 {
if period <= 0 {
period = 14
}
if len(closes) < period+1 {
return -1
}
var gains, losses float64
for i := 1; i <= period; i++ {
delta := closes[i] - closes[i-1]
if delta > 0 {
gains += delta
} else {
losses -= delta
}
}
avgGain := gains / float64(period)
avgLoss := losses / float64(period)
// Wilder's smoothing pour le reste
for i := period + 1; i < len(closes); i++ {
delta := closes[i] - closes[i-1]
if delta > 0 {
avgGain = (avgGain*float64(period-1) + delta) / float64(period)
avgLoss = (avgLoss * float64(period-1)) / float64(period)
} else {
avgGain = (avgGain * float64(period-1)) / float64(period)
avgLoss = (avgLoss*float64(period-1) - delta) / float64(period)
}
}
if avgLoss == 0 {
return 100
}
rs := avgGain / avgLoss
return 100 - (100 / (1 + rs))
}