What actually happened after each signal
Before trusting a label, it is fair to ask what happened the last few thousand times it appeared. The engine was re-run on 217 coins across roughly 4.4 years of daily closes, producing 17,948 scored days.
Median return after each label
2022-04-09 → 2026-09-11 · one reading every 7 days per coin
| Signal on the day | Windows | +7d | +30d | +90d | Higher after 30d | Higher after 90d |
|---|---|---|---|---|---|---|
| Strong buy | 1,445 | -0.4% | -2.5% | -9.7% | 45% | 42% |
| Buy | 2,263 | -1.5% | -6.4% | -12.9% | 38% | 36% |
| Neutral | 2,829 | -1.2% | -7.0% | -16.8% | 36% | 33% |
| Sell | 3,195 | -0.9% | -4.2% | -14.7% | 40% | 32% |
| Strong sell | 7,550 | -0.6% | -3.0% | -7.1% | 44% | 41% |
| Every window (baseline) | 17,282 | -0.8% | -4.2% | -10.9% | 41% | 38% |
Ninety days out, the whole distribution
medians hide the tails, so both deciles are shown
| Signal | Median | Mean | Worst decile | Best decile | Windows |
|---|---|---|---|---|---|
| Strong buy | -9.7% | +6.5% | -51.3% | +74.7% | 1,356 |
| Buy | -12.9% | +3.5% | -48.6% | +58.7% | 2,140 |
| Neutral | -16.8% | -2.9% | -50.1% | +50.3% | 2,598 |
| Sell | -14.7% | +0.8% | -46.8% | +53.0% | 2,813 |
| Strong sell | -7.1% | +6.0% | -42.5% | +57.7% | 6,534 |
| Every window (baseline) | -10.9% | +3.3% | -46.3% | +57.6% | 15,441 |
Reading the table
Thirty days after a buy label the median coin returned -6.4%, which is no better than the -4.2% a random day in the same sample delivered. Counting wins rather than sizes does not rescue the label — 38% of buy days were higher 30 days later, against 41% for any day. If anything in this table earns its label it is strong buy, +1.7% better than an average day at the 30-day mark.
The buckets do not line up: neutral sits below sell over 30 days, and the bearish extreme (-3.0%) beat the plain buy label (-6.4%). Coins labelled sell went on to a median -4.2% over the next month, which is indistinguishable from the sample baseline of -4.2%. At three months the gap is wider in the wrong direction rather than smaller: -12.9% for buy days against -10.9% for any day.
The sample period itself was unkind to holders: holding a random coin for 90 days returned a median -10.9%. Skew dominates: -10.9% median against a +3.3% mean at 90 days, so most positions lost money while the aggregate did not. Frequency check: bullish labels on 22% of days, bearish on 61%, the rest neutral.
A median hides the spread: strong-buy outcomes at 90 days ranged from -51.3% in the worst decile to +74.7% in the best.
How this was measured, and what it cannot tell you
Method. The live scoring engine was replayed day by day. For each coin, a window of daily candles ending on day t was handed to the same function that labels coins today, so the label for day t uses only closes up to and including day t. Forward returns were then read from the closes at t+7, t+30 and t+90. Windows start after 220 candles, because the 200-day average needs that much history, and one reading is taken every 7 days per coin.
Survivorship bias. The universe is the coins this site tracks now. Tokens that collapsed, delisted or were abandoned before today are largely absent, which flatters every row in the table, the baseline most of all. Treat the absolute numbers as optimistic and the differences between rows as the part worth reading. 1.7% of windows were scored on the reduced check set, because those coins have closing prices but no high-low data.
Overlapping windows. Consecutive readings for the same coin share most of their forward period, and coins move together, so the window count is much larger than the number of genuinely independent observations. Confidence intervals would be wider than the sample size suggests.
Exchange and cost differences. Candles come from Binance USDT pairs where they exist and from CoinGecko daily series otherwise, so prices differ from what another venue printed on the same day. Nothing here subtracts trading fees, spreads, slippage or funding, and every entry and exit is assumed to happen exactly at a 00:00 UTC close.
What it is not. This is a measurement of a fixed set of technical checks on past data, not a strategy, a forecast or advice. Past distributions do not carry forward, the sample covers one broad market cycle at most, and a label that separated outcomes historically can stop doing so the moment conditions change. Read it as a sanity check on the labels you see elsewhere on this site, alongside the methodology and the trending archive.
Common questions
Is there look-ahead bias in these numbers?
No. The label for a given day is produced from a candle series that is cut off at that day, so the engine cannot see the prices it is being measured against. Forward returns are read only after the label exists.
Does a buy label mean the price will rise?
It does not. It means only that, in this sample, days scoring above 60 on ten fixed technical checks were followed by a median -6.4% over the next month, with a very wide spread around that median. A median is not a forecast for any single coin.
Why compare against a baseline instead of zero?
Because the sample has its own drift — the median 90-day window in it returned -10.9%. A label is only worth something if it beats a randomly chosen day in the same period, whether that baseline happens to be positive or negative, which is why the baseline row sits at the bottom of every table.
How often is this recalculated?
Once a week. Replaying the engine over 17,948 historical days is the most expensive job on the site, so the result is cached and refreshed on a weekly cycle rather than daily; the date of the run is shown above the table.
Why do some cells show a dash?
A cell is only printed when at least 40 windows fall into that bucket. Rare labels on short price histories do not produce enough observations to be worth a number, and a thin sample presented as a result would be worse than no result.
Does this include fees, or trending coins specifically?
Neither. Returns are raw close-to-close moves with no costs deducted. The sample is every coin with enough price history that the site tracks, not only the ones on a trending list, so it measures the technical signal rather than the trending signal.