Tickbird

The evening shift

How it learns

Most market sites grade themselves on the one stock they told you about. We grade the whole exchange. Every evening, once the closing bell has rung, the day's move is recorded for every listed stock we track — the ones we picked, the ones we ranked and passed over, and the thousands we never mentioned. Then the morning's scoring is marked against it.

Sessions graded

44

One more every trading day

Stock-days measured

240,735

The whole market, not just the pick

Average rank correlation

0.001± 0.017

Still inside its own noise — nothing proved either way

Why measure stocks we did not pick

A screen that quietly throws away a whole family of winners leaves no trace of that mistake in the stocks it kept. The evidence sits entirely in what it discarded. So the only way to find that kind of blind spot is to keep score on the discards too, which is what the evening run does.

That turns one graded call a day into a hundred graded rankings and thousands of measured stock-days. It is the difference between an opinion about how the day went and a dataset.

What each number means

Rank correlation
Did the stocks we scored highest actually outrun the ones we scored low? Measured against the market's own move that day, so a session where everything rose does not flatter us. Zero means the ranking carries no directional information — our order and the market's were unrelated. Above zero, it carries some.
It comes with a ± figure for the same reason every other number here does. A correlation drawn from a hundred stocks wobbles by roughly a tenth from one session to the next even if nothing about the scoring changed, so no single row in the table below means anything on its own. The average across sessions steadies as they accumulate, and the ± shows how far it can still drift by chance alone. We call it a result only past twice that figure, because clearing it once is something a coin does one try in three.
Decile spread
The same idea in percentage points: our best-scored tenth of the day minus our worst-scored tenth.
Pick vs. best candidate
What the published stock did, next to the best stock we had already shortlisted. The gap is regret — value that was in our hands and not chosen.
Top-20 recall
Of the twenty biggest relative gainers that were actually tradable that day, how many had made it into our shortlist at all. This is the one that grades the filter rather than the scoring. "Tradable" matters: the largest movers on any given session are usually two-dollar micro caps spiking on an announcement, which our screen rules out on price and liquidity by design. Judging it against those would be scoring it on a race it deliberately does not enter.
Two yardsticks sit beside it, because a recall on its own is not a result. The first is a shortlist of the same size drawn at random. The second is harder and is the one we would apply to somebody else: volatility persists, so a screen built on momentum and volume catches more big movers than chance without forecasting anything. That column takes the most volatile names of the preceding sessions — same size, same price and liquidity floors, judged only on days already behind it so it never sees the answer — and counts what it would have caught. We are behind it, and we would rather you read that here than discover it yourself in our public dataset.

What each model has proved so far

Three models grade the finalists every morning, and the obvious way to score them is to ask how often a bullish call was followed by a stock that beat the market. That number lies. On a session where three quarters of the shortlist beat the market, a model that says yes to everything scores 75% and looks brilliant; on a dull session the same ignorance scores 40% and looks broken. Ours rose and fell together from one session to the next, which is the signature of a measurement reading the day rather than the model.

So every session is now scored against its own baseline — the share of that day's shortlist that beat the market — and what survives is the excess: what the model added over saying yes at random. Calls are pooled and weighted, because a day where a model spoke once cannot count as much as a day where it spoke seventy times.

ModelBullish callsBeat the marketChance would giveExcess
Perplexity250711911199.2−0.3 ± 1.0
Claude1097511522.4−1.0 ± 1.5
GPT930449451.1−0.2 ± 1.6

Excess is in percentage points. The ± figure is the wobble a coin would show over the same number of calls, and it is optimistic: calls made on the same session rise and fall together, so the real uncertainty is wider. An excess smaller than its own band is not a result — it is a model that has yet to prove anything, and saying so is cheaper than being caught claiming otherwise.

Which sessions may tune the scoring

Two things get confused constantly, so they are kept apart here. The published record holds every session — the bad ones, and the ones where our own machinery misbehaved. No published call is ever removed from it, and the returns quoted anywhere on this site are computed over all of it. The tuning set is narrower: the sessions the scoring is allowed to learn from.

The distinction is not cosmetic. Fitting coefficients to a stretch where the system was not running as designed teaches it to expect a behaviour that no longer exists. The result is not a flattered algorithm, it is a wrong one.

