Historical analog spread was associated with later move size
The finding
Across 383 successful historical cases, wider analog spreads were associated with larger later absolute excess moves. A positive partial association remained after controlling for trailing volatility. The five-bar comparison with shape-only analogs was inconclusive: its reported interval included zero. This passed the original association test; it did not establish directional accuracy or better future forecasts.
The research question
Does the spread of the frozen situation-and-shape analog set's five-bar excess returns relate to the size of the anchor's later absolute excess move?
Decision criteria
Primary: positive Spearman rank correlation with a one-sided p <= 0.05 from 2,000 permutations. At least 250 eligible anchors and 30 measurable members per set; below the floor is underpowered. Any violation of the recorded member-date cutoff voids the study. Secondary comparisons cannot rescue the primary.
Reading this result
Repository source: research/notes/study90_dispersion_reader_guide_2026_09_08.md
Editorial guide prepared September 8, 2026. The study's registration and recorded decision date are September 2, 2026. This page presents existing research.
What was measured
An anchor is one stock or fund on one historical date. The study first selected up to 300 earlier examples with a similar market situation and chart shape, allowing at most two examples per symbol. It measured the spread of those examples' later excess returns: their interquartile range, or the distance between the 25th and 75th percentiles.
Excess return means a return minus the median return of the eligible liquid universe on the same origin date. The question was whether a wider spread among the examples was associated with a larger absolute excess move for the anchor. The sign of the anchor's return was not the target.
The original documents call the horizon "5 d" or "five sessions." The native return cache advances through five subsequent observed bars for each symbol. Missing bars can make that different from five common exchange sessions.
The primary result and its denominator
The study reused the 388 anchors selected for Study 89. Five attempts errored because the random control timed out. The remaining 383 anchors returned successful records with 300-member sets.
The reported rank correlation was +0.423, with a one-sided permutation p-value of 0.0005. This passed the original primary criterion: a positive association at p <= 0.05, with at least 250 eligible anchors and at least 30 measurable members per set.
A correlation describes how two quantities move together across this sample. It is not a percentage of correct forecasts.
What the comparison with simpler methods showed
The following were secondary analyses. Their uncertainty remains part of the finding, even though the primary passed.
| Comparison | Reported result | Interpretation |
|---|---|---|
| Association after controlling for trailing volatility | Partial rank correlation +0.231; 90% interval [0.141, 0.314] | A positive association remained after accounting for the specified 20-return volatility measure. |
| Difference versus shape-only analogs | +0.067; 90% interval [-0.006, +0.142], on 372 common anchors | The interval includes zero. An improvement over shape-only was not established at this horizon. |
The five-bar result does not establish that the method produces better forecasts than a volatility model. Controlling for one volatility measure in a correlation is a different comparison from testing the two methods' forecast errors.
The paired difference is calculated on the common eligible anchors. Subtracting the separately reported correlations, which use different samples, would not reproduce that paired estimate.
Coverage varied with volatility
The raw 10th-to-90th-percentile range contained the realized excess return for 80.2% of the 383 eligible anchors. This was a historical sample result.
| Group | Analog range coverage | Fixed historical range coverage |
|---|---|---|
| All eligible anchors | 80.2% | 76.2% |
| Lower trailing-volatility half | 86.5% | 87.5% |
| Higher trailing-volatility half | 73.8% | 64.9% |
Coverage in the higher-volatility half was below the nominal 80%. The overall figure should not be read as uniform coverage across market conditions or as the current API's coverage rate. These raw ranges are also distinct from the separate calibrated-band method.
The original abstention candidate marked 108 of 383 anchors, or 28.2%, as uninformative under thresholds fixed for this study. That secondary result is not a claim that those thresholds remain the current product rule.
Limits of this evidence
The source analysis permutes and bootstraps individual anchors. It does not preserve whole date or issuer groups in those calculations. Shared market dates, repeated symbols and overlapping outcomes can affect the reported uncertainty. The original pass verdict is retained; it is not a newly validated error rate.
The historical sample required an available five-bar return. Its selection used stored price and liquidity fields, and January 2024 had no eligible anchors. The documented source gap and split-adjusted price conventions limit historical interpretation; this publication review does not quantify their effect.
The report's "0 lookahead violations" refers to its recorded check that member origin dates obeyed a 15-calendar-day cutoff. That check alone does not establish when all member outcomes or input versions became available. The review does not authenticate point-in-time data vintage or independently reproduce the statistics from raw records.
The original report includes historical suggestions about using width for position sizing and about product changes. This guide makes no sizing recommendation or trading-profitability claim. A positive association on this sample is not evidence of a directional edge or future performance.
Read the record
All numbers above are copied from the original result document; the original specification defines the criteria. The source documents below are preserved, including their original wording. Study 91 extends the analysis to one and ten observed bars using the same records. It is not an independent replication.
Result document
Repository source: research/results/happening_memory_dispersion_test_2026_09_02.md
Pre-registration: research/specs/happening_memory_dispersion_test_2026_09_02.md
(study_ledger 90, registered 00:58Z; no dispersion statistic computed before it).
Successor to study 89 (FAIL on direction) on the same 388 anchors and the same three sets.
Ships nothing, trades nothing. Chart Library never picks a side.
The question
Does the happening-then-shape frozen set know how much the anchor will move, even though study 89 showed it does not know which way?
Receipt
388 anchors ran with HAPPENING_IDENT_INDEX=1 on both the production retrieve and the
identity-only control. 5 anchors errored (the random control's 120 s timeout on very large
ETF-identity pools: JPST, IJR, SPYV, QLD, AXS). 0 lookahead violations. 383 anchors returned
status ok with full 300-member sets. Base rate IQR_base = 4.0569 pp (liquid excess_5d,
2019–2023, n 1,208,699), frozen before any statistic.
Primary: PASS
| predictor → outcome | n | Spearman IC | one-sided p | null 5–95 % |
|---|---|---|---|---|
| happening-then-shape IQR(excess_5d) → anchor |excess_5d| | 383 | +0.423 | 0.0005 | [−0.086, +0.083] |
| std instead of IQR | 383 | +0.409 | — | — |
| MAD instead of IQR | 383 | +0.422 | — | — |
Secondaries
A. Beyond trailing volatility. Trailing 20-session realised vol alone has IC 0.417 with realised |excess|, and correlates 0.62 with the set's IQR. The rank-partial of IQR given trailing vol is +0.231, 90 % CI [0.141, 0.314], P(> 0) = 1.000. The set's width carries information the anchor's own recent volatility does not.
B. Controls. Identity-only random IC 0.311; shape-only IC 0.340; both far outside the null. Happening-then-shape minus shape-only on 372 common anchors: +0.067, 90 % CI [−0.006, +0.142], P(> 0) = 0.935. Situation-first is better than shape alone on width, just short of the 5 % one-sided line.
C. Coverage of the raw set's [p10, p90], no calibration layer applied.
| band | n | coverage | median width (pp) |
|---|---|---|---|
| happening-then-shape | 383 | 80.2 % | 10.05 |
| identity-only random | 383 | 77.0 % | 10.40 |
| shape-only V5 | 372 | 80.6 % | 10.32 |
| fixed 2019–2023 band | 383 | 76.2 % | 9.84 |
Split by trailing-vol halves: low-vol half, happening-then-shape 86.5 % vs fixed 87.5 %; high-vol half, happening-then-shape 73.8 % vs fixed 64.9 %. The adaptive band degrades less than a fixed band when volatility is high, and still under-covers there. That residual is exactly what the vol-regime × tightness multiplier in the calibration layer corrects, and it is why the layer exists.
D. Abstention rule (thresholds frozen at registration). r = IQR_set / IQR_base;
uninformative when 0.80 ≤ r ≤ 1.25 and |median| < 0.25 pp. The rule abstains on
108 / 383 (28.2 %). IC among retained anchors 0.498; among abstained 0.094.
Ratio quantiles q10 / q50 / q90 = 0.56 / 1.13 / 1.68. The rule separates informative sets
from base-rate lookalikes without having been tuned on this sample.
What this means, with study 89
Same anchors, same retrieve, same universe:
| question | study | result |
|---|---|---|
| does the set know which way (5 d conditional mean)? | 89 | FAIL, IC −0.05 |
| does the set know how much (5 d realised |excess|)? | 90 | PASS, IC +0.42, partial 0.23 beyond trailing vol |
This is the empirical form of the product law. The memory's information is the second moment: analog sets, calibrated widths, and abstention. It licenses surfacing the band, abstaining when the set is a base-rate lookalike, and sizing from width. It licenses no side.
Study 91 — the same test at 1 d and 10 d (ledger row 91, registered 13:28Z): PASS at both
Same records, no new retrieval. Base rates frozen before any statistic: 1 d IQR 1.7543 pp, 10 d IQR 5.8856 pp (liquid excess 2019–2023).
| horizon | IC (set IQR → |excess|) | p | partial given trailing vol | identity-only | shape-only | happening − shape-only | raw band coverage (fixed) | abstain % / IC retained vs abstained |
|---|---|---|---|---|---|---|---|---|
| 1 d | +0.341 | 0.0005 | +0.138 [0.050, 0.224] | 0.213 | 0.319 | +0.014 [−0.054, +0.082] | 83.6 % (81.2 %) | 44.9 % / 0.41 vs 0.09 |
| 5 d (study 90) | +0.423 | 0.0005 | +0.231 [0.141, 0.314] | 0.311 | 0.340 | +0.067 [−0.006, +0.142] | 80.2 % (76.2 %) | 28.2 % / 0.50 vs 0.09 |
| 10 d | +0.395 | 0.0005 | +0.185 [0.100, 0.270] | 0.353 | 0.274 | +0.090 [+0.018, +0.161] | 80.4 % (78.9 %) | 18.0 % / 0.40 vs 0.18 |
Width information holds at every horizon the product serves. The situation screen adds over shape alone at 10 d with the interval clear of zero, not at 1 d; at 1 d the frozen rule abstains on nearly half of sets, which is the rule doing its job (one-day width is mostly base rate). The receipt may be shown at all three horizons.
Shipped from this result (PR #100)
services/informative.py: the frozen rule as a receipt (verdictin informative / uninformative / insufficient / unavailable, ratio, median, p10/p90, rule constants). Computed after the freeze from member 5d returns; never touches ranking or membership; never a side. Exposed asinformativeon/api/v1/cohort,/api/v1/cohort_analyze(always-on core key), v2data.informativeplus a warning when uninformative. FlagINFORMATIVE_RECEIPT(default on).liquid_date_medians(date → med1/med5/med10/n; dates with < 20 liquid names carry NULL medians) built on the box 2026-09-02 (2,044 dates) and refreshed nightly at the end ofscripts/precompute_returns.py.- Whether
/appblanks the band onuninformativeis left as a product decision; the members stay real analogs either way.
Next
A successor may register: the same test on 1 d and 10 d; the interaction with the
calibration multiplier (does the layer's multiplier shrink when the set is informative?);
and whether /app should blank the band on uninformative.
Study specification
Repository source: research/specs/happening_memory_dispersion_test_2026_09_02.md
Registered 2026-09-02 ~01:00 UTC, before any dispersion statistic was computed. Tier T2, one primary. Ships nothing, trades nothing. Successor to study 89, which found no first-moment information in the happening identity or the shipped frozen set.
The one question
Does the happening-then-shape frozen set know how much the anchor will move, even though it does not know which way? Concretely: does the dispersion of the frozen set's 5-session excess returns predict the anchor's realised absolute 5-session excess return? This is the claim the product actually makes (calibrated bands, 80.8 % across 303K), tested on the same anchors and the same retrieve that failed on direction.
Data and sets (frozen; identical to study 89 Arm B)
- The same 388 anchors (
arm_b_anchors.csv), same K = 300, cap 2 per symbol,as_of_cutoff = anchor − 15 d, same date-median base rates (MIN_DATE_N = 20). - The same three sets: (1) happening-then-shape production retrieve, (2) identity-only random, (3) shape-only V5. The random control is a fresh draw. Follow-through joined after the freeze. Lookahead asserted per anchor; any violation voids the study.
- Per set the runner records the member excess distribution: n, IQR (p75 − p25), std, MAD, p10, p90, median, for 5 d (primary) and 1 d / 10 d (descriptive).
- Anchor outcome: |excess_5d|. Anchor control: trailing 20-session realised volatility,
the std of the 20 daily log close-to-close returns ending at the anchor close (known at
the anchor), from
daily_bars, in percent. - Base-rate dispersion
IQR_base= pooled IQR of liquid excess_5d over 2019-01-01.. 2023-12-31 from the study 89 extract (the anchors are 2024+, so no overlap): 4.0569 pp (p25 −2.0226, p75 +2.0343; fixed band p10 −4.9150, p90 +4.9206; n 1,208,699), computed 2026-09-02 00:58Z before any dispersion statistic.
PRIMARY 90
Spearman rank correlation across anchors between the happening-then-shape set's IQR of excess_5d and the anchor's realised |excess_5d|. Null: 2,000 permutations of IQR across anchors. PASS if one-sided p ≤ 0.05 (positive). Informative floor: ≥ 250 anchors with status ok and ≥ 30 measurable members; below it UNDERPOWERED, not FAIL.
Secondaries (reported; cannot rescue or overturn the primary)
A. Beyond trailing vol. Rank-based partial correlation of IQR with |excess_5d| controlling for trailing 20-session vol (Spearman on the residuals of rank(IQR) and rank(|excess|) on rank(trail_vol)); 2,000-anchor bootstrap 90 % CI. Pre-stated reading: primary PASS with this CI including 0 means the set's width information is the anchor's own recent volatility restated, and the product should say so. B. Controls. The same IC for the identity-only and shape-only sets; paired bootstrap of IC(happening-then-shape) − IC(shape-only) on common anchors. C. Coverage. Fraction of anchors whose realised excess_5d lies inside each set's [p10, p90]; expected 0.80 if the set is a calibrated band. Same for the fixed unconditional band (pooled 2019–2023 p10/p90). Split by trailing-vol halves: a calibrated adaptive band holds ~0.80 in both halves while a fixed band cannot. D. Abstention rule candidate, thresholds frozen now. Dispersion ratio r = IQR_set / IQR_base. A set is uninformative when 0.80 ≤ r ≤ 1.25 AND |median_set| < 0.25 pp. Report the fraction of anchors the rule would abstain on and the primary IC among retained versus abstained anchors. This is the input to the abstain-on-uninformative product change; it is not re-cut on the result.
Kill / void
- Any lookahead violation voids the study.
- No re-cuts: the predictor (IQR), the outcome (|excess_5d|), the control (20-session trailing vol), the thresholds in D, N and the sets are frozen here.
What a pass licenses
That the frozen set carries second-moment information: worth surfacing as a band, worth sizing from, worth abstaining on when absent. It licenses no side. A fail says the shipped retrieve's width is not informative about realised width either, and the calibrated bands owe their coverage to the calibration layer alone rather than to the analog set.
Honest prior
Calibration coverage of 80.8 % across 303K cases was built on V5 cohorts and a vol-regime × tightness multiplier; it says bands can be made to hold, not that the raw cohort width ranks realised width. Trailing volatility is a strong known predictor of realised volatility. The interesting outcome is A, not the primary.