Skip to content

Pennant population behavior — Baseline detection, 2007–2026

Read-only population-distribution analysis of every bull pennant the production detector emitted under Baseline parameters (pennant 5–15 bars, flagpole 1–10 bars, retrace ≤ 38.2 %, magnitude ≥ 12 %, ATR multiple ≥ 4×, volume ratio ≥ 1.5×, EMA-55 trend filter on). No backtest is performed, no strategy is proposed, and no detection runs were re-executed. Two independent categorizations are presented side-by-side: Part A applies a fixed 8-bucket hypothesis-driven schema; Part B lets unsupervised clustering choose its own partitioning.

Data sources: - Pennant/ab_test/baseline_events.parquet (15,534 detections) - Pennant/ab_test/baseline_outcomes.parquet (15,528 with outcomes; 6 dropped for no forward data) - Pennant/analysis/baseline_trajectories.parquet (15,528 anchor + 30-trading-day forward close trajectories pulled fresh from Postgres prices_daily) - Postgres tickers for sector mapping; market_context for the SPY-200SMA regime split.

All percentage returns are anchor-relative, computed as (close[i]/anchor_close − 1) × 100, mirroring uriel.outcomes.profiler._profile_one_event and the Phase 11a A/B harness.


1. Headline statistics

Metric Value
Total pennants in population 15,528
Date range 2007-02-15 → 2026-05-07
Unique tickers with ≥ 1 detection 2,413

MFE distribution

mean median P25 P75 P90 P95
MFE % 13.92 7.50 2.67 16.01 30.87 46.26

MAE distribution

mean median P25 P75 P10 P5
MAE % -9.54 -6.59 -13.64 -2.23 -23.21 -31.00

Hit rates — % of population reaching MFE ≥ threshold within 30d

≥ +5 % ≥ +10 % ≥ +15 % ≥ +20 % ≥ +30 % ≥ +50 %
61.5 % 40.5 % 27.0 % 18.9 % 10.5 % 4.3 %

Loss rates — % of population reaching MAE ≤ threshold within 30d

≤ -5 % ≤ -7 % ≤ -10 % ≤ -15 % ≤ -20 %
58.5 % 47.9 % 35.9 % 21.7 % 13.3 %

Days-to-MFE-peak

mean median P10 P25 P75 P90
15.7 16 2 5 26 30

Days-to-MAE-trough

mean median P10 P25 P75 P90
14.8 14 1 5 25 29

The MFE and MAE distributions are striking in their near-symmetry on every percentile: ~62 % of patterns reach a +5 % peak; ~59 % reach a -5 % trough. ~41 % reach +10 %; ~36 % reach -10 %. The median peak (+7.5 %) and the median trough (-6.6 %) are within a percentage point of each other. Time-to-peak / time-to-trough are both centered around day 14–16 with wide spread — the typical pennant is not a fast resolution event.

Charts: ../../charts/Pennant/pennant_population_mfe_distribution.png, ../../charts/Pennant/pennant_population_mae_distribution.png, ../../charts/Pennant/pennant_population_days_to_peak.png.


Part A — Hypothesis-driven categorization (9 buckets)

Schema

Buckets are matched in order; lowest-numbered match wins.

  1. Sharp pop-up: MFE ≥ 15 % within 10 days; MAE never reaches -7 %.
  2. Slow pop-up: MFE ≥ 15 % in days 11–30; MAE never reaches -7 %.
  3. Pop then drop: MFE ≥ 15 % first, then MAE reaches -10 % within window (mfe_day < mae_day).
  4. Drop then recover: MAE ≤ -10 % first, then MFE reaches +10 % (mae_day < mfe_day).
  5. Sharp drop: MAE ≤ -15 % within 10 days; MFE never reaches +10 %.
  6. Slow drop: MAE ≤ -10 % in days 11–30; MFE never reaches +10 %.
  7. Chop / sideways: neither MFE +10 % nor MAE -10 % reached in 30 days.
  8. Stop-out then recover: MAE ≤ -7 % first, then MFE reaches +10 % (mae_day < mfe_day).
  9. Modest mover (catch-all): anything not matching 1–8. Empirically composed of (a) MFE in [10 %, 15 %) with shallow MAE, and (b) MFE in [10 %, 15 %) with MAE ≤ -10 % where the temporal order didn't fit categories 3 or 8.

