Rejected thesis
Gap-pattern survey (breakaway / runaway / exhaustion / island)
Thesis (mixed): Edwards & Magee classified opening gaps by where they sit in the trend — breakaway (after consolidation), runaway (mid-trend continuation), exhaustion (end of trend, reversal), island (gap + opposite gap = reversal). Each is supposed to imply a specific forward direction.
Code: research/gap_patterns.py, research/gap_island_combo.py
Reports: research/gap_patterns_report.json,
research/gap_island_combo_report.json
Headline (unconditional): All eight gap variants show small edges in the 0.1 - 3 % range over 5-40d. The bullish gaps (breakaway_up, runaway_up, exhaustion_up, island_down_reversal) are roughly flat; the bearish gaps systematically have positive 20-40d edges — i.e., textbook bearish gaps are contrarian long signals at the daily resolution, same family as bear flag / death cross.
| Pattern (unconditional) | n | 20d edge | 40d edge |
|---|---|---|---|
| breakaway_up | 15,074 | +0.63 % | +0.32 % |
| breakaway_down (bear) | 14,943 | +0.72 % | +1.02 % |
| runaway_up | 3,147 | -0.24 % | +0.65 % |
| runaway_down (bear) | 3,275 | +1.80 % | +2.82 % |
| exhaustion_up | 1,899 | -0.06 % | +1.38 % |
| exhaustion_down (bear) | 2,129 | +0.63 % | +2.59 % |
| island_up_reversal | 4,689 | +1.23 % | +2.41 % |
| island_down_reversal | 5,907 | +1.15 % | +3.08 % |
Why most fail: At the unconditional level the gap by itself isn't big enough to time the reversal — only ~1-3 % edge. After options friction these compress to ~0.
Conditioning on drawdown ≤ -30 % + OOS 2020+ (gap_island_combo.py)
amplifies every bearish-gap variant substantially:
| Pattern × dd ≤ -30 % × OOS 2020+ | n | 40d edge |
|---|---|---|
| runaway_down | 876 | +7.3 % |
| exhaustion_down | 1,060 | +5.6 % |
| island_down_reversal | 2,255 | +5.4 % |
| breakaway_down | 1,548 | +4.2 % |
Verdict on the gap family: - Unconditional: skip. - Bearish gaps conditioned on dd ≤ -30 %: real edge, same capitulation-bounce family as death-cross / drawdown-bounce. Worth productizing as additional timing triggers for the broader drawdown-bounce cohort (multiple triggers → higher conviction when several fire near simultaneously).
| Validator | research/gap_patterns.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