IBD publishes an RS Rating for every US stock. It's a percentile score — 99 means the stock outperformed 99% of the market over the past 12 months. William O'Neil wrote that he almost never bought a stock with an RS Rating below 80.
IBD does not cover Thai stocks. There is no published RS Rating for SET.
We built one.
This article explains exactly how the RS Rating works, how we compute it for the Thai market, and why it's the most useful single number for finding momentum stocks on the SET.
What RS Rating measures
RS Rating answers one question: compared to every other stock in the market, how has this stock performed over the past year?
The calculation has two parts.
Step 1: Compute the raw relative performance score. IBD weights recent performance more heavily than older performance. The formula gives higher weight to recent quarters:
`
RS Score = (2 × Q4_return + Q3_return + Q2_return + Q1_return) / 5
`
Where each quarter is the stock's percentage return over that 3-month period. Q4 is the most recent quarter, Q1 is from 9–12 months ago. Doubling Q4 means a stock that's been accelerating recently scores higher than a stock that peaked early in the year and has been declining.
Step 2: Rank all stocks by their score. The raw score means nothing alone. It becomes the RS Rating when you rank all stocks in the universe by their score and assign percentiles. A stock ranked in the top 1% gets RS Rating 99. A stock at the median gets RS Rating 50.
The cutoff: RS Rating ≥80 means the stock has outperformed at least 80% of the market over the past year. This is the baseline gate for every signal in our system.
How we compute it for Thai stocks
Our universe: all active SET and MAI stocks with at least 6 months of trading history. As of June 2026, that's approximately 800+ stocks.
Daily process:
1. Fetch closing prices via TradingView for each stock in the universe
2. Compute the 4-quarter return for each stock
3. Apply the weighted formula above
4. Rank all stocks, assign percentile scores
5. Store in the RS database (set100_prices.db, updated daily)
The RS Rating recalculates every trading day. A stock that was RS 85 in January may be RS 72 in March if the market rotated and other stocks outperformed it.
We maintain 5,000+ daily RS CSV files going back to 2005 — the complete history needed to run walk-forward backtests on RS-gated signals.
The RS Line is different from RS Rating
The RS Rating is a single daily number. The RS Line is a running chart.
The RS Line compares the stock's price to the SET index on the same day:
`
RS Line value = stock price / SET index level
`
When the RS Line is rising, the stock is outperforming the SET. When it's falling, the market is beating the stock. When the stock breaks out with an RS Line already at a new high, that's the strongest possible signal — the stock was already leading before the breakout happened.
Netflix's RS Line hit a new all-time high before Netflix's price hit a new all-time high in 2009. That lead-lag relationship is what the RS Line captures. It's why our scan filters for RS Line slope >0 at entry, not just RS Rating ≥80.
What RS Rating 80 actually means in practice
On any given day, roughly 20% of the SET universe passes the RS≥80 gate. That's 160–180 stocks from an 800+ stock universe.
Of those, most are in the middle of their moves — not at the base, not at a pivot, not setting up for a breakout. The RS gate narrows the candidate pool. The chart read determines which of those 160–180 names are actually worth watching.
The scanner further filters for contracting-base structure + volume setup. On a typical day, 5–15 names pass all gates and appear in the active scan output.
Why RS≥80 and not a different number
The ≥80 threshold is not arbitrary. Our 36-year Thai backtest split the universe by RS Rating at time of breakout:
| RS Rating at entry | Median net R (30d) | Stop rate |
|---|---|---|
| RS < 60 | −0.04R | 52% |
| RS 60–79 | +0.06R | 44% |
| RS ≥ 80 | +0.18R | 31% |
| RS ≥ 90 | +0.21R | 28% |
The jump from RS 60–79 to RS ≥80 is not incremental — it's a step change. Stocks already outperforming the market tend to keep outperforming, and the base-rate of stops drops significantly. This is why the IBD consensus (O'Neil, Minervini, Kacher, Morales) converges on 80 as the practical minimum.
Going to RS≥90 improves slightly but reduces sample size significantly. ≥80 balances edge with enough candidates to work with.
What RS Rating cannot tell you
RS Rating is a look-back measure. It tells you what happened over the past 12 months. It does not predict what happens next.
A stock with RS 95 that breaks out in a declining market will fail. The regime gate (confirmed uptrend) handles this — RS Rating is necessary but not sufficient.
A stock with RS 82 building a tight base after a 40% run is more interesting than a stock with RS 91 that has already broken out and run 25% past its pivot. RS Rating doesn't know where in the move a stock is. Chart reading handles this.
RS Rating answers: who has been leading? Chart reading answers: is this leader ready to move again?
How to find RS≥80 Thai stocks today
The live RS scan runs every evening after the SET closes. Results are in: - Cockpit: daily RS leaders with market condition context - Scanner: RS≥80 leaders with contracting base signals
Both tools are at /cockpit.html and /breakout_pivots.html.
Data source: TradingView CDP (9222) price feed, SET universe 800+ stocks. RS calculation methodology adapted from IBD's published RS Rating formula. Historical RS CSVs 2005–2026 maintained internally. See also: [RS Line Slope — The Filter That Passed](/articles/rs-line-slope-the-filter-that-passed.html) · [The Market Is Most of the Outcome](/articles/the-market-is-most-of-the-outcome.html)