The 9th bucket was added during execution after the original 8 left 2,109 patterns (13.6 %) unmatched — a structural gap in the schema around modest-magnitude moves. El Don approved the addition over the three alternative remedies (loosen Chop, lower the pop-up MFE threshold, leave "Unmatched" as-is). With bucket 9 in place, every pennant is categorized.

A.1 — Headline distribution

Category Count % of pop Median MFE Median MAE Median days-to-resolution
1 Sharp pop-up 244 1.6 % +24.6 % -0.9 % 3
2 Slow pop-up 2,781 17.9 % +25.6 % -1.1 % 3
3 Pop then drop 365 2.4 % +21.2 % -20.0 % 8
4 Drop then recover 567 3.6 % +22.5 % -14.0 % 9
5 Sharp drop 192 1.2 % +1.3 % -21.8 % 3
6 Slow drop 3,934 25.3 % +1.5 % -17.5 % 3
7 Chop / sideways 4,901 31.6 % +4.9 % -4.8 % 8
8 Stop-out then recover 435 2.8 % +20.4 % -8.3 % 7
9 Modest mover (catch-all) 2,109 13.6 % +12.1 % -3.5 % 5

Pop-up family (1+2+9 winners portion): ~33 % of the population ends with a meaningful upside excursion. Of those, only 1.6 % are genuine sharp pop-ups (15 %+ within 10 days, no significant drawdown) — about 1 in 64.

Drop family (5+6+3): ~29 % see a meaningful downside excursion. 6 Slow drop alone is 25 % of the entire population — the single largest specific-pattern bucket. 3 Pop then drop (the worst case for any momentum strategy) is small at 2.4 %.

Chop (7): the largest bucket at 31.6 %. Pennants whose forward window resolves without either side reaching ±10 %.

Recovery patterns (4 + 8): combined ~6.5 %. These are patterns that hit a stop and bounced back — a strategy signal that "the trailing stop fired into a recovery".

A.2 — Magnitude histograms (up-categories)

For categories 1, 2, 4, and 8 (the up-resolving cohort), the distribution of realized MFE within each category:

Category n mean MFE P25 P50 P75 P95
1 Sharp pop-up 244 37.7 % 18.5 % 24.6 % 36.3 % 107.3 %
2 Slow pop-up 2,781 37.6 % 19.2 % 25.6 % 40.1 % 94.6 %
4 Drop then recover 567 36.0 % 15.0 % 22.5 % 37.9 % 107.3 %
8 Stop-out then recover 435 36.6 % 13.6 % 20.4 % 32.6 % 109.8 %

The four up-categories have median MFE in the 20–26 % range and nearly identical mean MFE (~36–38 %) — once a pennant has qualified as "up-resolving" by any path, the magnitude distribution of the win is similar regardless of which path it took. P95 tail values sit at ~95–110 % in all four up-categories.

A.3 — Magnitude histograms (down-categories)

For categories 3, 5, and 6 (down-resolving cohort), distribution of realized MAE:

Category n mean MAE P25 P50 P75 P5
3 Pop then drop 365 -23.6 % -28.7 % -20.0 % -14.3 % -50.3 %
5 Sharp drop 192 -24.4 % -28.8 % -21.8 % -17.3 % -43.4 %
6 Slow drop 3,934 -21.2 % -25.3 % -17.5 % -13.3 % -43.3 %