What keeps that from becoming a licence to drop inconvenient days is the rule itself. It is mechanical, it is written here with its numbers, and it never looks at how the session turned out. A session may tune the scoring when all 3 models graded it and none covered less than 80% of what the fullest one covered. That is the whole rule. A day where the pick lost money is eligible; a day where a model was down is not, however well the pick did.

33 of 44 graded sessions currently qualify.

  • 2026-10-15— only 0 of 3 models graded this session
  • 2026-09-04— partial coverage — anthropic 58/89
  • 2026-09-03— partial coverage — anthropic 59/89
  • 2026-09-02— partial coverage — anthropic 59/89
  • 2026-09-01— partial coverage — anthropic 57/87
  • 2026-08-31— partial coverage — anthropic 55/79
  • 2026-08-28— partial coverage — anthropic 54/82
  • 2026-08-27— partial coverage — anthropic 61/89
  • 2026-08-18— partial coverage — anthropic 39/88
  • 2026-08-17— partial coverage — perplexity 1/100
  • 2026-08-14— only 2 of 3 models graded this session

What the scoring is set to, and why

The final score is a blend of three things, and how much each one counts is not a decision anybody makes by hand any more. It is set by the record above. These are the shares in force this morning.

  • Quantitative analysis40%
  • Three-AI consensus50%
  • Catalyst quality10%

Every evening, once the sessions are graded, the three shares are re-examined. The test is deliberately hard to pass. A revision may shift at most 5 points from one component to another, so the scoring drifts rather than lurches. It may not happen at all until 60 sessions qualify for tuning. And the candidate setting is judged only on sessions it was not chosen from: each session is held out in turn, the move is picked on the others, and its gain is measured on the one left aside. That gain must clear 0.01 in rank correlation and be steady enough across sessions to reach t = 3.0 — roughly a one-in-a-thousand chance of clearing it on luck alone.

Almost every evening the answer is no, and that is the expected result rather than a failure. Both answers are recorded below, because a log that only kept the changes would suggest the question was only asked on the days it moved.

  • 2026-10-16left unchanged

    not enough graded sessions yet — 32 of the 60 required before the weights may move

  • 2026-10-15left unchanged

    not enough graded sessions yet — 32 of the 60 required before the weights may move

  • 2026-10-14left unchanged

    not enough graded sessions yet — 32 of the 60 required before the weights may move

  • 2026-10-13left unchanged

    not enough graded sessions yet — 32 of the 60 required before the weights may move

  • 2026-10-12left unchanged

    not enough graded sessions yet — 31 of the 60 required before the weights may move

  • 2026-10-09left unchanged

    not enough graded sessions yet — 30 of the 60 required before the weights may move

  • 2026-10-08left unchanged

    not enough graded sessions yet — 29 of the 60 required before the weights may move

  • 2026-10-07left unchanged

    not enough graded sessions yet — 28 of the 60 required before the weights may move

  • 2026-10-06left unchanged

    not enough graded sessions yet — 27 of the 60 required before the weights may move

  • 2026-10-05left unchanged

    not enough graded sessions yet — 26 of the 60 required before the weights may move

  • 2026-10-02left unchanged

    not enough graded sessions yet — 25 of the 60 required before the weights may move

  • 2026-10-01left unchanged

    not enough graded sessions yet — 24 of the 60 required before the weights may move

  • 2026-09-30left unchanged

    not enough graded sessions yet — 23 of the 60 required before the weights may move

  • 2026-09-29left unchanged

    not enough graded sessions yet — 22 of the 60 required before the weights may move

  • 2026-09-28left unchanged

    not enough graded sessions yet — 21 of the 60 required before the weights may move

  • 2026-09-25left unchanged

    not enough graded sessions yet — 20 of the 60 required before the weights may move

  • 2026-09-24left unchanged

    not enough graded sessions yet — 19 of the 60 required before the weights may move

  • 2026-09-23left unchanged

    not enough graded sessions yet — 18 of the 60 required before the weights may move

  • 2026-09-22left unchanged

    not enough graded sessions yet — 17 of the 60 required before the weights may move

  • 2026-09-21left unchanged

    not enough graded sessions yet — 16 of the 60 required before the weights may move

  • 2026-09-18left unchanged

    not enough graded sessions yet — 15 of the 60 required before the weights may move

  • 2026-09-17left unchanged

    not enough graded sessions yet — 14 of the 60 required before the weights may move

  • 2026-09-16left unchanged

    not enough graded sessions yet — 13 of the 60 required before the weights may move

  • 2026-09-15left unchanged

    not enough graded sessions yet — 12 of the 60 required before the weights may move

  • 2026-09-14left unchanged

    not enough graded sessions yet — 11 of the 60 required before the weights may move

  • 2026-09-11left unchanged

    not enough graded sessions yet — 10 of the 60 required before the weights may move

  • 2026-09-10left unchanged

    not enough graded sessions yet — 9 of the 60 required before the weights may move

  • 2026-09-09left unchanged

    not enough graded sessions yet — 8 of the 60 required before the weights may move

  • 2026-09-08left unchanged

    not enough graded sessions yet — 7 of the 60 required before the weights may move

  • 2026-09-04left unchanged

    not enough graded sessions yet — 6 of the 60 required before the weights may move

  • 2026-09-03left unchanged

    not enough graded sessions yet — 6 of the 60 required before the weights may move

  • 2026-09-02left unchanged

    not enough graded sessions yet — 6 of the 60 required before the weights may move

  • 2026-09-01left unchanged

    not enough graded sessions yet — 6 of the 60 required before the weights may move

  • 2026-08-31left unchanged

    not enough graded sessions yet — 6 of the 60 required before the weights may move

  • 2026-08-28left unchanged

    not enough graded sessions yet — 6 of the 60 required before the weights may move

  • 2026-08-27left unchanged

    not enough graded sessions yet — 6 of the 60 required before the weights may move

  • 2026-08-26left unchanged

    not enough graded sessions yet — 6 of the 60 required before the weights may move

  • 2026-08-25left unchanged

    not enough graded sessions yet — 5 of the 60 required before the weights may move

  • 2026-08-24left unchanged

    not enough graded sessions yet — 4 of the 60 required before the weights may move

