Most Thai investors who read William O'Neil know the acronym. Almost none have tested whether each letter actually works on SET data. That gap — between knowing CANSLIM and verifying CANSLIM — is where MOEasymmetry's system was built.
What Each Letter Means
CANSLIM is a seven-factor framework William O'Neil developed from studying every major winning stock in US markets from 1880 to the early 2000s. IBD (Investor's Business Daily) codified and published it. The letters:
C — Current Earnings. Quarterly EPS growth ≥25% year-over-year, ideally accelerating. One bad quarter disqualifies.
A — Annual Earnings. Three or more years of consistent annual EPS growth ≥25%. Avoids one-hit quarters.
N — New. New product, new management, new industry condition, or new price high. Something that changes the growth trajectory.
S — Supply and Demand. Fewer shares outstanding is better. Heavy buying by institutional investors on increasing volume confirms accumulation.
L — Leader or Laggard. Buy leading stocks in leading sectors. Avoid laggards. Operationalized as RS Rating ≥80.
I — Institutional Sponsorship. The major price moves in any stock require fund money. You want institutions buying, not exiting.
M — Market Condition. IBD's research showed that 3 in 4 stocks follow the overall market direction. Buying breakouts in a declining market fails at a predictable rate.
The Two Letters That Matter Most
Six of the seven letters are stock-specific. M is the only market-level filter, and it's the one that controls whether the other six matter at all.
In a market under distribution — IBD defines this as multiple distribution days (high-volume index declines) within a short window — the base rate for breakouts failing is high enough that no stock-level filter reliably overcomes it. The market tide is stronger than stock selection. O'Neil himself said the M was the most important factor.
Our implementation tracks distribution-day logic adapted from IBD's method: we count sessions where the SET Composite closes lower on volume above the prior day, then monitor the accumulation of those signals over a rolling 25-session window. When distribution count crosses the threshold, market condition flips to "under pressure" or "correction" — and breakout signals are suspended regardless of how strong the individual stock looks.
The data on M: In our 36-year Thai walk-forward test (1990–2026), breakout signals in market uptrend phases produced a median net result in positive territory. The same signals in market correction phases produced negative expectancy. The regime gate is not a preference — it's the output of testing the same signals in two different market contexts and observing that the distribution of outcomes reversed.
L — Leader vs. Laggard — is the second most important filter and the most operationally concrete. The RS Rating percentile score answers one question: compared to every other stock in the market over the past 12 months, how has this stock performed? Stocks ranked above the 80th percentile have demonstrated price leadership before the entry signal fires.
The data on L: In our Thai backtest, splitting breakout entries by RS Rating at time of entry:
| 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% |
The step-change from below 80 to above 80 is not incremental. Stop rate drops 13 percentage points. The system uses RS ≥80 as a hard gate — a non-negotiable pre-condition, not a preference — because the data supports treating it that way.
The RS Line adds a second dimension: not just the percentile score but the slope. An RS Line sloping upward at the time of entry means the stock is actively accelerating relative to the index, not just coasting on past performance. Our entry filter requires RS Line slope >0 in addition to RS Rating ≥80. This combination — the rating plus the slope — passed bootstrap walk-forward cross-validation with a +1.09 percentage point edge at the 30-day horizon.
How MOEasymmetry Adapted CANSLIM for SET/MAI
IBD built CANSLIM from US market data. The Thai market has different structural properties: lower average daily liquidity, a retail-dominated order flow, different sector compositions, and a shorter institutional history. Some IBD findings translate. Some do not.
What's validated and kept:
- M (market condition gate) — validated. Regime-gated signals outperform ungated signals across all 36 years of Thai data.
- L (RS ≥80 + RS Line slope >0) — validated as hard gates with walk-forward confirmation.
- S (volume confirmation at breakout) — validated. Volume ≥1.5× 50-day average at breakout on US data, ≥1.2× on Thai data (lower baseline volume requires adjustment).
- Base structure (contracting price ranges before breakout) — validated across TypeA, TypeB, and TypeC pattern classification on Thai data.
What's adapted:
- C and A (earnings acceleration) — useful as a direction indicator but Thai earnings data is less clean and less frequently updated than US data. Earnings acceleration is a qualitative supporting factor in our system, not a hard gate.
- I (institutional sponsorship) — Thai fund flow data exists but is thinner and less granular than US institutional 13F filings. We use volume pattern as a proxy for accumulation rather than direct fund-flow counting.
- N (new catalyst) — retained qualitatively. We track the "character change" signal (a documented behavioral shift in price/volume that often precedes major moves) as the Thai equivalent. Thai character change combined with market uptrend has a validated confidence interval of [+1.25, +2.95, +4.21] percentage points at median — a real signal that reverses in regime DOWN.
What's been tested and falsified:
The Cup With Handle (CWH) pattern is one of O'Neil's most cited formations. We ran it on Thai data: n=64 trades, result −0.25R average, 51.6% stop rate. It did not produce a positive edge on SET data in our test. TypeD (CWH) has been removed from the active scanner. Even within an IBD-derived framework, each specific pattern requires testing on the actual market before being treated as an edge.
The surviving core of the Thai adaptation: M + L. Every other filter is layered on top of that base, not the other way around.
What This Framework Cannot Do
CANSLIM is not a checklist that guarantees entry quality. Running through all seven letters and checking boxes does not produce a trade signal.
It is a framework for narrowing the candidate pool before a human reads the chart. The scanner applies M (regime gate) and L (RS ≥80 + RS Line slope) as hard filters. What passes those gates enters a watchlist. A human then reads the chart: is the base clean? Is volume confirming or ambiguous? Is the stop placement logical? Is the risk-reward ratio acceptable?
Scanners are generous candidate-finders. Chart reading is the final filter. No algorithm produces a reliable entry without the chart read, because the chart captures qualitative risk information — the quality of the base, the behavior of sellers at resistance, the shape of the pullback — that quantitative criteria cannot fully encode.
CANSLIM is also not a signal service. It does not tell you when to buy a specific stock today. It tells you what class of stocks has historically outperformed and under what market conditions that outperformance is likely to hold. The system narrows the universe. Judgment determines the trade.
The practical result: on any given day, approximately 160–180 Thai stocks pass RS ≥80. Of those, the regime gate reduces the actionable pool to zero during corrections. In confirmed uptrend, pattern filtering and volume conditions narrow the list to 5–15 candidates. A human reviews those 5–15. 1–3 become actual watchlist entries with defined entries and stops.
That is what a framework does. It does not replace the work. It structures it.
Related: [RS Rating Explained](/articles/rs-rating-explained.html) | [Market Condition: The M in CANSLIM](/articles/market-condition-ibd-thai.html)