Downside categories have median MAE in the -17 to -22 % range. Sharp drops are deeper but rarer: median -21.8 % vs slow drops' -17.5 %. P5 tail values are clustered around -43 to -50 % across the three downside categories — meaningful but not as extreme as the upside P95 tail (~95–110 %).

A.4 — Timing histograms

Days-to-MFE-peak by up-category and days-to-MAE-trough by down-category:

Category Median day to extreme P25 P75
1 Sharp pop-up 8 (mfe_day) 6 9
2 Slow pop-up 26 (mfe_day) 20 29
4 Drop then recover 26 (mfe_day) 21 29
8 Stop-out then recover 27 (mfe_day) 21 29
3 Pop then drop 26 (mae_day) 21 29
5 Sharp drop 8 (mae_day) 5 9
6 Slow drop 25 (mae_day) 19 29

Categories 1 and 5 are definitionally fast (≤ 10 days); 2 and 6 are definitionally slow (11–30 days), and indeed median around day 25–26. The non-trivial finding is that within the "definition allows fast OR slow" categories 4 and 8, the actual time-to-peak skews late (median 26–27 days) — patterns that recover from an early stop-out tend to do so near the end of the window, not in the middle. The downside Category 3 (Pop then drop) has its trough median at day 26 as well — once the pennant has peaked positively, the eventual deeper drop tends to land near the window's end.

A.5 — Per-year breakdown

Counts of each category by year (see analysis/partA_a5.parquet for the full table):

Year Total Sharp pop Slow pop Pop→drop Drop→rec Sharp drop Slow drop Chop Stop→rec Modest
2007 400 1 84 6 9 2 103 132 10 53
2008 226 1 17 4 6 11 101 54 7 25
2009 702 14 153 20 58 10 141 160 40 106
2010 619 10 156 12 19 15 149 154 13 91
2011 471 8 65 7 12 6 146 148 16 63
2012 564 8 87 11 10 5 107 238 10 88
2013 875 13 187 4 18 8 136 349 27 133
2014 498 5 67 8 13 8 126 198 11 62
2015 533 5 57 13 7 6 147 222 8 68
2016 806 11 118 12 19 8 134 359 13 132
2017 871 6 153 14 26 4 152 347 24 145
2018 719 9 116 8 20 11 183 253 9 110
2019 748 7 94 9 5 9 178 329 10 107
2020 1,168 24 352 33 78 10 226 229 58 158
2021 1,336 25 248 43 54 16 329 413 43 165
2022 533 5 70 12 18 6 208 149 8 57
2023 1,024 12 154 34 30 10 356 277 31 120
2024 1,780 33 268 51 80 20 546 514 41 227
2025 1,232 32 282 56 68 17 314 269 40 154
2026 423 15 53 8 17 10 152 107 16 45

2020 stands out — the only year where Chop is not the largest or second-largest category. The vol regime drove patterns to resolve in one direction or the other rather than chop. 2024 is the busiest year by raw count (1,780 pennants), driven primarily by slow drops (546) — consistent with that year's choppy individual- ticker action despite the index uptrend.

Stacked-bar chart: ../../charts/Pennant/pennant_population_outcome_distribution_partA.png.


Part B — Data-driven categorization (k-means)

B.1 — Choice of k

K-means clustering on 5 features per pennant: MFE %, MAE %, days-to-MFE, days-to-MAE, endpoint return at 30 days. Features standardized to zero-mean / unit-variance. Each feature winsorized to its [1st, 99th] percentile before fitting, so a handful of penny-stock pops (MFE up to +1,795 %) don't form their own 2-element cluster. 84 events with truncated forward windows (endpoint_30d unavailable) excluded — k-means fit on n = 15,444.

Sweep k = 4, 5, 6, 7, 8. Within-cluster inertia and percentage improvement vs k-1:

k Inertia % improvement
4 24,694
5 21,511 12.9 %
6 19,177 10.9 %
7 17,081 10.9 %
8 15,478 9.4 %