Which of the two shortlists earns its place

The hundred stocks the three AIs read every morning do not come from one place. Eighty are the highest quantitative scores of the day. The other twenty are picked on how much a stock is already moving — volume, gap, the size of yesterday's swing, up or down alike. Until now nothing measured whether the second queue was worth its twenty seats.

It is measured now, one session at a time. The comparison is between the two queues' average return against the market on the same day, so a rising or falling market cancels out. The unit is the session and never the individual stock: a hundred names from one morning rise and fall together, and counting them as independent would multiply the apparent certainty by the length of the shortlist.

no answer yet— 39 labelled sessions

not enough labelled sessions yet — 39 of the 60 required before the two queues may be told apart

The bar is the same one the weights must clear: 60 sessions, and a gap steady enough to reach t = 3.0. Giving this question an easier bar would be a second, softer route to the same kind of decision. Expect the answer to stay “not yet” for a long time, and read any single session below for what it is worth, which is very little. As it stands the running total leans one way entirely on the strength of one bad day: drop that session and it leans the other. That is the whole reason the bar is where it is.

SessionQuantitative queueMovement queueGap
2026-10-12-1.49% (32)+0.63% (11)+2.12%
2026-10-08+0.53% (53)+1.04% (16)+0.51%
2026-10-07-0.38% (29)+2.32% (10)+2.70%
2026-10-06-4.26% (57)-0.65% (14)+3.61%
2026-10-05-2.57% (48)-0.56% (14)+2.00%
2026-10-02+0.19% (80)-1.70% (20)-1.88%
2026-10-01+0.36% (80)+1.23% (20)+0.88%
2026-09-30-0.02% (80)-0.58% (20)-0.56%
2026-09-29+1.06% (80)-0.59% (20)-1.65%
2026-09-28-1.28% (80)+3.35% (20)+4.63%
2026-09-25-1.37% (80)-3.01% (20)-1.64%
2026-09-24+1.41% (80)-1.35% (19)-2.76%
2026-09-23-1.27% (79)-2.80% (20)-1.53%
2026-09-22+2.11% (80)+0.34% (20)-1.77%
2026-09-21-1.27% (80)-1.05% (20)+0.22%
2026-09-18-0.12% (80)-0.44% (20)-0.32%
2026-09-17+0.35% (80)+0.78% (20)+0.44%
2026-09-16+0.42% (80)-2.08% (20)-2.49%
2026-09-15+0.88% (80)-0.63% (20)-1.51%
2026-09-14-0.32% (80)+0.08% (20)+0.39%
2026-09-11-0.08% (80)-1.87% (20)-1.78%
2026-09-10-0.17% (80)+2.26% (20)+2.43%
2026-09-09-1.09% (80)-2.62% (20)-1.53%
2026-09-08-0.32% (80)-0.05% (20)+0.27%
2026-09-04+1.02% (79)+1.24% (20)+0.22%
2026-09-03-1.62% (79)-1.20% (20)+0.42%
2026-09-02+1.14% (78)-1.03% (20)-2.17%
2026-09-01-0.12% (79)+0.92% (20)+1.04%
2026-08-31+0.48% (79)+0.28% (20)-0.20%
2026-08-28-2.15% (80)-5.70% (20)-3.55%
2026-08-27-2.64% (80)-3.45% (19)-0.81%
2026-08-26-1.12% (80)+2.93% (20)+4.05%
2026-08-25+3.58% (80)-0.93% (18)-4.52%
2026-08-24-1.40% (80)-1.93% (20)-0.53%
2026-08-21+0.05% (80)-0.16% (20)-0.22%
2026-08-20+0.59% (80)+0.77% (20)+0.18%
2026-08-19+1.27% (79)-4.03% (20)-5.30%
2026-08-18-0.51% (80)+0.23% (20)+0.74%
2026-08-17+0.03% (80)+0.90% (20)+0.88%

