Skip to content

Find your next idea

Base-rate statistics

The pre-registration log: declared before it was computed

Every pattern on this hub was written into this dated log. That happened before any data was touched. Its entry names the definition, the full parameter grid and the horizons. In total, 12 patterns are registered and 9 have been computed. Each computed one has a page of its own, whatever the result. Status only moves forward, so an unwelcome result cannot be removed.

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.

Patterns registered12Each one has an entry below.
Variants declared300All committed to up front.
Computed9Every one has a page.
Declared and unanswered3Written down, not measured yet.
Three rules make this worth reading. First, the settings grid is chosen up front, and the headline uses its middle setting, not the one that looked best. Second, status only moves forward, so an unwelcome result cannot disappear. Third, every registered pattern gets a page whatever the result. That is why the null results sit in the same list. Download the log.
Gaps

gap-up-above-20dma

Registered on 5 September 2026.

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 fromopen[t+1]
Horizons declared1, 3, 5, 10, 20 trading days
gap threshold0.0160.0180.02 ←0.0220.024
ma length161820 ←2224
Variants committed to25, before any of them was seen
StatusComputed, and carrying a headline figure.
Gaps

gap-down-below-20dma

Registered on 5 September 2026.

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 fromopen[t+1]
Horizons declared1, 3, 5, 10, 20 trading days
gap threshold0.0160.0180.02 ←0.0220.024
ma length161820 ←2224
Variants committed to25, before any of them was seen
StatusComputed. The interval includes zero, so it shows no clear gap.
Price structure

close-crosses-above-20dma

Registered on 5 September 2026.

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 fromopen[t+1]
Horizons declared1, 3, 5, 10, 20 trading days
ma length161820 ←2224
days below345 ←67
Variants committed to25, before any of them was seen
StatusComputed, and carrying a headline figure.
Price structure

new-60-day-high

Registered on 5 September 2026.

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 fromopen[t+1]
Horizons declared1, 3, 5, 10, 20 trading days
lookback405060 ←7080
volume ratio0.60.81 ←1.21.4
Variants committed to25, before any of them was seen
StatusComputed, and carrying a headline figure.
Volume

volume-spike-without-price-move

Registered on 5 September 2026.

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 fromopen[t+1]
Horizons declared1, 3, 5, 10, 20 trading days
volume multiple22.53 ←3.54
move cap0.0050.00750.01 ←0.01250.015
Variants committed to25, before any of them was seen
StatusComputed, and carrying a headline figure.
Volatility

narrowest-range-in-seven-sessions

Registered on 5 September 2026.

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 fromopen[t+1]
Horizons declared1, 3, 5, 10, 20 trading days
lookback567 ←89
range cap0.010.0150.02 ←0.0250.03
Variants committed to25, before any of them was seen
StatusComputed, and carrying a headline figure.
Price structure

three-down-days-in-an-uptrend

Registered on 5 September 2026.

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 fromopen[t+1]
Horizons declared1, 3, 5, 10, 20 trading days
streak123 ←45
ma length404550 ←5560
Variants committed to25, before any of them was seen
StatusComputed, and carrying a headline figure.
Seasonality

early-session-of-the-month

Registered on 5 September 2026.

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 fromopen[t+1]
Horizons declared1, 3, 5, 10, 20 trading days
session offset012 ←34
ma length2050100 ←150200
Variants committed to25, before any of them was seen
StatusComputed, 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.

Market breadth

market-wide-down-day

Registered on 5 September 2026.

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 fromopen[t+1]
Horizons declared1, 3, 5, 10, 20 trading days
market threshold-0.03-0.025-0.02 ←-0.015-0.01
ma length2050100 ←150200
Variants committed to25, before any of them was seen
StatusComputed, and carrying a headline figure.
Post-earnings drift

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 fromopen[t+1]
Horizons declared1, 3, 5, 10, 20, 60 trading days
reaction threshold0.010.020.03 ←0.040.05
ma length2050100 ←150200
Variants committed to25, before any of them was seen
StatusDeclared, 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.

Volume

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 fromopen[t+1]
Horizons declared1, 3, 5, 10, 20 trading days
oi threshold0.050.0750.1 ←0.1250.15
ma length2050100 ←150200
Variants committed to25, before any of them was seen
StatusDeclared, 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 events

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 fromopen[t+1]
Horizons declared1, 3, 5, 10, 20 trading days
days before effective135 ←710
ma length2050100 ←150200
Variants committed to25, before any of them was seen
StatusDeclared, 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.

How the figures are produced

Next step

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