After winsorization the elbow is shallow — every step from k = 4 onward yields roughly equivalent marginal inertia reduction (9.4–12.9 %). There is no decisive bend. Strict application of the "first step below 20 %" rule picks k = 4.

Manual override to k = 5, justified as follows. At k = 4, all positive-outcome patterns lump into a single "winners" cluster (centroid MFE +14 %, 46 % of population). At k = 5, that lump splits into: - Modest late-peaking winners (centroid MFE +10 %, MAE -5 %, peak late) — 37 % of population - Strong late-peaking winners (centroid MFE +34 %, MAE -3 %, peak late) — 12 % of population

And preserves the small "huge winners" cluster (centroid MFE +93 %, 2.8 %) intact. That tri-modal decomposition of the upside is the biggest interpretive lift in the range. k = 6 onward starts sub-dividing drop populations further, which adds little new narrative value. Choosing k = 5.

Elbow chart: ../../charts/Pennant/pennant_population_partB_elbow.png.

B.2 — Cluster summary

Cluster Count % MFE centroid MAE centroid mfe_day mae_day endpoint_30d Plain-English name
0 5,690 36.8 % +10.2 % -4.7 % 23.6 7.9 +6.0 % Late modest winners — early shallow dip, slow drift to a modest peak near day 24, ends slightly positive
1 1,841 11.9 % +4.3 % -31.2 % 4.4 23.9 -24.9 % Sharp early disasters — fast small peak day 4, then collapses, ends deeply negative
2 439 2.8 % +92.6 % -3.8 % 23.8 4.5 +67.6 % Huge winners — small early dip, explosive run to ~+93 %, ends near +68 %
3 1,887 12.2 % +34.0 % -2.7 % 24.5 4.5 +25.8 % Strong late winners — modest early dip, run to ~+34 %, ends near +26 %
4 5,587 36.2 % +5.5 % -10.0 % 7.9 23.3 -5.7 % Slow drifters — small early pop, slow grind down to ~-10 % trough, ends slightly negative

The clean tri-modal upside story is 2.8 % huge winners + 12.2 % strong winners + 36.8 % late modest winners = 51.8 % of patterns ending net positive. The downside is bimodal: 11.9 % sharp disasters + 36.2 % slow drifters = 48.1 % ending net negative. Endpoint-positive and endpoint-negative populations are within a percentage point of equal size — consistent with the MFE/MAE symmetry seen in Section 1.

B.3 — Magnitude and timing per cluster

Distribution of realized MFE/MAE within each cluster (from the underlying data, not just centroids):

Cluster MFE P25 MFE P75 MAE P25 MAE P75 mfe_day P25 mfe_day P75
0 Late modest winners 5.7 % 14.2 % -6.9 % -1.1 % 20 29
1 Sharp early disasters -0.8 % 6.0 % -37.1 % -23.9 % 1 6
2 Huge winners 74.7 % 134.8 % -7.3 % +1.8 % 20 29
3 Strong late winners 24.9 % 41.4 % -4.9 % +0.7 % 21 29
4 Slow drifters 1.1 % 7.4 % -14.2 % -5.9 % 3 12

The temporal signatures separate cleanly: clusters 0/2/3 peak late (P75 day 29), clusters 1/4 peak early (P75 day 6 and day 12 respectively). Cluster 1 (disasters) peaks at day 1–6 with a P75 MFE of only +6 %, then bleeds for the rest of the window. Note the MAE P75 values for clusters 2 and 3 are positive (+1.8 %, +0.7 %), meaning at least a quarter of patterns in those clusters never went below the anchor close at any forward day — pure uptrends.

B.4 — Per-year cluster distribution

