Rejected thesis
Cross-pattern survey: classical chart patterns
Thesis (mostly rejected): pennants, flags, head-and-shoulders, cup-and-handle, double bottoms/tops — the patterns every TA book opens with — produce a meaningful directional edge on a clean event-study run with same-name matched controls.
Code: research/flag_pennant.py, research/head_shoulders.py,
research/head_shoulders_refine.py, research/cup_handle.py,
research/double_bottom_top.py
Reports: corresponding *_report.json files
| Pattern (unconditional) | n | 20d edge | 40d edge |
|---|---|---|---|
| bull_flag | 1,332 | +0.86 % | +1.76 % |
| bull_pennant | 122 | -0.40 % | -0.87 % |
| bear_flag (textbook bearish!) | 426 | +1.82 % | +1.87 % |
| bear_pennant | 50 | -2.10 % | -4.98 % |
| hs_top (textbook bearish) | 4,763 | -1.03 % | -1.05 % |
| inv_hs | 5,487 | +0.21 % | -0.34 % |
| cup_handle | 13,124 | -0.31 % | -0.77 % |
| double_bottom | 15,269 | -0.23 % | -0.62 % |
| double_top | 15,847 | -0.10 % | +0.04 % |
Two patterns show real, if small, edge: bull_flag weakly positive, bear_flag positively signed (contrarian — a textbook bearish pattern is actually a long signal). The bear-flag result lines up with the much stronger contrarian finding in MA-cross / drawdown-bounce (see below): a stock that has been selling enough to form a bearish chart pattern is oversold, not on its way down further. Bull pennant and bear pennant samples are too small to read.
H&S top — sub-cohort with real edge: when filtered to OOS-2020+ with high head-prominence and tight shoulder symmetry, edge widens to roughly -2 % to -2.5 % over 10-20 days (n ≈ 362). The directionally correct signal is real but the magnitude is below what we'd productize alone.
Verdict on the family: Nearly all classical chart patterns are
noise after frictions. The only useful artefacts:
- Bear flag's contrarian edge → confirms the drawdown-bounce
thesis (see Working signal section).
- Bull flag's weak positive edge → live with the existing
coil-breakout cohort which has the same shape and bigger n.
| Validator | research/flag_pennant.py |
|---|---|
| Verdict | Rejected |
Every result here is reproducible from the script named above. Reports are in the repository.
- Volatility squeeze
- Pre-FOMC drift
- Uptrend pullback
- Momentum continuation
- Industry-relative momentum (at 4-week lookback)
- Earnings-reaction reversal (anti-PEAD)
- Beat-persistence pre-earnings drift
- Sector ETF mean-reversion
- 52-week-high breakout
- Volume accumulation (above-200DMA +...
- Cross-sector momentum
- Analyst-upgrade cluster