The financial reasoning behind each stage. The aim is a reading you can argue with: every number on the panel traces back to a tweet, a date and a close.
Three assets, chosen because they are the ones finance Twitter argues about most and each has a clean daily instrument to score against:
| Asset | Instrument used for scoring | Why this one |
|---|---|---|
| Bitcoin | BTC-USD | Spot composite; trades every day, so every call has an exit close. |
| Gold | GC=F | COMEX front-month future, not spot — it is what most "gold to $3,000" calls are actually watching. |
| S&P 500 | ^GSPC | Index level; calls on SPY, ES and "the market" are mapped here. |
The roster is fixed: ~100 accounts grouped into five schools — Macro, Crypto, Quant, Technical, Goldbug — spanning English and Turkish. Everyone on the roster contributes; nobody is pruned by hand. Trust does the filtering.
Only original posts are read. Replies and retweets are excluded at every layer, because a reply's context is unknowable and a retweet is not the account's own call.
A call is an explicit, falsifiable claim about where one of the three assets is going. It has four fields and an optional fifth:
| Field | Values | Notes |
|---|---|---|
| asset | BTC · GOLD · SPX | One row per asset when a post calls several. |
| direction | BUY · SELL · NEUTRAL | Neutral is a stated "sideways / no edge" view, not the absence of one. |
| horizon | SHORT · MEDIUM · LONG | 0–3 months · 3–12 months · 1–5 years. Taken from the author's own frame: level and pattern talk reads short; an undated expectation reads medium; a valuation or structural thesis reads long; a stated date wins. |
| confidence | 0–1 | How committed the language is. |
| price target | USD | Only when a level is actually stated. "100k" becomes 100000. A target implies direction. |
Everything else is not a call, and this list is where most of the precision comes from: reports of what already happened, news forwarding, ETF flow and volume, questions, chart captions with no opinion, generic macro commentary, and two-sided conditionals ("if it breaks up, moon; if it breaks down, crash"). Sarcasm and idiom are read as intended — "gold is a bubble" is a sell, however it is phrased.
Every call stores the exact phrase from the post that justified it. That is what makes the dataset auditable rather than a black box: any label can be checked against the words in seconds.
A call is scored once, when its horizon matures — 90 days for short, 365 for medium, 730 for long — against the daily close of the instrument above. Nothing is scored early and nothing is re-scored. Because the posts are collected years back, most calls are already past their horizon when they are extracted and are scored at once from stored closes; only a call made in the last few months is still open, and it is scored the day its horizon arrives.
The return is compared to a flat band scaled to the asset's own volatility and to the horizon, so that noise in Bitcoin and a rounding error in the S&P over two years are not both counted as moves:
A move must clear that volatility-scaled band to count: the band is measured from the asset's own recent daily swings at the time of the post and widens with the length of the horizon, so a volatile asset over a long horizon needs a much larger move than a quiet one over a short horizon. The market's own direction is then up above the band, down below it, flat inside it, and the call resolves to one of three outcomes:
| Outcome | Credit | When |
|---|---|---|
| Correct | full | Called direction matches the market's direction (or called neutral and the market stayed inside the band). |
| Partial | part | Called a direction and the market stayed flat. |
| Wrong | none | Called one direction, market went the other — or called neutral and the market moved beyond the band either way. A "sideways" call is falsified by any big move; if it only cost partial credit, hedging would be free. |
A stated price target is the most falsifiable thing an account can say, so it carries its own adjustment: a bonus if any daily close inside the horizon touched the target, an equal penalty if none did. The best close reached (the "extreme") is recorded either way, so a near miss is visible. A target that sits on the wrong side of the entry price — a "buy" whose target is below where the asset already trades — would be touched by construction, so it earns nothing either way; the same goes for targets in the wrong units (an index level quoted in ETF points).
Trust is a per-account score for each asset and horizon, built only from matured calls: the average credit earned, shrunk toward a neutral prior so that a lucky streak on two calls cannot outrank a long record. The prior's pull fades as evidence accumulates, so an account with a long history is judged almost entirely on its own outcomes. When an account has no matured calls for a specific cell, the lookup falls back to its asset-level score, then its overall score, then the neutral prior.
Two properties matter for reading the numbers:
For each of the nine cells (asset × horizon), every account gets one vote — its latest call inside the horizon window — weighted by the account's trust for that cell, by how committed the call was, and by how recent it is; the reading is the balance of buy weight against sell weight.
One vote per account: an account that posts twenty calls a month counts once, at its latest view, so volume cannot outvote the roster. Confidence only nudges a vote — it separates outcomes weakly, so it should not decide one. Recent calls weigh more, and calls older than the horizon window drop out — a three-month-old short call is stale by definition. The label is Buy when the balance leans clearly long, Sell when it leans clearly short, Neutral in between, and n/a when there is too little weight or too few accounts have voted — one account is an opinion, not a reading. Each school also gets its own sub-reading per cell under the same rules, weighted by the sum of its members' trust, so a one-person school cannot dominate.
Direction, not magnitude. A Buy cell says the trusted part of the roster leans long; it says nothing about how far.
Regime bias is real. Most of the period covered has been a bull market for all three assets, and most of the roster is structurally bullish. Trust scores partly reward having been long while things went up. On the very same matured calls, an account that simply said "buy" every time would have scored — short · — medium · — long, against the roster's — · — · —. Where the roster does not beat that row it has no measurable edge; a flip away from Buy is therefore more informative than a Buy.
Volume is not evidence. One account can post a thousand calls a year; it still gets one vote per cell, at its latest view, and trust sets how much that vote weighs. The largest single contributor's share of each cell's weight is reported with the reading — a cell where one account carries half the weight is that account's view, not a consensus. The full contributor list behind every cell is on the panel.
The extraction is a model. Labels are produced by a language model checked against a hand-labeled reference set. On that set it agrees on whether a post is a call about 95 % of the time, and on direction and horizon roughly 90 % — but the reference set is small, so horizon remains the softest field, which is why the three horizons are kept separate rather than blended.
| Metric | Value |
|---|---|
| Original posts read | — |
| Explicit calls extracted | — |
| Calls matured and scored | — |
| Correct · partial · wrong | — |
| Hit rate, short · medium · long | — |
| Always-Buy on the same calls, short · medium · long | — |
| Accounts with ≥ 20 scored calls | — |
| Data through | — |
The full per-account, per-cell breakdown, every call with its tweet and price points, and the contributor list behind each reading are on the panel. Request access.