Year Total 0 Late-mod 1 Sharp dis 2 Huge 3 Strong 4 Drifter
2007 400 156 35 5 58 146
2008 226 60 51 3 6 106
2009 702 303 80 31 109 179
2010 619 213 68 18 99 221
2011 471 182 51 8 37 193
2012 564 270 44 11 44 195
2013 875 426 38 12 132 267
2014 498 178 51 7 49 213
2015 533 188 53 5 39 248
2016 806 357 54 14 76 305
2017 871 386 52 20 105 308
2018 719 260 64 11 76 308
2019 748 336 77 15 47 273
2020 1,168 411 167 81 240 269
2021 1,336 496 176 60 172 432
2022 533 148 110 5 44 226
2023 1,024 329 191 13 111 380
2024 1,780 516 202 55 196 811
2025 1,232 371 225 59 217 360
2026 339 104 52 6 30 147

2008 and 2022 share a signature — disproportionate disaster share (51/226 = 23 %; 110/533 = 21 %), almost no huge winners (3 and 5 respectively). 2020 and 2009 share the opposite signature — heavy strong/huge winners as everything ripped off the crisis lows. 2024 is the modal year — slow drifters dominate (811/1,780 = 46 %).

Stacked-bar chart: ../../charts/Pennant/pennant_population_outcome_distribution_partB.png.


3. Time-to-reversal analysis

For each pennant we have the day of peak (mfe_day) and trough (mae_day) and the endpoint return at day 30. From these we compute two derived quantities:

  • Give-back from peak (for up-resolving patterns, MFE > 0): 100 × (mfe_pct − endpoint_30d) / mfe_pct. Zero means the endpoint = peak (no give-back); 100 means the endpoint = anchor (all of the move evaporated); > 100 means the endpoint went negative despite a positive peak. Values clipped to [0, 200] for the summary.
  • Recovery from trough (for down-resolving patterns, MAE < 0): 100 × (mae_pct − endpoint_30d) / mae_pct. Zero means the endpoint = trough (no recovery); 100 means the endpoint = anchor (full recovery); > 100 means the endpoint went positive despite a negative trough.

Note: this uses endpoint_30d as the post-peak/trough reference. A fully trajectory-based reversal-depth analysis would also need the minimum close after the peak (or maximum after the trough), but the endpoint version is the cleanest one-number summary for trailing-stop decisions.

3.1 — Up-resolving give-back

n = 13,950 patterns with MFE > 0.

Statistic Value
Mean give-back % 92.9
Median give-back % 68.4
P10 0.0
P25 17.8
P75 200 (capped)
P90 200 (capped)

The typical winner gives back ~68 % of its peak gain by day 30. P25 = 17.8 % means a quarter of winners retain at least 82 % of their peak; P75 capped at 200 means at least 25 % of winners end net negative despite hitting a positive peak (give-back > 100 %). The distribution is broad and heavy in the tails — pennants are not, on average, sustained-trend patterns.

3.2 — Down-resolving recovery

n = 13,838 patterns with MAE < 0.

Statistic Value
Mean recovery % 103.3
Median recovery % 88.4
P10 0.7
P25 23.1
P75 200 (capped)
P90 200 (capped)

The typical loser recovers ~88 % of its decline by day 30. Half of losers recover almost all of their trough; at least 25 % recover more than the trough (end net positive). The symmetry with §3.1 is striking and reinforces that the median pennant move in either direction is mostly noise that mean-reverts inside 30 trading days.

3.3 — Median trajectories by outcome cohort

For three cohorts (each pennant assigned to exactly one based on its realized MFE/MAE):

  • Top quartile of MFE (mfe_pct ≥ P75 = 16.0 %): n = 3,862
  • Bottom quartile of MAE (mae_pct ≤ P25 = -13.6 %): n = 3,861
  • Chop / sideways (mfe < 10 % and mae > -10 %): n = 4,858

For each cohort we compute the median of dN across the cohort for each forward day N = 1…30, producing a "typical shape" trajectory.

The median top-quartile trajectory rises monotonically and ends at +18.6 % at day 30. The median bottom-quartile trajectory falls monotonically and ends at -15.3 % at day 30. The chop median oscillates within a ±2 % band and ends at +0.6 %. The three cohort medians are nearly mirror images of each other on the time axis — once the pennant has "decided" which way to resolve, the median trajectory in that direction is smooth, and the endpoint gap between top-quartile and bottom-quartile cohorts is ~34 percentage points.

