Atlas
Every exhibit the math has drawn, in one place. Each picture below is computed from the corpus — canonical days averaged from hundreds of real sessions, recurring shapes mined from years of tape, physics numbers measured over 180,000+ labeled sessions — never sketched by hand. Everything describes finished history; nothing forecasts. The full story of how each one is built lives in Shape Math.
The canonical days
The archetype of each vetted pattern family — the one curve whose warped distance to every dominant member is smallest, event-aligned so the defining moment survives the averaging. The caption on each card states the whole funnel: how many days carried the tag, how many were genuinely dominated by the pattern, how many the canon averages.
The shapes the market keeps drawing
Matrix-profile motifs: for six tickers, the two-hour windows closer to each other than anything else in years of tape, with measured occurrence counts — and the discords, the stretches whose nearest neighbor is farthest: the weirdest tape in the archive.
The snippet that gives the day away
Learned shapelets: for each day type, the short stretch of tape that best splits that type from everything else — found by information gain, judged on held-out sessions against shuffled-label chance. The receipts on each card are out-of-sample; where a type is marked by NOT printing the snippet, the card says so.
Every gain above beats its shuffled-label ceiling — the signals are real — but they are small against the 0.81-bit maximum a perfect separator would score: one snippet tells you a little about a day type, never the whole story. The honest reading of the pair of trend-day cards: a trend day is largely defined by the two-sided coil it refuses to print.
The confusable pairs
The sharper question: what separates the day types a trader actually mixes up — trend day or trend-from-the-open, range or trending range. Sessions restricted to the two types, candidates harvested from both sides, same out-of-sample discipline.
These are the discriminations a trader actually argues about — trend day or trend-from-the-open, range or trending range. All four separators are real out of sample but small (0.03–0.05 of the 1-bit ceiling): the confusable pairs are confusable for a reason. A consistent quirk worth knowing: every winning snippet prints MORE on the milder type — the sharper day is again marked by what it does not draw.
The order of events
Path-signature fingerprints: order-aware coordinates — was the day front- or back-loaded, did churn build before the move or chase it — that a correlation cannot see. Reverse a day and every sign flips.
| day type | sessions | net move (med, day-sigmas) | front-loading (med, IQR) | churn-first (med, IQR) | volume-first (med) |
|---|---|---|---|---|---|
| TD+ bull trend day | 1,124 | 3.40 | 0.34 (-0.1–0.8) | -0.40 (-2.0–1.1) | -1.46 |
| TD- bear trend day | 823 | -3.39 | 0.14 (-0.5–0.7) | -0.31 (-1.9–1.5) | -1.33 |
| TFO+ bull trend-from-the-open | 650 | 2.25 | 0.69 (-0.0–1.2) | -1.71 (-3.8–1.0) | -2.28 |
| TFO- bear trend-from-the-open | 604 | -2.20 | 0.72 (0.1–1.3) | -2.41 (-4.4–0.1) | -2.92 |
| TR trading range day | 753 | -0.19 | 0.51 (-0.1–1.1) | -1.79 (-3.6–0.1) | -1.94 |
| TTR+ bull trending trading range | 563 | 1.29 | -0.55 (-1.1–0.3) | 2.56 (-0.4–4.5) | 2.21 |
| TTR- bear trending trading range | 515 | -1.14 | -0.45 (-1.1–0.9) | 1.57 (-3.3–3.9) | 1.19 |
Level-2 path-signature coordinates (Lévy areas) over 5,032 labeled sessions (SPY/QQQ/IWM), oriented per session by the day’s own direction. Front-loading > 0 means the day’s move came early; churn-first > 0 means two-sided churn built up before the move, < 0 means price ran ahead of the churn. The clean read: trend-from-the-open days are the most front-loaded and their price leads the churn; trending trading ranges are their mirror image — back-loaded, churn first, the trend leg emerging from the range. These are order-aware numbers a correlation cannot see — reversing a day flips the sign. TR rows are oriented by a near-zero net move — read their magnitudes, not their signs. All of it describes finished sessions; none of it forecasts.
How many regimes a day runs through
Bayesian online change-point detection: at every bar, the calibrated probability that the tape just changed character — no hindsight. The census below counts how many return-regimes each day type actually runs through, on returns deflated by the everyday loudness curve.
| day type | sessions | one regime all day | one break | two or more | median first break |
|---|---|---|---|---|---|
| TD+ bull trend day | 1,124 | 72% | 25% | 4% | 13:15 ET |
| TD- bear trend day | 823 | 65% | 33% | 2% | 13:30 ET |
| TFO+ bull trend-from-the-open | 650 | 72% | 25% | 3% | 13:25 ET |
| TFO- bear trend-from-the-open | 604 | 70% | 28% | 2% | 12:55 ET |
| TR trading range day | 753 | 61% | 35% | 4% | 13:20 ET |
| TTR+ bull trending trading range | 563 | 64% | 30% | 6% | 13:20 ET |
| TTR- bear trending trading range | 515 | 58% | 37% | 5% | 13:30 ET |
Bayesian online change-point detection over 5,032 labeled sessions (SPY/QQQ/IWM), on returns deflated by the time-of-day loudness curve (the open prints ~2.2× the bar-to-bar movement of the 14:00 lull) — without that deflation the detector rediscovers the close’s volatility ramp every single day and calls it a regime. The gradient that remains is the day types’ own: trend days mostly hold one return-regime all session; trending ranges break the most. Two honest caveats. Early breaks are structurally harder to detect than mid-session ones (the posterior needs tape to establish a regime before it can reject one), so first-break times skew toward midday. And the breaks are measured INDEPENDENT of the FLUSS shape seams — where both fire, the median gap (16.5 bars) matches random placement (17): a return-regime change and a shape change are different events, and neither instrument substitutes for the other. Describes finished sessions; forecasts nothing.
The weirdness meter
Compression novelty: how many bytes a day costs on top of the archive before it. The hall of the days history could not compress — and, beside it, the null this instrument published about everything it cannot see.
| SPY | 2022-03-02 | TD+ | 0.864 |
| SPY | 2025-04-23 | TFO- | 0.844 |
| SPY | 2021-09-17 | TD- | 0.841 |
| SPY | 2022-11-15 | TR | 0.841 |
| SPY | 2022-12-29 | TD+ | 0.841 |
| SPY | 2023-12-14 | TR | 0.841 |
| SPY | 2024-07-24 | TD- | 0.841 |
| QQQ | 2021-03-08 | TD- | 0.841 |
Which timescale is doing the work
Wavelet variance split by clock: how much of each day type’s movement lived at ten minutes, forty, the hour-plus trend. Same arc, different animal — in percentages.
| day type | sessions | 10m | 20m | 40m | 80m | hour-plus trend |
|---|---|---|---|---|---|---|
| TD+ bull trend day | 1,124 | 2.4% | 3.3% | 5.3% | 9.8% | 78.2% |
| TD- bear trend day | 823 | 3.0% | 4.3% | 6.9% | 12.4% | 72.6% |
| TFO+ bull trend-from-the-open | 650 | 3.5% | 4.8% | 8.0% | 14.9% | 67.2% |
| TFO- bear trend-from-the-open | 604 | 3.8% | 5.3% | 8.8% | 16.6% | 63.9% |
| TR trading range day | 753 | 4.1% | 5.8% | 9.8% | 18.5% | 61.1% |
| TTR+ bull trending trading range | 563 | 3.8% | 5.3% | 9.0% | 16.7% | 63.9% |
| TTR- bear trending trading range | 515 | 3.6% | 5.1% | 9.3% | 17.1% | 63.5% |
Haar wavelet (MODWT) variance split of the close path over 5,032 labeled sessions (SPY/QQQ/IWM); the energy identity is exact and bench-pinned (a pure oscillation lands on its matching scale). Read the SPREAD, not the absolute levels — coarse scales dominate any random-walk-like series. The spread is a clean gradient: a bull trend day parks 78% of its variance in the hour-plus trend with 2.4% at the 10-minute clock, while a trading-range day nearly doubles the fast-clock share (4.1%) and gives up a sixth of the trend’s coarse energy. On a trend day the 5-minute chart is nearly decoration; on a range day the fast clocks are where the day actually happens. Analysis starts at 10:45 ET — the coarsest filter spends the first 75 minutes as warmup, a stated tradeoff rather than invented pre-open tape. Describes finished sessions; forecasts nothing.
The dictionary of days
SAX words: every session spelled as eight letters, so same-shaped days print the same word and the archive greps by string equality. The ten most-printed silhouettes, with day-type mixes the words were never shown.
8 segments × 4 letters over 5,032 labeled sessions (SPY/QQQ/IWM) — a vocabulary sized by measurement: fine enough for 2,444 distinct silhouettes, coarse enough that the common ones actually repeat (the ten above cover 10% of all days). The dictionary validates against labels it was never shown: the perfect staircase is 82% bull trend days, and every top climb has its mirror decline. Words are exact-match keys — grep the archive for a chart, literally. Descriptive of finished sessions; forecasts nothing.
The persistence of swings
Every pullback’s exact prominence — how far the market rallied before that low’s basin was absorbed — via 0-dimensional persistent homology. The census of swings with real teeth, per day type.
| day type | sessions | toothy dips (med) | toothy rallies (med) | deepest dip (med) | deepest rally (med) | days with no toothy dip |
|---|---|---|---|---|---|---|
| TD+ bull trend day | 1,124 | 4 | 4 | 1.34σ | 1.46σ | 4% |
| TD- bear trend day | 823 | 4 | 4 | 1.55σ | 1.46σ | 3% |
| TFO+ bull trend-from-the-open | 650 | 5 | 5 | 2.12σ | 1.87σ | 1% |
| TFO- bear trend-from-the-open | 604 | 5 | 6 | 1.75σ | 2.33σ | 0% |
| TR trading range day | 753 | 6 | 6 | 2.62σ | 2.7σ | 0% |
| TTR+ bull trending trading range | 563 | 6 | 6 | 2.14σ | 2.97σ | 1% |
| TTR- bear trending trading range | 515 | 6 | 6 | 2.52σ | 2.4σ | 0% |
0-dimensional sublevel persistence of the close path over 5,032 labeled sessions (SPY/QQQ/IWM): every pullback low paired with the rally that absorbed its basin, its PROMINENCE exact by construction (the machinery is benched to recover constructed dips to machine precision, and jitter of size e can only fake prominence 2e — noise separation is the method’s core guarantee). A swing has “teeth” at 0.5σ of prominence. Read ACROSS types — within one, the trend itself inflates prominences. The gradient is the price-action claim, measured: trend days print the fewest toothy swings and the shallowest counter-swings (and 4% of bull trend days print no toothy pullback at all — the never-give-an-entry day), trading ranges print six a side with counter-swings twice as prominent. This is the H0 half of topological data analysis; the H1 half — a double top as a long-lived loop — is NOT shipped and stays on the roadmap. Describes finished sessions; forecasts nothing.
The session as a state machine
A fitted hidden Markov model: four states that named themselves — quiet, bull drive, bear drive, loud chop — and how much of each day type lives in each. Trend days run their drive two-to-one; ranges sit dead-balanced.
| day type | sessions | quietloud 0.76 · drift 0.05 | bear driveloud 1.27 · drift -0.5 | bull driveloud 1.27 · drift 0.56 | loud choploud 2 · drift -0.13 |
|---|---|---|---|---|---|
| TD+ bull trend day | 1,124 | 31% | 17% | 38% | 15% |
| TD- bear trend day | 823 | 28% | 38% | 16% | 18% |
| TFO+ bull trend-from-the-open | 650 | 32% | 21% | 33% | 13% |
| TFO- bear trend-from-the-open | 604 | 29% | 34% | 22% | 16% |
| TR trading range day | 753 | 31% | 27% | 27% | 15% |
| TTR+ bull trending trading range | 563 | 31% | 24% | 29% | 15% |
| TTR- bear trending trading range | 515 | 31% | 29% | 24% | 16% |
A four-state hidden Markov model over the tape’s half-hour character (trailing means of seasonally deflated loudness and drift), fitted once on 600 sessions with ten seeded restarts (six land on the same optimum) and decoded over all 5,032. The state names fell out of the parameters — quiet, two drives, loud chop — and the census reads exactly as a price-action reader would put it: a bull trend day spends 38% of its bars in bull drive against 17% in bear drive, the bear day mirrors it, a trading range sits dead-balanced at 27/27, and the trending ranges lean their way. Three design iterations were required and are part of the record: per-bar features produced a memoryless mixture (median dwell one bar — 5-minute returns barely remember the last bar), and mean-subtracting each session blinded the drives to their own trend (bull days “spent more time in bear drive” — an impossibility that exposed the bug). Median dwell now sits at the half-hour window’s floor, so read OCCUPANCY for structure, not dwell. Describes finished sessions; forecasts nothing.
The loop that will not die
H1 persistent homology of the delay-embedded session: a double top that keeps mattering is a long-lived loop, and the census says trading ranges literally contain loops (median one) while trend days literally do not (median zero).
| day type | sessions | loopiness (med) | loopiness (p90) | real loops (med) |
|---|---|---|---|---|
| TD+ bull trend day | 1,124 | 0.14 | 0.34 | 0 |
| TD- bear trend day | 823 | 0.16 | 0.32 | 0 |
| TFO+ bull trend-from-the-open | 650 | 0.20 | 0.43 | 0 |
| TFO- bear trend-from-the-open | 604 | 0.21 | 0.42 | 0 |
| TR trading range day | 753 | 0.29 | 0.56 | 1 |
| TTR+ bull trending trading range | 563 | 0.27 | 0.54 | 1 |
| TTR- bear trending trading range | 515 | 0.27 | 0.54 | 1 |
H1 persistent homology of each session’s delay embedding (z-close against itself 30 minutes back) over 5,032 labeled sessions (SPY/QQQ/IWM). Loopiness = the lifetime of the longest-lived loop; a “real loop” lives ≥0.25 z-units. The machinery is exact (benched against a hand-computable case to machine precision) and noise-immune by theorem — jitter can only make short-lived loops. The gradient is the chapter’s claim delivered: trading ranges literally contain loops (median one per session) and trend days literally do not (median zero), with every one of the loopiest days in the archive a range day. Cross-instrument check: day-scale double-structure tags do NOT separate loopiness (0.21 vs 0.21 median, n=1170/330) — a null, published. Describes finished sessions; forecasts nothing.
The character of a day, in numbers
Dynamical-systems measurements per day type: how fast stretches away from the mean decay, how often reversion fails to register at all, how stuck and how orderly the tape runs.
| day type | reversion half-life (med, IQR) | no measurable reversion | laminarity (med) | perm. entropy (med) | Hurst (med) |
|---|---|---|---|---|---|
| TD+ bull trend day | 47m(28–83m) | 7% | 0.839 | 0.88 | 0.54 |
| TD- bear trend day | 49m(29–87m) | 9% | 0.837 | 0.891 | 0.534 |
| TFO+ bull trend-from-the-open | 32m(20–54m) | 1% | 0.812 | 0.892 | 0.54 |
| TFO- bear trend-from-the-open | 32m(20–54m) | 1% | 0.813 | 0.897 | 0.542 |
| TR trading range day | 29m(19–45m) | 0% | 0.799 | 0.898 | 0.544 |
| TTR+ bull trending trading range | 39m(24–66m) | 3% | 0.814 | 0.894 | 0.543 |
| TTR- bear trending trading range | 39m(24–67m) | 3% | 0.815 | 0.896 | 0.537 |
Dynamical-systems measurements over 180,591 labeled sessions (117 tickers): how many minutes a stretch away from the mean takes to decay (Ornstein–Uhlenbeck half-life), how often a day trends so cleanly reversion is unmeasurable, how much time the tape spends stuck in one neighborhood (RQA laminarity), how orderly the bar sequence is (permutation entropy), and trend persistence (DFA Hurst). The half-life column is the separator — trend days’ stretches decay slowest and are the only types where reversion regularly fails to register; ranges snap back fastest. Hurst, honestly, barely separates the types at this bar size — a measured null, reported rather than hidden. Character describes a finished session; it forecasts nothing.
Base rates, hallmarks, and the full day-type taxonomy live on Day Types.
More exhibits
Computed galleries that live on their own pages.