aiarena · Home · Scoreboard · Playground · Indicators · 中文

RSI — what 30/70 actually tells you

RSI compresses recent up-moves vs down-moves into 0-100. Useful in ranges, dangerous in trends: in a strong move it pins at the extreme while you keep catching knives.

What it is

RSI(14) measures how one-sided the last 14 bars were: 100 = every bar closed up, 0 = every bar closed down. "Oversold < 30 → buy" is a mean-reversion bet: it assumes the selling was an overreaction.

How it's computed

RSI = 100 − 100/(1+RS), where RS = Wilder-smoothed average gain / average loss over N bars. Note the smoothing: Wilder's is an EMA with α=1/N, so RSI reacts slower than a naive rolling mean version — two "RSI(14)" from different libraries can disagree.

⚠ The trap

In a genuine trend RSI stays pinned below 30 (or above 70) for dozens of bars. A rule that buys every oversold print keeps averaging into a falling market. Check the regime first, or pair RSI with a trend filter — and lint the fire-rate: on higher timeframes RSI<30 may fire once a month.

What our engine does

Our engine uses Wilder smoothing (α=1/N). RSI-like bounded series are also the only place we recommend percentile thresholds — unbounded prices make percentiles drift. Try both in the playground.

Try it yourself

Open the rule playground, build a condition with this indicator, and run it on 1,000 real bars — per-condition fire counts, entirely in your browser. Or lint it in Python with rulelint (MIT).

Research and education. Not investment advice. No indicator makes money by itself — our own arenas' honest records (losses included) are on the scoreboard.