Chart: ../../charts/Pennant/pennant_population_trajectory_typical_shapes.png.


4. Frequency by sector and regime

4.1 — Sector breakdown

Sector n Mean MFE Mean MAE % hit +15 % hit +10 % hit -10
Healthcare 3,204 19.2 % -12.3 % 37.8 % 50.6 % 45.3 %
Technology 2,693 13.8 % -9.5 % 27.4 % 41.6 % 36.2 %
Industrials 2,538 11.7 % -8.7 % 21.9 % 35.7 % 33.0 %
Financial Services 2,067 9.7 % -8.7 % 19.0 % 32.4 % 33.7 %
Consumer Cyclical 1,916 13.0 % -8.3 % 24.0 % 37.5 % 31.4 %
Consumer Defensive 744 9.6 % -7.0 % 18.4 % 32.8 % 27.3 %
Energy 676 17.9 % -10.7 % 36.0 % 49.4 % 39.6 %
Basic Materials 672 17.2 % -10.1 % 29.5 % 41.2 % 39.1 %
Communication Services 589 12.4 % -8.3 % 27.8 % 44.8 % 29.7 %
Real Estate 327 11.7 % -7.1 % 24.5 % 33.3 % 23.2 %
Utilities 102 9.9 % -7.4 % 11.8 % 22.6 % 23.5 %

Healthcare is the most active sector by volume (3,204 pennants, 20.6 % of the population) and the highest-variance on both sides — mean MFE 19.2 % is the highest in the table, mean MAE -12.3 % is also the deepest. Energy and Basic Materials follow the same high-variance profile. Utilities are the opposite: smallest cohort, smallest mean MFE, smallest mean MAE. Heavier-tail sectors (Healthcare, Energy, Basic Materials) carry both the upside and downside risk; defensive sectors (Utilities, Consumer Defensive) produce calmer pennants.

4.2 — Regime split (SPY 200-SMA)

Regime n Mean MFE Median MFE Mean MAE Median MAE % hit +15 % hit -10
Bull (SPY > 200-SMA) 14,197 14.10 % 7.53 % -9.35 % -6.42 % 27.2 % 35.1 %
Bear (SPY < 200-SMA) 1,331 12.02 % 6.91 % -11.67 % -8.79 % 24.6 % 44.6 %

The bear-regime cohort is 8.6 % of the population — pennants are emitted less often when SPY is below its 200-SMA but are still common. Bear-regime pennants are slightly worse on every dimension but the differences are modest: -2 pp lower hit-rate at +15 %, +9.5 pp higher loss-rate at -10 %, and the median MAE is ~2.4 pp deeper. The mean MFE difference (-2 pp) is also small. The pennant detector's edge is not regime-stable in expectation, but the regime hit isn't catastrophic either — bear-regime pennants still have a ~25 % shot at +15 % MFE.

Chart: ../../charts/Pennant/pennant_population_regime_split.png.

4.3 — Cross-regime category distribution (Part A)

Category Bear regime Bull regime
1 Sharp pop-up 1.4 % 1.6 %
2 Slow pop-up 15.6 % 18.1 %
3 Pop then drop 2.3 % 2.4 %
4 Drop then recover 3.7 % 3.7 %
5 Sharp drop 2.0 % 1.2 %
6 Slow drop 32.0 % 24.7 %
7 Chop / sideways 26.6 % 32.0 %
8 Stop-out then recover 3.3 % 2.8 %
9 Modest mover 13.2 % 13.6 %

