MOEasymmetry← All articles
Falsification · 2026-06-13 · 4 min read

We Tried to Make the Method Smarter. ATR Didn't Help.

Track. Study. Wait. Strike.
English อ่านภาษาไทย (Thai)

The contracting-base breakout method uses a simple rule: the stock must make a higher low before the breakout. That's the structural contraction gate.

A reasonable question: would adding ATR — Average True Range, a measure of daily volatility — make the filter smarter? Tighter ATR before the breakout should mean the base is quieter, which should mean fewer false breakouts.

We tested it three ways on Thai and US data. The answer was no.

What we tested

Test 1: ATR-contraction filter

Split RS≥80 + Confirmed Uptrend breakout trades into buckets by how much ATR contracted during the base:

ATR at breakout vs base startMedian net RWin rate
Strong contraction (<0.70×)0.33537%
Moderate contraction (0.70–0.90×)0.31440%
Flat (0.90–1.10×)0.24442%
Expanding (>1.10×)0.44240%

The CIs between the contracting (<0.90) and flat/expanding (≥0.90) buckets overlap completely. No real difference. The expanding bucket even shows the highest net R.

Why: The higher-low detector already requires the swing lows to contract. ATR contraction is already embedded structurally. Adding an explicit ATR gate is redundant — it screens for something the method already screens for.

Test 2: ATR-based stop vs structural stop

Compare the current structural stop (higher low or 7% hard cap) against an ATR-based stop (entry minus 2.5×ATR):

Structural stopATR stop
RS≥800.237 net R0.236 net R
RS≥80 + Confirmed Uptrend0.350 net R0.352 net R

Dead heat in both conditions. The structural stop already approximates a volatility-adaptive stop. There is no reason to switch.

Test 3: ATR level as a filter

Does trading only high-volatility names (high ATR) or only low-volatility names improve results?

Thai (RS≥80 + CU):
---------------------------
Low-vol (<3%)0.27642%
Mid-vol (3–5%)0.33641%
High-vol (>5%)0.66129%

The high-vol Thai names show the highest net R — but the win rate drops to 29%. This is a fat right-tail signature: rare big wins dragging the mean up while most trades stop out. Not a clean filter. n=66 for the high-vol bucket — too thin to act on.

The cross-market reversal

The more interesting finding came from running the same test on US data.

US (RS≥80 + CU):
------------------
Low-vol (<3%)0.157
Mid-vol (3–5%)0.091
High-vol (>5%)0.063

US completely reverses Thai. In the US, stable low-volatility leaders carry the edge. In Thailand, volatile momentum names carry the fat right tail.

This is consistent with a broader pattern: US markets are more efficient, so quiet institutional accumulation before a breakout (low ATR = tight base = institutions absorbing) is the real signal. Thai markets have more retail participation and thinner liquidity, so the edge lives in the names that make sudden explosive moves — higher underlying volatility.

This reversal is a genuine cross-market insight. But it is an observation about market character, not a tradeable filter. The sample sizes by ATR bucket are too small to rely on, and the effect reverses by market — making it impossible to apply universally.

The verdict

ATR does not improve the contracting-base breakout method in either market: - Contraction filter: already captured structurally by the higher-low detector - ATR stop: equivalent to the structural stop - ATR level: reverses by market, sample too small for production use

The method stays simple: higher-low structural contraction, structural stop, RS≥80 + regime gate. Adding ATR = complexity without payoff.

Per the focus principle: a few rules tested thoroughly beat many rules stacked loosely. If a tool doesn't add signal that isn't already there, leave it out.

What this means for the scanner

Nothing changes in production. The current scan_contracting_breakouts.py uses: - Higher-low structural detection - Entry − (higher low) as the base stop - 7% hard cap as the ceiling

No ATR layer. The test confirmed that's correct.


For a broader look at three filters that failed the same type of rigorous testing — including ATR-based sizing, volume dry-up, and filter stacking — see [Three Filters That Looked Smart and Failed Testing](/articles/three-filters-that-failed.html).

Backtest: Thai market 1990–2026 + US market 2005–2026, RS≥80 + Confirmed Uptrend filter. Structural stop = higher low in the base or hard cap at 7%, whichever is tighter. n per ATR bucket varies (Thai high-vol n=66, US high-vol n=88). Completed 2026-06-09.

Get new research by email
Tested across decades. Failures published. Real money.
Subscribe — free
📊 See the live dashboards, the breakout scanner, and the real track record at the MOEasymmetry hub — research, not advice.
← Previous
How I Objectively Choose Between Competing Trading Systems
งานวิจัยและบันทึกการเทรดส่วนบุคคล ไม่ใช่คำแนะนำการลงทุน · Personal research & trading journal — not investment advice. The author does not provide licensed advisory services.
Home · Articles · Methodology · Track record