This one is worth publishing even while it says nothing, because anybody can already work it out. The open dataset gives the quantitative score of all hundred candidates for every closed session, and the first queue is by construction the top eighty of that ranking — sort, cut at eighty, and the two queues separate exactly. Keeping the number back would not hide it. It would only mean we were not looking.

Session by session

Bad days included. That is rather the point.

SessionStocks measuredRank corr.Decile spreadPickBest candidateTop-20 recallChance would giveVolatility basket
2026-10-153,663————0/20——
2026-10-14925————0/20——
2026-10-131,266-0.064-1.42%-0.71%+6.24%3/201.26/202/20
2026-10-121,642-0.274-9.75%—+17.00%4/201.53/202/20
2026-10-093,010-0.009+0.37%-1.00%+12.71%1/201.03/204/20
2026-10-084,5020.042+1.58%+0.65%+5.91%0/200.85/204/20
2026-10-072,1510.007-3.52%—+26.77%6/200.97/207/20
2026-10-064,6510.126+11.06%+1.15%+6.22%1/200.90/203/20
2026-10-053,2250.019-0.63%-1.44%+6.95%1/201.04/206/20
2026-10-026,0940.070-0.01%-2.82%+36.05%6/200.92/205/20
2026-10-016,085-0.105-3.41%+2.53%+47.78%3/200.88/205/20
2026-09-306,088-0.065-1.19%-6.32%+10.95%2/200.87/205/20
2026-09-296,0820.038+1.76%-1.30%+26.05%2/200.92/209/20
2026-09-286,0750.030-0.78%-2.98%+46.08%6/200.93/207/20
2026-09-256,083-0.047+0.02%-4.21%+10.38%3/200.97/204/20
2026-09-246,1060.202+3.34%+7.80%+20.18%9/200.91/208/20
2026-09-236,107-0.022+2.68%-1.91%+15.12%3/200.92/209/20
2026-09-226,093-0.004+0.67%-2.42%+18.08%2/200.90/203/20
2026-09-216,117-0.033-0.28%+1.44%+14.74%5/200.92/206/20
2026-09-186,0590.106-2.41%-1.60%+16.47%6/200.74/206/20
2026-09-176,091-0.028+0.46%+3.61%+25.60%3/200.91/206/20
2026-09-166,0780.034+2.23%+1.72%+19.33%3/200.90/208/20
2026-09-156,1010.141+2.67%+2.31%+12.32%2/200.91/209/20
2026-09-146,108-0.094+0.16%+0.01%+13.36%3/200.93/203/20
2026-09-116,0550.119+3.05%+1.22%+17.05%2/200.97/208/20
2026-09-106,094-0.223-2.85%+1.57%+19.12%3/200.95/208/20
2026-09-096,0570.021-0.01%-0.38%+13.64%1/200.94/204/20
2026-09-086,0960.104-0.36%-0.47%+8.75%1/200.95/205/20
2026-09-046,073-0.010+2.11%-0.06%+37.56%3/201.03/2010/20
2026-09-036,060-0.004-0.76%-1.19%+13.68%2/200.95/207/20
2026-09-026,0830.215+5.30%-0.43%+27.26%2/200.93/205/20
2026-09-016,0840.040+1.39%-0.62%+28.26%4/200.93/206/20
2026-08-316,116-0.126+0.00%-2.95%+30.10%5/200.92/208/20
2026-08-286,079-0.104+1.22%-3.99%+5.66%2/201.02/204/20
2026-08-276,093-0.020+2.37%-5.00%+9.26%2/200.99/206/20
2026-08-266,1070.114+3.80%+0.84%+43.10%5/201.00/204/20
2026-08-256,1290.046+9.79%+0.59%+62.72%6/200.97/2012/20
2026-08-246,0990.003+2.85%-1.74%+10.02%5/200.97/206/20
2026-08-216,1100.148+2.50%+3.93%+20.89%3/201.02/206/20
2026-08-206,774-0.153-3.29%+1.52%+17.73%6/200.95/207/20
2026-08-196,6140.162+1.30%+0.43%+15.18%2/200.93/206/20
2026-08-186,539-0.192-0.02%-1.08%+15.81%4/200.95/209/20
2026-08-176,537-0.025+1.64%+1.67%+12.94%5/200.95/206/20
2026-08-146,534-0.157-3.66%+3.73%+8.98%0/200.29/20—

