The pre-registration log: declared before it was computed
Every pattern below was written down here before any data was measured. So was every variant of it. Writing it down first stops a result being picked after the fact.
The stock opened at least 2% above yesterday's close, on a day when it was already trading above its 20-day average price.
The same condition, written as a rule.
open[t] / close[t-1] - 1 >= 0.02 AND close[t-1] > sma(close, 20)[t-1]
| Measured from | open[t+1] | |
|---|---|---|
| Horizons declared | 1, 3, 5, 10, 20 trading days | |
| gap threshold | 0.0160.0180.02 ←0.0220.024 | |
| ma length | 161820 ←2224 | |
| Variants committed to | 25, before any of them was seen | |
| Status | Computed, and carrying a headline figure. | |
The stock opened at least 2% below yesterday's close, on a day when it was already trading below its 20-day average price.
The same condition, written as a rule.
open[t] / close[t-1] - 1 <= -0.02 AND close[t-1] < sma(close, 20)[t-1]
| Measured from | open[t+1] | |
|---|---|---|
| Horizons declared | 1, 3, 5, 10, 20 trading days | |
| gap threshold | 0.0160.0180.02 ←0.0220.024 | |
| ma length | 161820 ←2224 | |
| Variants committed to | 25, before any of them was seen | |
| Status | Computed. The interval includes zero, so it shows no clear gap. | |
The stock closed back above its 20-day average price after having spent at least five of the previous ten sessions below it.
The same condition, written as a rule.
close[t] > sma(close, 20)[t] AND close[t-1] <= sma(close, 20)[t-1] AND count(close < sma(close, 20) over t-10..t-1) >= 5
| Measured from | open[t+1] | |
|---|---|---|
| Horizons declared | 1, 3, 5, 10, 20 trading days | |
| ma length | 161820 ←2224 | |
| days below | 345 ←67 | |
| Variants committed to | 25, before any of them was seen | |
| Status | Computed, and carrying a headline figure. | |
The stock closed at its highest level in sixty sessions, on volume at least equal to its own twenty-day average.
The same condition, written as a rule.
close[t] = max(close over t-59..t) AND volume[t] >= 1.0 * avg(volume, 20)[t]
| Measured from | open[t+1] | |
|---|---|---|
| Horizons declared | 1, 3, 5, 10, 20 trading days | |
| lookback | 405060 ←7080 | |
| volume ratio | 0.60.81 ←1.21.4 | |
| Variants committed to | 25, before any of them was seen | |
| Status | Computed, and carrying a headline figure. | |
Volume was at least three times the stock's own twenty-day average while the closing price barely moved — under 1% either way.
The same condition, written as a rule.
volume[t] >= 3.0 * avg(volume, 20)[t] AND abs(close[t] / close[t-1] - 1) <= 0.01
| Measured from | open[t+1] | |
|---|---|---|
| Horizons declared | 1, 3, 5, 10, 20 trading days | |
| volume multiple | 22.53 ←3.54 | |
| move cap | 0.0050.00750.01 ←0.01250.015 | |
| Variants committed to | 25, before any of them was seen | |
| Status | Computed, and carrying a headline figure. | |
The day's high-to-low range was the narrowest of the last seven sessions, and under 2% of the closing price.
The same condition, written as a rule.
(high[t] - low[t]) / close[t] = min((high - low) / close over t-6..t) AND (high[t] - low[t]) / close[t] <= 0.02
| Measured from | open[t+1] | |
|---|---|---|
| Horizons declared | 1, 3, 5, 10, 20 trading days | |
| lookback | 567 ←89 | |
| range cap | 0.010.0150.02 ←0.0250.03 | |
| Variants committed to | 25, before any of them was seen | |
| Status | Computed, and carrying a headline figure. | |
The stock closed lower three sessions running while still trading above its fifty-day average price.
The same condition, written as a rule.
close[t] < close[t-1] < close[t-2] < close[t-3] AND close[t] > sma(close, 50)[t]
| Measured from | open[t+1] | |
|---|---|---|
| Horizons declared | 1, 3, 5, 10, 20 trading days | |
| streak | 123 ←45 | |
| ma length | 404550 ←5560 | |
| Variants committed to | 25, before any of them was seen | |
| Status | Computed, and carrying a headline figure. | |
The third trading session of a calendar month, for a stock trading above its hundred-day average price.
The same condition, written as a rule.
t is the third trading session of its calendar month (session_offset = 2) AND close[t] > sma(close, 100)[t]
| Measured from | open[t+1] | |
|---|---|---|
| Horizons declared | 1, 3, 5, 10, 20 trading days | |
| session offset | 012 ←34 | |
| ma length | 2050100 ←150200 | |
| Variants committed to | 25, before any of them was seen | |
| Status | Computed, and carrying a headline figure. | |
A note from the day it was written down. Registered deliberately as the clearest demonstration of effective sample size on the site: a calendar condition fires on every eligible security on the same day, so a raw count in the hundreds of thousands collapses to roughly the number of distinct dates.
A session on which the median eligible security fell at least 2%, for a stock trading above its hundred-day average price.
The same condition, written as a rule.
median(log return of all eligible securities)[t] <= -0.02 AND close[t] > sma(close, 100)[t]
| Measured from | open[t+1] | |
|---|---|---|
| Horizons declared | 1, 3, 5, 10, 20 trading days | |
| market threshold | -0.03-0.025-0.02 ←-0.015-0.01 | |
| ma length | 2050100 ←150200 | |
| Variants committed to | 25, before any of them was seen | |
| Status | Computed, and carrying a headline figure. | |
post-earnings-announcement-drift
Registered on 5 September 2026.The sessions following a quarterly results announcement, split by whether the stock rose or fell on the announcement day itself.
The same condition, written as a rule.
t = the first session after a quarterly results announcement AND sign(close[t] / close[t-1] - 1) determines the arm
| Measured from | open[t+1] | |
|---|---|---|
| Horizons declared | 1, 3, 5, 10, 20, 60 trading days | |
| reaction threshold | 0.010.020.03 ←0.040.05 | |
| ma length | 2050100 ←150200 | |
| Variants committed to | 25, before any of them was seen | |
| Status | Declared, but not computed. The data it needs is not held here. | |
A note from the day it was written down. NOT COMPUTED. It needs a point-in-time announcement date for every result between 2011 and 2026, stamped by filing date rather than period end. The daily bhavcopy carries no such field and no free public archive reconstructs it back to 2011. Registered rather than dropped, and it stays here unanswered until that dataset exists.
raw-open-interest-change
Registered on 5 September 2026.A single session's percentage change in a stock's futures open interest, split by direction.
The same condition, written as a rule.
open_interest[t] / open_interest[t-1] - 1 crosses a declared threshold
| Measured from | open[t+1] | |
|---|---|---|
| Horizons declared | 1, 3, 5, 10, 20 trading days | |
| oi threshold | 0.050.0750.1 ←0.1250.15 | |
| ma length | 2050100 ←150200 | |
| Variants committed to | 25, before any of them was seen | |
| Status | Declared, but not computed. The data it needs is not held here. | |
A note from the day it was written down. NOT COMPUTED. It needs the derivatives bhavcopy rather than the cash one, and a futures-eligible point-in-time universe to go with it. Registered now, at the same time as everything else, so that whatever it eventually shows was declared before it was seen.
index-reconstitution-entry
Registered on 5 September 2026.The sessions around a security being added to a broad index at a scheduled reconstitution.
The same condition, written as a rule.
t = the announcement session of an index inclusion
| Measured from | open[t+1] | |
|---|---|---|
| Horizons declared | 1, 3, 5, 10, 20 trading days | |
| days before effective | 135 ←710 | |
| ma length | 2050100 ←150200 | |
| Variants committed to | 25, before any of them was seen | |
| Status | Declared, but not computed. The data it needs is not held here. | |
A note from the day it was written down. NOT COMPUTED. It needs as-of index membership back to 2011. Today's constituent list cannot answer it — using it would be the reconstitution survivorship channel the method section warns about, measured instead of controlled for.
What the log produced
Each computed pattern shows its gap against a matched control. It also shows its 95% interval and its effective sample. Every one is published at the pre-declared centre of the grid recorded above. That holds whichever way it came out.
Open the base-rate tables