The biggest single regime delta is in Slow drop and Chop — in bear regimes, slow drops are 7.3 pp more common and chop is 5.4 pp less common. The bear regime pushes patterns toward resolution in the downside direction. The sharp-pop-up share is essentially unchanged (1.4 vs 1.6 %), and the strong-winner family (1+2+9) is about 2 pp lower in bear regimes. Compositionally, the bear regime trades chop for slow drops, but the rest of the distribution is stable.


5. Plain-English interpretation

The population is balanced and weakly noisy. Across 15,528 bull pennants over 19 years, the median forward 30-day peak is +7.5 % and the median trough is -6.6 %. The hit-rate curve and the loss-rate curve are within a percentage point of each other at every meaningful threshold. About a third of pennants chop sideways, about a third end the window net positive, about a third end net negative. From this aggregate alone, the unconditional pennant detector is producing a near-symmetric distribution of outcomes — the detector's edge, if any, has to come from either size-conditional selection (skew of the tails) or trade mechanics (asymmetric exit rules), not from the unconditional mean.

The biggest surprise is the give-back / recovery symmetry. The median winner retains only 32 % of its peak by day 30; the median loser recovers 88 % of its trough by day 30. Whichever side a pennant resolves to, the typical path is to retrace most of that move before the window ends. This has substantial implications for exit-rule design (which is out of scope for this report) but it also says something about the underlying pattern: pennants are not sustained-trend continuation patterns; they are bursts that often fade. Strategies that exit at or near the peak (rather than holding to day 30) are paying for a real phenomenon. Conversely, hard stops that get hit and then watch the position recover are also paying for a real phenomenon.

Two natural cohort decompositions converge on the same story. Part A's hypothesis-driven 9-bucket schema and Part B's data-driven 5-cluster partition produce different breakdowns but the underlying narrative is consistent: there is a small head of big winners (Part A: ~1.6 % Sharp pop-up + Part B: 2.8 % Huge winners + 12.2 % Strong winners), a large body of modest movers that mean-revert (Part A: ~32 % Chop + 13.6 % Modest mover + parts of Slow pop-up; Part B: 36.8 % Late modest winners + 36.2 % Slow drifters), and a left tail of disasters (Part A: ~3.6 % Sharp / Pop-then-drop / Sharp drop; Part B: 11.9 % Sharp early disasters). The data-driven view sees the disaster cohort as larger because it includes patterns the hypothesis schema would label as Slow drop; the hypothesis-driven view splits the disasters across categories 3, 5, and 6 by their trajectory shape rather than by their magnitude.

Regime sensitivity is modest, not stark. Bear-regime pennants are slightly worse on every dimension, but the slope is gentle — the +15 % hit-rate falls from 27.2 % (bull) to 24.6 % (bear); the -10 % loss-rate rises from 35.1 % to 44.6 %. The biggest categorical change is a 7.3 pp swing from Chop to Slow drop in bear regimes. This argues against a hard regime gate: blocking pennant entries when SPY < 200-SMA would skip roughly 9 % of the population in exchange for a small reduction in loss rate. (The Phase 7 study quantified this same effect at the level of a strategy and concluded the gate's value is in execution risk rather than close-to-close P&L; the population-level data here is consistent with that interpretation.)

The detector is sector-skewed but not fatally so. Healthcare alone is 21 % of the population and carries the highest variance on both sides. Technology, Industrials, and Financial Services together cover another 47 %. Utilities and Real Estate are small shares with the calmest distributions. Strategy designers will want to know that a Healthcare-heavy book carries materially higher tail risk on both sides than a Utility/Defensive book; sector-conditional sizing or selection is a research lever this report doesn't take a position on.


End of report. Companion artifacts in Pennant/analysis/: section1.json, partA_a1.parquet, partA_a5.parquet, partB_centroids.parquet, partB_elbow.parquet, section3_up.parquet, section3_dn.parquet, section3_medians.npz, section4_sector.parquet, section4_regime_split.parquet, section4_cross.parquet, df_with_categories.parquet. Reproducer scripts: analysis/01_pull_trajectories.py, analysis/02_analyze.py.