Take the data and check it yourself

Nothing above is worth much if you have to take our word for the arithmetic. So the raw rows are downloadable: one file with every closed session and its graded metrics, one with every candidate we scored that morning and what it went on to do. Load either into a spreadsheet or into pandas and you can recompute every figure on this site — including the ones that do not flatter us.

Sessions

One row per closed session: the published pick, its open-to-close return against SPY, the algorithm version that produced it, the grading metrics and the sealed fingerprint.

CSVJSON

Candidates

One row per shortlisted stock per session: our scores and model consensus that morning, and the return the session actually delivered. This is what a rank correlation is computed from.

CSVJSON

Closed sessions only. The morning's shortlist stays behind the paywall until its session is over, so these files can never front-run a live call.

What we are not claiming

The tuning is not a pledge about some later version. It is a job that runs after every close, on the whole accumulated history, and that so far concludes every single time that there is not enough evidence to move anything. That is the honest description, and it is a narrower claim than the one most sites make: not that the scoring is getting better, but that the question is put to the data nightly and answered in public either way.

So no improvement is being asserted here. What is asserted is that the record is being built, that it decides the weights rather than a person deciding them, and that it will keep declining to move them for as long as the numbers say so — including if that turns out to be a very long time. The counters at the top of this page are the whole claim, and deliberately the easiest thing on this site to check.

One caveat on the earliest sessions. Whole-universe measurement started after the first calls were published, so those sessions were graded after the fact rather than on the evening itself. The prices are the same either way — a closing price does not change — but the investable universe they are compared against is today's definition, not the one in force that morning. The sessions file carries a graded_on column giving the date each grade was computed, so a retroactive one is visible at a glance rather than passed off as same-day work.

Each morning's call is sealed and timestamped into the Bitcoin blockchain before the market opens, which is what stops any of this from being tidied up after the fact.

This is not investment advice. Tickbird is an automated experiment. It publishes a general analysis, not a personal recommendation, and it makes no promise about any outcome. Past results do not predict future ones. Never risk money you cannot afford to lose.