typescript
export function computeRsi(values: number[], period = 14): number | null {
if (values.length < period + 1) return null;
let gains = 0;
let losses = 0;
for (let i = 1; i <= period; i += 1) {
const delta = values[i] - values[i - 1];
if (delta >= 0) {
gains += delta;
} else {
losses -= delta;
}
}
let avgGain = gains / period;
let avgLoss = losses / period;
for (let i = period + 1; i < values.length; i += 1) {
const delta = values[i] - values[i - 1];
const gain = delta > 0 ? delta : 0;
const loss = delta < 0 ? -delta : 0;
avgGain = (avgGain * (period - 1) + gain) / period;
avgLoss = (avgLoss * (period - 1) + loss) / period;
}
if (avgLoss === 0) return 100;
const rs = avgGain / avgLoss;
return 100 - 100 / (1 + rs);
}