Null result

Predicting price direction

6.68 million hypotheses, six independent methodologies and no defensible edge. The project's best-established null result.

The question: Can you know whether Bitcoin's price will be higher within 7, 30 or 90 days?

What was found

It's the result that gives everything else in this section its meaning, which is why it's told in the same detail as a positive. Tested: threshold grids over 51 on-chain metrics (431,256 hypotheses), classic technical indicators, TradingView community scripts, geometric patterns and wave theory, directional machine-learning models across three families and three horizons, new data sources (futures positioning, funding, options, ETF flows, macro), multi-indicator conjunctions via depth-6 decision trees (an implicit space of some 10^19 combinations), and a sweep of 2.6 million indicator x window x lag x horizon cells. Walk-forward accuracy across every directional model stays glued to chance: AUC between 0.507 and 0.533, with no minimum fold above 0.5. The project publishes those predictions as ordinary series anyway, chart and all, precisely so they can be seen.

Try it yourself

Why being right more than half the time isn't enough. Drag the hit rate and what is won and lost in each case.

Expected value % = Hit rate x Average gain − Miss rate x Average loss
Expected value per trade

Hit rate needed just to break even:

With the default values you're right 53% of the time and still lose: the misses are slightly bigger than the hits. A model's accuracy is not its profitability, and confusing the two is the commonest mistake when reading an AUC.

Illustrative example numbers for practice — not real data.

How it was tested, step by step

  1. Each family is tested with walk-forward validation anchored to the halving cycles: the model trains only on complete cycles before the one it's evaluated on.
  2. The null it's compared against isn't "zero": it's a block permutation of the target itself, which preserves the series' temporal structure. Comparing against a null that ignores that structure hands out false significance by the bucketload.
  3. For the massive sweep, the correct null is the random-phase surrogate: multiplying each signal's Fourier transform by random phases produces a series with the SAME power spectrum — and therefore the same autocorrelation — but no relationship to the target. The maximum |IC| across the whole surface under that null is the honest threshold.
  4. Sweep result: 2,613,448 cells and ZERO above the threshold. In the long-history sweep, the best real cell is even WORSE than the average of chance.
SweepCellsReal max |IC|Chance threshold (max)Above it
Long history 2014-20221,161,8880.4130.6090
Derivatives era 2019-20221,408,6800.6870.7840
Conditioned on market state42,8800.6760.8930

The chance threshold is that high because there are millions of attempts. That is precisely the argument against continuing to scan.

What this does NOT say. The nuance that turns this into useful information rather than a lament: that sweep's family-wise threshold sits at an |IC| of 0.55 to 0.82, which is enormous. With 2.6 million cells and persistent series, the maximum by chance is large. So the sweep definitively rules out any LARGE effect anywhere in that space, and has NO power for a small one. And the effects that do exist here are small: leverage crowding has an IC of 0.03-0.04. The strategic conclusion is the opposite of "keep scanning": scanning cannot find effects of the size that actually exist, because the more cells you test the higher the threshold rises, and the threshold rises faster than any real signal. The project's only two verified effects came from specifying a mechanism first and testing it with one hypothesis and one test.

Tracking

This finding does have a real number that gets published and kept updated.

Data last updated on 2026-09-09.

← All research