Skip to content
Research / Study 99Open access · Freely available
← Research ledger / Memory

Large price moves did not establish a reliable directional signal

Fail 0 of 64Chart Library · Study 99

The finding

Zero of 64 cell-horizons clear the gates. Pooled continuation sits at 0.48–0.50 everywhere, and the mean continuation excess is within 0.3 points of zero in discovery and mildly negative in the holdout. Direction is closed on large-move states; this adds to studies 89 and 93.

cells × horizons16 × 4pooled continuation rate0.48–0.50 at every horizonpassed discovery / holdout / both4 / 1 / 0

The research question

Across 16 cells of large-move states (direction × market × sector × prior trend), does any cell at any of four horizons show continuation or reversal that survives a discovery split, a time holdout, and the two placebo gates?

Decision criteria

A cell-horizon passes only if it clears all four gates in both the discovery split and the 2024–26 holdout. 64 cell-horizons, gates fixed before the numbers.

Result document

Repository source: research/results/study99_large_move_census_2026_09_03.md

Reading (2026-09-03 22:05Z, written after the numbers; the bar was fixed before them). FAIL: 0 of 64 cell-horizons clear the four gates. Direction is closed on large-move states at the swing horizon, as the honest prior said (adds to studies 89 / 93). Pooled continuation rate 0.48-0.50 at every horizon in both splits; pooled mean continuation excess is within +0.3 pp of zero in discovery and mildly NEGATIVE (-0.2 to -0.5 pp, i.e. mean reversion vs the market) in the 2024-26 holdout. Four cell-horizons passed the discovery gate; one passed the holdout gate; none passed both. Nearest miss: up / mkt_above200 / sector_down / trend_down at 2 d (an up-move in an up market but a down sector and down prior trend REVERSES): discovery -1.31 pp (p 0.001, n 348), holdout -1.35 pp (p 0.072, n 323) -- same sign, floor met, CI clear, missed the holdout p <= 0.05 gate. It is one of 64 and is NOT a result; if it is to be tested it goes forward on anchors after 2026-08-04 under its own registration, never re-cut here. Width (secondary): the state widens the forward distribution at every horizon -- IQR ratio vs the date-matched universe 1.37 / 1.25 / 1.14 / 1.12 (discovery) and 1.50 / 1.31 / 1.25 / 1.19 (holdout) at 2 / 5 / 10 / 20 d -- but it decays with horizon and the 20 d ratio does not reach the pre-stated 1.3, so no 20 d width study is licensed by this. Step 8 (the name's own prior continuation rate) does not flip the sign (-0.17 vs -0.34 pp at 5 d). Sensitivity at 2.0 / 3.0 sigma is the same picture (continuation rate 0.478-0.490). 20 % of raw anchors lacked a sector state (peer_ret_20d NULL) and were counted, not silently dropped. Runtime 24 min on the box at low priority.

Run 2026-09-03T21:54:00.210461+00:00 (smoke=False). Universe 5721 names; anchors kept 15948 (raw 69302, cooldown drops 32455, no peer state 3962). Discovery 8564, holdout 7384. Tests 64. Pre-registration: research/specs/study99_large_move_census_prereg_2026_09_03.md (study_ledger 99).

PRIMARY: FAIL — cell-horizons clearing all four gates: 0.

Cells (continuation excess c_h in pp; p = date-matched placebo; CI90 = date-block bootstrap; W = IQR ratio vs universe)

cellhdisc n/datesdisc meanpCI90Whold n/dateshold meanpCI90Wgates
down/mkt_above200/sector_down/trend_down2496/210-0.270.109[-0.85,+0.30]1.326400/149-0.050.897[-0.72,+0.53]1.4870000
down/mkt_above200/sector_down/trend_down5496/210-0.210.571[-1.00,+0.62]1.498400/149-0.610.346[-1.22,+0.08]1.220000
down/mkt_above200/sector_down/trend_down10496/210-0.380.470[-1.53,+0.73]1.169400/149-0.640.377[-1.58,+0.27]1.2610000
down/mkt_above200/sector_down/trend_down20496/210-0.440.420[-1.80,+0.92]1.114400/149-1.120.408[-2.18,+0.07]1.2060000
down/mkt_above200/sector_down/trend_up2965/235-0.050.683[-0.30,+0.22]1.139752/209+0.100.657[-0.23,+0.47]1.1880000
down/mkt_above200/sector_down/trend_up5965/235+0.230.772[-0.08,+0.52]1.01752/209-0.020.945[-0.46,+0.45]1.1480000
down/mkt_above200/sector_down/trend_up10965/235+0.170.980[-0.37,+0.72]0.962752/209+0.040.907[-0.66,+0.78]1.0980000
down/mkt_above200/sector_down/trend_up20965/235-0.140.957[-1.04,+0.68]0.967752/209+0.370.498[-0.26,+1.07]0.9640000
down/mkt_above200/sector_up/trend_down2409/245+0.060.701[-0.31,+0.43]1.606641/273+0.290.166[-0.07,+0.66]1.7180000
down/mkt_above200/sector_up/trend_down5409/245-0.300.288[-0.79,+0.18]1.312641/273+0.560.115[-0.04,+1.13]1.4370000
down/mkt_above200/sector_up/trend_down10409/245+0.650.097[-0.04,+1.32]1.238641/273+0.070.882[-0.64,+0.78]1.3620000
down/mkt_above200/sector_up/trend_down20409/245+0.470.460[-0.49,+1.41]1.169641/273-0.050.973[-0.99,+0.84]1.2460000
down/mkt_above200/sector_up/trend_up2813/390+0.050.693[-0.21,+0.32]1.5371280/356-0.330.169[-0.69,+0.05]1.3810000
down/mkt_above200/sector_up/trend_up5813/390-0.050.810[-0.41,+0.31]1.2791280/356-0.650.153[-1.09,-0.22]1.0930000
down/mkt_above200/sector_up/trend_up10813/390-0.000.997[-0.45,+0.43]1.0761280/356-0.640.161[-1.44,+0.13]1.1950000
down/mkt_above200/sector_up/trend_up20813/390-0.380.355[-1.02,+0.22]1.1271280/356-0.320.524[-1.36,+0.62]1.0920000
down/mkt_below200/sector_down/trend_down21337/162+0.910.001[+0.06,+1.70]1.24617/35+0.340.364[-0.53,+1.10]1.2841100
down/mkt_below200/sector_down/trend_down51337/162+0.740.024[-0.44,+1.77]1.157617/35+0.560.052[-0.48,+1.48]1.1140000
down/mkt_below200/sector_down/trend_down101337/162+0.780.181[-0.14,+1.80]1.06617/35+0.180.638[-0.60,+0.90]0.9350000
down/mkt_below200/sector_down/trend_down201337/162+0.290.719[-1.12,+1.65]1.09617/35-0.750.315[-2.21,+0.45]0.9910000
down/mkt_below200/sector_down/trend_up2827/120-0.510.213[-1.59,+0.35]1.063396/32-0.190.872[-1.23,+0.63]0.8880100
down/mkt_below200/sector_down/trend_up5827/120+0.050.882[-0.43,+0.60]1.058396/32-0.690.504[-1.51,+0.17]0.9120000
down/mkt_below200/sector_down/trend_up10827/120+0.290.692[-0.30,+0.85]0.993396/32-2.070.001[-3.76,-0.44]0.9470000
down/mkt_below200/sector_down/trend_up20827/120+0.310.727[-0.58,+1.03]1.052396/32-0.700.766[-2.11,+0.89]1.0120000
down/mkt_below200/sector_up/trend_down2215/85-0.820.007[-1.54,-0.11]1.51935/10+0.550.373[-0.83,+2.54]0.6440100
down/mkt_below200/sector_up/trend_down5215/85-0.400.394[-1.46,+0.53]1.2735/10+0.150.872[-1.79,+3.38]0.7350000
down/mkt_below200/sector_up/trend_down10215/85+0.570.345[-0.79,+1.73]1.18835/10-0.460.782[-3.81,+3.40]1.2370000
down/mkt_below200/sector_up/trend_down20215/85-0.590.557[-2.43,+0.88]1.28335/10+2.200.418[-0.28,+4.86]0.8730000
down/mkt_below200/sector_up/trend_up2104/61-0.050.910[-0.80,+0.76]1.06423/11-0.010.994[-1.27,+1.14]1.4950000
down/mkt_below200/sector_up/trend_up5104/61-1.320.040[-4.11,+0.84]1.01823/11+0.470.741[-2.24,+2.99]0.7380100
down/mkt_below200/sector_up/trend_up10104/61-1.580.117[-4.33,+0.60]0.82523/11-0.610.684[-3.32,+2.11]1.2780100
down/mkt_below200/sector_up/trend_up20104/61-2.560.040[-5.77,+0.03]1.18223/11-1.860.496[-5.12,+1.22]0.9320100
up/mkt_above200/sector_down/trend_down2348/167-1.310.001[-2.27,-0.35]1.549323/150-1.350.072[-2.26,-0.46]1.7251101
up/mkt_above200/sector_down/trend_down5348/167-0.790.055[-1.83,+0.33]1.251323/150-1.890.071[-3.11,-0.77]1.510000
up/mkt_above200/sector_down/trend_down10348/167+1.030.075[-1.25,+3.79]1.353323/150-3.230.013[-4.79,-1.76]1.4480000
up/mkt_above200/sector_down/trend_down20348/167+2.260.004[-1.54,+7.18]1.287323/150-3.060.015[-4.86,-1.46]1.4591100
up/mkt_above200/sector_down/trend_up2459/229+0.060.711[-0.34,+0.48]1.311372/174-0.500.077[-1.21,+0.15]1.5760000
up/mkt_above200/sector_down/trend_up5459/229-0.330.483[-0.91,+0.23]1.131372/174-0.820.049[-1.53,-0.13]1.4150010
up/mkt_above200/sector_down/trend_up10459/229+0.130.846[-0.61,+0.84]1.186372/174-1.170.038[-2.15,-0.23]1.3460000
up/mkt_above200/sector_down/trend_up20459/229+0.010.990[-1.19,+1.20]1.099372/174+0.120.855[-1.27,+1.55]1.2220000
up/mkt_above200/sector_up/trend_down2612/318-0.210.221[-1.41,+1.24]1.814881/338-0.180.408[-0.92,+0.62]1.8880000
up/mkt_above200/sector_up/trend_down5612/318+0.200.442[-1.53,+2.31]1.743881/338+0.040.901[-1.32,+1.88]1.6620000
up/mkt_above200/sector_up/trend_down10612/318-0.370.370[-1.80,+1.26]1.629881/338-0.920.206[-2.29,+0.61]1.5260000
up/mkt_above200/sector_up/trend_down20612/318-1.330.043[-2.72,+0.12]1.512881/338-1.640.129[-2.89,-0.32]1.4150000
up/mkt_above200/sector_up/trend_up21052/450+0.050.678[-0.64,+0.86]1.691467/406+0.060.742[-0.29,+0.42]1.6730000
up/mkt_above200/sector_up/trend_up51052/450-0.310.175[-1.02,+0.40]1.4841467/406+0.010.972[-0.52,+0.52]1.4780000
up/mkt_above200/sector_up/trend_up101052/450+0.400.257[-0.67,+1.69]1.2871467/406+0.640.319[-0.08,+1.33]1.3270000
up/mkt_above200/sector_up/trend_up201052/450+0.270.628[-0.85,+1.44]1.1751467/406+0.630.604[-0.31,+1.62]1.2840000
up/mkt_below200/sector_down/trend_down2361/122+0.320.274[-0.51,+1.12]1.094105/29-2.040.001[-5.16,+0.04]1.3610000
up/mkt_below200/sector_down/trend_down5361/122-0.280.670[-1.53,+0.99]1.073105/29-4.190.001[-8.07,-0.56]1.4130000
up/mkt_below200/sector_down/trend_down10361/122+0.130.877[-1.65,+2.11]1.027105/29-4.090.001[-10.19,+1.06]1.1630000
up/mkt_below200/sector_down/trend_down20361/122-2.150.004[-3.90,-0.45]1.033105/29-3.940.031[-14.64,+2.41]1.2751100
up/mkt_below200/sector_down/trend_up2194/83+0.770.079[-0.53,+2.07]0.88462/24-5.110.001[-10.09,-0.15]1.6420100
up/mkt_below200/sector_down/trend_up5194/83+1.540.046[-0.32,+3.41]0.78262/24-5.820.001[-10.60,-0.92]1.3450100
up/mkt_below200/sector_down/trend_up10194/83+1.250.147[-1.05,+3.58]0.67362/24-6.890.001[-12.24,-1.98]1.1740000
up/mkt_below200/sector_down/trend_up20194/83+1.640.147[-1.06,+4.42]0.69562/24-10.080.001[-18.46,-2.57]1.0210000
up/mkt_below200/sector_up/trend_down2230/97+0.280.371[-0.78,+1.29]1.4415----0000
up/mkt_below200/sector_up/trend_down5230/97+0.240.532[-1.06,+1.58]1.43415----0000
up/mkt_below200/sector_up/trend_down10230/97-0.300.561[-1.71,+1.20]1.30515----0000
up/mkt_below200/sector_up/trend_down20230/97-1.930.003[-3.71,-0.23]1.06215----0000
up/mkt_below200/sector_up/trend_up2142/70-0.140.729[-1.06,+0.73]1.24713----0000
up/mkt_below200/sector_up/trend_up5142/70+0.490.380[-0.99,+1.88]1.34513----0000
up/mkt_below200/sector_up/trend_up10142/70-0.590.396[-2.21,+1.05]0.98413----0000
up/mkt_below200/sector_up/trend_up20142/70-0.940.362[-2.73,+0.78]1.02213----0000

Descriptives (cannot rescue)

{
 "z>=2.0": {
  "n": 20085,
  "mean_c2": -0.02,
  "cont_rate2": 0.49,
  "mean_c5": -0.091,
  "cont_rate5": 0.489,
  "mean_c10": -0.164,
  "cont_rate10": 0.49,
  "mean_c20": -0.253,
  "cont_rate20": 0.485
 },
 "z>=2.5": {
  "n": 15948,
  "mean_c2": -0.049,
  "cont_rate2": 0.489,
  "mean_c5": -0.114,
  "cont_rate5": 0.49,
  "mean_c10": -0.092,
  "cont_rate10": 0.488,
  "mean_c20": -0.284,
  "cont_rate20": 0.482
 },
 "z>=3.0": {
  "n": 12541,
  "mean_c2": -0.077,
  "cont_rate2": 0.489,
  "mean_c5": -0.171,
  "cont_rate5": 0.488,
  "mean_c10": -0.121,
  "cont_rate10": 0.486,
  "mean_c20": -0.413,
  "cont_rate20": 0.478
 },
 "shock_1d": {
  "n": 7840,
  "mean_c5": 0.104
 },
 "drift_5d": {
  "n": 8106,
  "mean_c5": -0.324
 },
 "z_tercile_low": {
  "n": 5316,
  "mean_c5": -0.121
 },
 "z_tercile_mid": {
  "n": 5316,
  "mean_c5": 0.073
 },
 "z_tercile_high": {
  "n": 5314,
  "mean_c5": -0.293
 },
 "own_history_5d": {
  "own_rate_ge_0.5": {
   "n": 4205,
   "mean_c5": -0.168
  },
  "own_rate_lt_0.5": {
   "n": 3095,
   "mean_c5": -0.341
  }
 }
}

Study specification

Repository source: research/specs/study99_large_move_census_prereg_2026_09_03.md

Registered 2026-09-03 ~21:00 UTC, before any number was pulled. Graham (20:40Z): "this does seem like the lane I want to go down ... Start with large-move states: 1. Stock makes an unusually large 1–5 day move. 2. Volume and realized volatility expand. 3. ChartLibrary retrieves historically similar setups. 4. Separate them by broader market state, sector state and prior trend. 5. Estimate the complete forward distribution over 2, 5, 10 and 20 days. 6. Determine whether continuation or reversal is unusually likely. 7. Rank current setups by expected return and confidence. 8. Initially backtest the stock itself. 9. Then compare stock, vertical spreads and short puts." Then: "go ahead, draft study 99 and run it."

This study covers steps 1–6 as a CENSUS in the row-53 form (state defined first, the population retrieved, statistics last, one pre-stated bar). Step 7 is licensed only by a PASS. Step 8 enters as a partition key (the name's own history is one condition, never a stand-alone backtest). Step 9 is closed by studies 96/97 (2026-09-03) and is not part of this study.

Honest prior (stated before the numbers)

On this memory, direction has failed every registered form: study 89 (analog-set direction, IC −0.05 on 388 anchors), study 93 (event-conditioned cells at the swing horizon, 0/75 confirmed), the four archetypes (all refuted), row 50 (pooled shape null). Width has passed every time (IC 0.34/0.42/0.40 at 1/5/10 d). Expectation: width will separate at every horizon including the never-measured 20 d; direction will not. The one thing this study can add that nothing before it did is a large-move trigger (not an event, not a slow-family flip) crossed with three pre-trade-knowable partitions at 2/5/10/20 d.

State (frozen)

Computed from daily_bars only (no situation_context field enters the state), per name, close-to-close:

  • Universe: names with at least one liquid situation_context row since 2019-01-01 (dollar_vol ≥ 5e7, close ≥ 5). At the anchor: 20-session average dollar volume ≥ 5e7 and close ≥ 5.
  • Large move: r5 = close/close[-5] − 1, r1 = close/close[-1] − 1. z5 = r5 / sd(r5 over sessions −255..−6) (the move's own days are excluded from its scale), z1 = r1 / sd(r1 over −250..−1). Event if |z5| ≥ 2.5 OR |z1| ≥ 2.5. (A "top decile" would be one day in ten; 2.5 σ is roughly the top 1–2 %, which is what "unusually large" means.) Move sign = sign(r5) (if r5 is exactly 0, sign(r1)).
  • Effort: vol5/vol20 ≥ 1.5 (mean volume of the last 5 sessions vs the 20 before them) AND rv5/rv20 ≥ 1.5 (std of r1 over the last 5 sessions vs the 20 before them). Both must hold.
  • Non-overlap: one anchor per name per episode — the first session the condition holds; no further anchor for that name within the next 10 sessions.
  • Dates: anchors 2019-01-01 → 2026-08-04 (so a 20-session forward window completes by 2026-09-02). A horizon whose forward close is missing drops that anchor from that horizon only (n reported per horizon).

Partitions (the conditions; 16 cells)

All knowable at the anchor close:

  1. Move sign: up / down.
  2. Broader market state: SPY close above / below its 200-session mean at the anchor.
  3. Sector state: sign of situation_context.peer_ret_20d at the anchor (the name's sector peers' 20 d return; rows with NULL peer_ret_20d are excluded from the cells and counted).
  4. Prior trend: close[-5] / close[-125] − 1 positive / negative (the trend BEFORE the move).

Outcomes

Forward close-to-close returns at h ∈ {2, 5, 10, 20} sessions, in percentage points, date-matched excess: x_h = f_h − median_h(date) where the median is over the liquid universe (same liquidity rule, all names, event or not) on that date. Continuation excess c_h = sign(move) × x_h (positive = the move continued beyond the market, negative = it reversed).

PRIMARY (one bar, four gates; 16 cells × 4 horizons = 64 tests)

Per cell and horizon the statistic is the mean of c_h. A cell-horizon clears iff all four hold:

  1. Discovery (anchors 2019-01-01 → 2023-12-31): date-matched placebo p ≤ 0.01 (two-sided; 1,000 draws; each draw replaces every anchor with a random non-event liquid row from the same date, then applies the same sign, so the null carries the same date clustering) AND survives BH-FDR at q = 0.10 across the 64 tests AND n ≥ 200 anchors from ≥ 100 distinct dates.
  2. Economic floor in discovery: |mean c_h| ≥ 0.5 / 1.0 / 1.5 / 2.0 pp at 2 / 5 / 10 / 20 d (gross; a 10 bps round trip is far inside these).
  3. Holdout (anchors 2024-01-01 → 2026-08-04, untouched until discovery is sealed): same sign, placebo p ≤ 0.05, n ≥ 100 from ≥ 50 dates, |mean| ≥ half the floor.
  4. Date-block bootstrap CI90 of the mean (resampling anchor DATES with replacement, 2,000 draws) clear of zero in BOTH splits.

PASS iff at least one cell-horizon clears all four. FAIL otherwise.

Pre-stated readings:

  • PASS: continuation / reversal is unusually likely in that cell; the cell becomes a Desk v2 CANDIDATE STREAM with a sealed side (separate registration; nothing trades on this study). Step 7 ranking is then licensed inside that cell only. Direction still never reaches the product surface.
  • FAIL: direction is closed on large-move states at the swing horizon on this memory (adds to 89/93). The large-move stream may still feed the desk as v2 candidates with the AGENT supplying the side (that is the forward test already running as row 98); the memory's job on these states is width and abstention.

No constant (2.5 σ, 1.5×, 10-session cooldown, floors) is tuned on this sample. Sensitivity at 2.0 σ and 3.0 σ is reported as descriptive only and cannot rescue.

Secondaries (reported; cannot rescue)

  • Width at every horizon, 20 d included: per cell, IQR(f_h) / IQR(f_h of the date-matched universe draw), with a date-block CI. Pre-stated reading: a ratio ≥ 1.3 with CI90 clear of 1 at 20 d licenses a 20 d abstention / width receipt study (separate registration).
  • Continuation up-rate per cell, p10/p50/p90 of c_h, the 1-day-shock vs 5-day-drift subtype, |z| terciles.
  • The name's own history (step 8): among names with ≥ 5 prior events, does the name's own prior continuation rate (from prior events only, no lookahead) separate c_h? Descriptive.

Kill / void

Any anchor whose forward window reaches past 2026-09-02 is dropped from that horizon. Any change to the state, partitions, floors or gates after the first number is pulled voids the run (restart as study 100). The discovery/holdout split is by anchor date and fixed above. Survivorship caveat: daily_bars carries whatever was ingested for delisted names; the count of names with a truncated forward window is reported.

Machinery

scripts/research/study99_large_move_census.py (one SQL stage over daily_bars for the universe, then the census in Python), results to research/results/study99_large_move_census_2026_09_0X.md + .json. Runs in a quiet slot (after the 01:40 UTC situation_context_1d build, before the 03:30 UTC snapshot) or in the low-priority daytime slot, one runner on the box. study_ledger row 99.

Suggested citation: Chart Library (2026). After a large 1–5 day move with effort, direction is not knowable at the swing horizon. Study 99. chartlibrary.io/research/99-large-move-census.